Skip to content

Commit

Permalink
put_aws_sigv4: Raise on no :access_key_id/:secret_access_key/:service
Browse files Browse the repository at this point in the history
  • Loading branch information
wojtekmach committed Jul 26, 2024
1 parent 4273a81 commit 7e164e0
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
15 changes: 12 additions & 3 deletions lib/req/steps.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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 ->
Expand Down Expand Up @@ -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
Expand Down
30 changes: 30 additions & 0 deletions test/req/steps_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 7e164e0

Please sign in to comment.