Packages
ex_aws
0.4.5
2.7.0
2.6.1
2.6.0
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.1
1.0.0-beta3
1.0.0-beta2
1.0.0-beta1
1.0.0-beta0
0.5.0
0.4.19
0.4.18
0.4.17
0.4.15
0.4.14
0.4.13
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
AWS client for Elixir. Currently supports Dynamo, DynamoStreams, EC2, Firehose, Kinesis, KMS, Lambda, RRDS, Route53, S3, SES, SNS, SQS, STS and others.
Current section
Files
Jump to
Current section
Files
lib/ex_aws/s3/request.ex
defmodule ExAws.S3.Request do
@moduledoc false
# S3 specific request logic.
def request(client, http_method, bucket, path, data \\ []) do
body = data |> Keyword.get(:body, "")
resource = data |> Keyword.get(:resource, "")
query = data |> Keyword.get(:params, %{}) |> URI.encode_query
headers = data |> Keyword.get(:headers, %{})
url = client.config
|> url(bucket, path)
|> add_query(resource, query)
hashed_payload = ExAws.Auth.Utils.hash_sha256(body)
headers = headers
|> Map.put("x-amz-content-sha256", hashed_payload)
|> Map.to_list
ExAws.Request.request(http_method, url, body, headers, client)
end
def url(%{scheme: scheme, host: host}, bucket, path) do
[
scheme,
host_and_bucket(host, bucket),
path |> ensure_slash
] |> IO.iodata_to_binary
end
def add_query(url, "", ""), do: url
def add_query(url, "", query), do: url <> "?" <> query
def add_query(url, resource, ""), do: url <> "?" <> resource
def add_query(url, resource, query), do: url <> "?" <> resource <> "&" <> query
defp ensure_slash("/" <> _ = path), do: path
defp ensure_slash(path), do: "/" <> path
defp host_and_bucket(host, ""), do: host
defp host_and_bucket(host, bucket) do
case bucket |> String.contains?(".") do
true -> [host, "/", bucket]
false -> [bucket, ".", host]
end
end
end