Skip to content

Commit

Permalink
put_aws_sigv4: Try detecting the service
Browse files Browse the repository at this point in the history
  • Loading branch information
wojtekmach committed Jul 18, 2024
1 parent f6fb034 commit 9bb1470
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 7 deletions.
40 changes: 37 additions & 3 deletions lib/req/steps.ex
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,8 @@ defmodule Req.Steps do
* `:token` - if set, the AWS security token, for example returned from AWS STS.
* `:service` - the AWS service.
* `:service` - the AWS service. We try to automatically detect the service (e.g.
`s3.amazonaws.com` host sets service to `:s3`)
* `:region` - the AWS region. Defaults to `"us-east-1"`.
Expand All @@ -1149,8 +1150,7 @@ defmodule Req.Steps do
...> base_url: "https://s3.amazonaws.com",
...> aws_sigv4: [
...> access_key_id: System.get_env("AWS_ACCESS_KEY_ID"),
...> secret_access_key: System.get_env("AWS_SECRET_ACCESS_KEY"),
...> service: :s3
...> secret_access_key: System.get_env("AWS_SECRET_ACCESS_KEY")
...> ]
...> )
iex>
Expand Down Expand Up @@ -1191,6 +1191,7 @@ 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 Down Expand Up @@ -1241,6 +1242,39 @@ defmodule Req.Steps do
end
end

defp maybe_put_aws_service(options, url) do
if options[:service] do
options
else
if service = detect_aws_service(url) do
Keyword.put(options, :service, service)
end
end
end

defp detect_aws_service(%URI{} = url) do
parts = url.host |> String.split(".") |> Enum.reverse()

with ["com", "amazonaws" | rest] <- parts do
case rest do
# s3
["s3" | _] -> :s3
[_region, "s3" | _] -> :s3
# sqs
["sqs" | _] -> :sqs
[_region, "sqs" | _] -> :sqs
# ses
["email" | _] -> :ses
[_region, "email" | _] -> :ses
# iam
["iam"] -> :iam
_ -> nil
end
else
_ -> nil
end
end

## Response steps

@doc """
Expand Down
3 changes: 1 addition & 2 deletions test/req/integration_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ defmodule Req.IntegrationTest do
base_url: "https://#{aws_bucket}.s3.amazonaws.com",
aws_sigv4: [
access_key_id: aws_access_key_id,
secret_access_key: aws_secret_access_key,
service: :s3
secret_access_key: aws_secret_access_key
]
)

Expand Down
2 changes: 0 additions & 2 deletions test/req/steps_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,6 @@ defmodule Req.StepsTest do
aws_sigv4: [
access_key_id: "foo",
secret_access_key: "bar",
service: :s3,
datetime: ~U[2024-01-01 00:00:00Z]
],
body: "hello",
Expand Down Expand Up @@ -558,7 +557,6 @@ defmodule Req.StepsTest do
aws_sigv4: [
access_key_id: "foo",
secret_access_key: "bar",
service: :s3,
datetime: ~U[2024-01-01 00:00:00Z]
],
headers: [content_length: 5],
Expand Down

0 comments on commit 9bb1470

Please sign in to comment.