Current section
5 Versions
Jump to
Current section
5 Versions
Compare versions
3
files changed
+40
additions
-18
deletions
| @@ -40,4 +40,4 @@ | |
| 40 40 | {<<"optional">>,false}, |
| 41 41 | {<<"repository">>,<<"hexpm">>}, |
| 42 42 | {<<"requirement">>,<<"~> 2.0.1">>}]]}. |
| 43 | - {<<"version">>,<<"1.0.2">>}. |
| 43 | + {<<"version">>,<<"1.0.3">>}. |
| @@ -71,15 +71,7 @@ defmodule ExAws.S3.DirectUpload do | |
| 71 71 | def presigned(%ExAws.S3.DirectUpload{} = upload) do |
| 72 72 | %{ |
| 73 73 | url: url(upload), |
| 74 | - credentials: %{ |
| 75 | - policy: policy(upload), |
| 76 | - "x-amz-algorithm": "AWS4-HMAC-SHA256", |
| 77 | - "x-amz-credential": credential(), |
| 78 | - "x-amz-date": @date_util.today_datetime(), |
| 79 | - "x-amz-signature": signature(upload), |
| 80 | - acl: upload.acl, |
| 81 | - key: file_path(upload) |
| 82 | - } |
| 74 | + credentials: credentials(upload) |
| 83 75 | } |
| 84 76 | end |
| 85 77 | |
| @@ -96,7 +88,24 @@ defmodule ExAws.S3.DirectUpload do | |
| 96 88 | |> Poison.encode! |
| 97 89 | end |
| 98 90 | |
| 99 | - defp signature(upload) do |
| 91 | + defp credentials(%ExAws.S3.DirectUpload{} = upload) do |
| 92 | + credentials = %{ |
| 93 | + policy: policy(upload), |
| 94 | + "x-amz-algorithm": "AWS4-HMAC-SHA256", |
| 95 | + "x-amz-credential": credential(), |
| 96 | + "x-amz-date": @date_util.today_datetime(), |
| 97 | + "x-amz-signature": signature(upload), |
| 98 | + acl: upload.acl, |
| 99 | + key: file_path(upload) |
| 100 | + } |
| 101 | + unless security_token() == nil do |
| 102 | + credentials |
| 103 | + |> Map.put(:"x-amz-security-token", security_token()) |
| 104 | + end |
| 105 | + credentials |
| 106 | + end |
| 107 | + |
| 108 | + defp signature(%ExAws.S3.DirectUpload{} = upload) do |
| 100 109 | signing_key() |
| 101 110 | |> hmac(policy(upload)) |
| 102 111 | |> Base.encode16(case: :lower) |
| @@ -110,7 +119,7 @@ defmodule ExAws.S3.DirectUpload do | |
| 110 119 | |> hmac("aws4_request") |
| 111 120 | end |
| 112 121 | |
| 113 | - defp policy(upload) do |
| 122 | + defp policy(%ExAws.S3.DirectUpload{} = upload) do |
| 114 123 | %{ |
| 115 124 | expiration: @date_util.expiration_datetime, |
| 116 125 | conditions: conditions(upload) |
| @@ -119,8 +128,8 @@ defmodule ExAws.S3.DirectUpload do | |
| 119 128 | |> Base.encode64 |
| 120 129 | end |
| 121 130 | |
| 122 | - defp conditions(upload) do |
| 123 | - [ |
| 131 | + defp conditions(%ExAws.S3.DirectUpload{} = upload) do |
| 132 | + conditions = [ |
| 124 133 | %{"bucket" => upload.bucket}, |
| 125 134 | %{"acl" => upload.acl}, |
| 126 135 | %{"x-amz-algorithm": "AWS4-HMAC-SHA256"}, |
| @@ -129,6 +138,11 @@ defmodule ExAws.S3.DirectUpload do | |
| 129 138 | ["starts-with", "$Content-Type", upload.mimetype], |
| 130 139 | ["starts-with", "$key", upload.path] |
| 131 140 | ] |
| 141 | + conditions = case security_token() do |
| 142 | + nil -> conditions |
| 143 | + _ -> [%{"x-amz-security-token" => security_token()} | conditions] |
| 144 | + end |
| 145 | + conditions |
| 132 146 | end |
| 133 147 | |
| 134 148 | defp url(%ExAws.S3.DirectUpload{bucket: bucket}) do |
| @@ -147,16 +161,24 @@ defmodule ExAws.S3.DirectUpload do | |
| 147 161 | :crypto.hmac(:sha256, key, data) |
| 148 162 | end |
| 149 163 | |
| 164 | + defp security_token do |
| 165 | + ExAws.Config.new(:s3) |
| 166 | + |> Map.get(:security_token) |
| 167 | + end |
| 168 | + |
| 150 169 | defp access_key do |
| 151 | - ExAws.Config.new(:s3) |> Map.get(:access_key_id) |
| 170 | + ExAws.Config.new(:s3) |
| 171 | + |> Map.get(:access_key_id) |
| 152 172 | end |
| 153 173 | |
| 154 174 | defp secret_key do |
| 155 | - ExAws.Config.new(:s3) |> Map.get(:secret_access_key) |
| 175 | + ExAws.Config.new(:s3) |
| 176 | + |> Map.get(:secret_access_key) |
| 156 177 | end |
| 157 178 | |
| 158 179 | defp region do |
| 159 | - ExAws.Config.new(:s3) |> Map.get(:region) |
| 180 | + ExAws.Config.new(:s3) |
| 181 | + |> Map.get(:region) |
| 160 182 | end |
| 161 183 | |
| 162 184 | end |
| @@ -4,7 +4,7 @@ defmodule ExAws.S3.DirectUpload.Mixfile do | |
| 4 4 | def project do |
| 5 5 | [ |
| 6 6 | app: :ex_aws_s3_direct_upload, |
| 7 | - version: "1.0.2", |
| 7 | + version: "1.0.3", |
| 8 8 | elixir: "~> 1.4", |
| 9 9 | build_embedded: Mix.env == :prod, |
| 10 10 | start_permanent: Mix.env == :prod, |