diff --git a/lib/req/steps.ex b/lib/req/steps.ex index 79eb432..108288d 100644 --- a/lib/req/steps.ex +++ b/lib/req/steps.ex @@ -1191,7 +1191,6 @@ defmodule Req.Steps do |> Keyword.put_new(:datetime, DateTime.utc_now()) # aws_credentials returns this key so let's ignore it |> Keyword.drop([:credential_provider]) - |> maybe_put_aws_service(request.url) Req.Request.validate_options(aws_options, [ :access_key_id, @@ -1205,6 +1204,16 @@ defmodule Req.Steps do :expires ]) + unless aws_options[:access_key_id] do + raise ArgumentError, "missing :access_key_id in :aws_sigv4 option" + end + + unless aws_options[:secret_access_key] do + raise ArgumentError, "missing :secret_access_key in :aws_sigv4 option" + end + + aws_options = ensure_aws_service(aws_options, request.url) + {body, options} = case request.body do nil -> @@ -1242,14 +1251,14 @@ defmodule Req.Steps do end end - defp maybe_put_aws_service(options, url) do + defp ensure_aws_service(options, url) do if options[:service] do options else if service = detect_aws_service(url) do Keyword.put(options, :service, service) else - options + raise ArgumentError, "missing :service in :aws_sigv4 option" end end end diff --git a/test/req/steps_test.exs b/test/req/steps_test.exs index 7af4501..f29b3c2 100644 --- a/test/req/steps_test.exs +++ b/test/req/steps_test.exs @@ -566,6 +566,36 @@ defmodule Req.StepsTest do assert Req.put!(req).body == "ok" end + + test "missing :access_key_id" do + req = Req.new(aws_sigv4: []) + + assert_raise ArgumentError, "missing :access_key_id in :aws_sigv4 option", fn -> + Req.get(req) + end + end + + test "missing :secret_access_key" do + req = Req.new(aws_sigv4: [access_key_id: "foo"]) + + assert_raise ArgumentError, "missing :secret_access_key in :aws_sigv4 option", fn -> + Req.get(req) + end + end + + test "missing :service" do + req = + Req.new( + aws_sigv4: [ + access_key_id: "foo", + secret_access_key: "bar" + ] + ) + + assert_raise ArgumentError, "missing :service in :aws_sigv4 option", fn -> + Req.get(req) + end + end end ## Response steps