added wrapper Pleroma.HTTP for ExAws.S3
authorMaksim Pechnikov <parallel588@gmail.com>
Thu, 25 Jun 2020 04:12:29 +0000 (07:12 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Thu, 25 Jun 2020 04:12:29 +0000 (07:12 +0300)
config/config.exs
lib/pleroma/http/ex_aws.ex [new file with mode: 0644]
test/http/ex_aws_test.exs [new file with mode: 0644]

index bd559c835578ff9f77d9c765824f88247cebb4f2..5aad26e95806411c600b02ae58ed4371c4e6521e 100644 (file)
@@ -697,6 +697,8 @@ config :pleroma, :mrf,
 
 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
 # of this file so it overrides the configuration defined above.
 import_config "#{Mix.env()}.exs"
diff --git a/lib/pleroma/http/ex_aws.ex b/lib/pleroma/http/ex_aws.ex
new file mode 100644 (file)
index 0000000..e53e640
--- /dev/null
@@ -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
diff --git a/test/http/ex_aws_test.exs b/test/http/ex_aws_test.exs
new file mode 100644 (file)
index 0000000..d0b00ca
--- /dev/null
@@ -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