Skip to content

Commit a551280

Browse files
committed
Merge pull request #44 from CargoSense/fix_42
Fix 42
2 parents cc0ac7f + 07a9535 commit a551280

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

lib/ex_aws/auth.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ defmodule ExAws.Auth do
22
import ExAws.Auth.Utils
33
alias Timex.DateFormat
44

5+
@moduledoc false
6+
57
def headers(http_method, url, service, config, headers, body) do
68
now = %{Timex.Date.now | ms: 0}
79
headers = [
@@ -22,7 +24,13 @@ defmodule ExAws.Auth do
2224
now)
2325

2426
[{"Authorization", auth_header} | headers ]
27+
|> handle_temp_credentials(config)
28+
end
29+
30+
def handle_temp_credentials(headers, %{security_token: token}) do
31+
[{"X-Amz-Security-Token", token} | headers]
2532
end
33+
def handle_temp_credentials(headers, _), do: headers
2634

2735
def auth_header(access_key, secret_key, http_method, url, region, service, headers, body, now) do
2836
date = DateFormat.format!(now, "%Y%m%d", :strftime)

lib/ex_aws/config.ex

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,28 @@ defmodule ExAws.Config do
3737
def retrieve_runtime_config(%{config: config} = client) do
3838
new_config = config
3939
|> Enum.reduce(%{}, fn {k, v}, config ->
40-
Map.put(config, k, retrieve_runtime_value(k, v, client))
40+
case retrieve_runtime_value(v, client) do
41+
%{} = result -> Map.merge(config, result)
42+
value -> Map.put(config, k, value)
43+
end
4144
end)
4245

4346
%{client | config: new_config}
4447
end
4548

46-
def retrieve_runtime_value(_, {:system, env_key}, _) do
49+
def retrieve_runtime_value({:system, env_key}, _) do
4750
System.get_env(env_key)
4851
end
49-
def retrieve_runtime_value(k, :instance_role, client) do
52+
def retrieve_runtime_value(:instance_role, client) do
5053
client
5154
|> ExAws.Config.AuthCache.get
52-
|> Map.get(k)
55+
|> Map.take([:access_key_id, :secret_access_key, :security_token])
5356
end
54-
def retrieve_runtime_value(key, values, client) when is_list(values) do
57+
def retrieve_runtime_value(values, client) when is_list(values) do
5558
values
56-
|> Stream.map(&retrieve_runtime_value(key, &1, client))
59+
|> Stream.map(&retrieve_runtime_value(&1, client))
5760
|> Enum.find(&(&1))
5861
end
59-
def retrieve_runtime_value(_, value, _), do: value
62+
def retrieve_runtime_value(value, _), do: value
6063

6164
end

lib/ex_aws/instance_meta.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ defmodule ExAws.InstanceMeta do
1818
%{
1919
access_key_id: result["AccessKeyId"],
2020
secret_access_key: result["SecretAccessKey"],
21+
security_token: result["Token"],
2122
expiration: result["Expiration"]
2223
}
2324
end

0 commit comments

Comments
 (0)