added wrapper Pleroma.HTTP for ExAws.S3

This commit is contained in:
Maksim Pechnikov 2020-06-25 07:12:29 +03:00
parent ae94fcc95f
commit 439a1a0218
3 changed files with 78 additions and 0 deletions

View file

@ -697,6 +697,8 @@ config :pleroma, :mrf,
config :tzdata, :http_client, Pleroma.HTTP.Tzdata config :tzdata, :http_client, Pleroma.HTTP.Tzdata
config :ex_aws, http_client: Pleroma.HTTP.ExAws
# Import environment specific config. This must remain at the bottom # Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above. # of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs" import_config "#{Mix.env()}.exs"

View file

@ -0,0 +1,22 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTTP.ExAws do
@moduledoc false
@behaviour ExAws.Request.HttpClient
alias Pleroma.HTTP
@impl true
def request(method, url, body \\ "", headers \\ [], http_opts \\ []) do
case HTTP.request(method, url, body, headers, http_opts) do
{:ok, env} ->
{:ok, %{status_code: env.status, headers: env.headers, body: env.body}}
{:error, reason} ->
{:error, %{reason: reason}}
end
end
end

54
test/http/ex_aws_test.exs Normal file
View file

@ -0,0 +1,54 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTTP.ExAwsTest do
use ExUnit.Case
import Tesla.Mock
alias Pleroma.HTTP
@url "https://s3.amazonaws.com/test_bucket/test_image.jpg"
setup do
mock(fn
%{method: :get, url: @url, headers: [{"x-amz-bucket-region", "us-east-1"}]} ->
%Tesla.Env{
status: 200,
body: "image-content",
headers: [{"x-amz-bucket-region", "us-east-1"}]
}
%{method: :post, url: @url, body: "image-content-2"} ->
%Tesla.Env{status: 200, body: "image-content-2"}
end)
:ok
end
describe "request" do
test "get" do
assert HTTP.ExAws.request(:get, @url, "", [{"x-amz-bucket-region", "us-east-1"}]) == {
:ok,
%{
body: "image-content",
headers: [{"x-amz-bucket-region", "us-east-1"}],
status_code: 200
}
}
end
test "post" do
assert HTTP.ExAws.request(:post, @url, "image-content-2", [
{"x-amz-bucket-region", "us-east-1"}
]) == {
:ok,
%{
body: "image-content-2",
headers: [],
status_code: 200
}
}
end
end
end