Upload: bring back base_url
authorhref <href@random.sh>
Fri, 30 Nov 2018 16:44:12 +0000 (17:44 +0100)
committerhref <href@random.sh>
Fri, 30 Nov 2018 17:02:50 +0000 (18:02 +0100)
lib/pleroma/upload.ex
test/media_proxy_test.exs
test/upload_test.exs

index a298ab488864e2b7ef98ef30288e6e71e3259638..bf2c60102cedafb8a4d0581faab065fe8f204306 100644 (file)
@@ -5,6 +5,7 @@ defmodule Pleroma.Upload do
   Options:
   * `:type`: presets for activity type (defaults to Document) and size limits from app configuration
   * `:description`: upload alternative text
+  * `:base_url`: override base url
   * `:uploader`: override uploader
   * `:filters`: override filters
   * `:size_limit`: override size limit
@@ -64,7 +65,7 @@ defmodule Pleroma.Upload do
            %{
              "type" => "Link",
              "mediaType" => upload.content_type,
-             "href" => url_from_spec(url_spec)
+             "href" => url_from_spec(opts.base_url, url_spec)
            }
          ],
          "name" => Map.get(opts, :description) || upload.name
@@ -100,7 +101,13 @@ defmodule Pleroma.Upload do
       size_limit: Keyword.get(opts, :size_limit, size_limit),
       uploader: Keyword.get(opts, :uploader, Pleroma.Config.get([__MODULE__, :uploader])),
       filters: Keyword.get(opts, :filters, Pleroma.Config.get([__MODULE__, :filters])),
-      description: Keyword.get(opts, :description)
+      description: Keyword.get(opts, :description),
+      base_url:
+        Keyword.get(
+          opts,
+          :base_url,
+          Pleroma.Config.get([__MODULE__, :base_url], Pleroma.Web.base_url())
+        )
     }
 
     # TODO: 1.0+ : remove old config compatibility
@@ -204,8 +211,8 @@ defmodule Pleroma.Upload do
     tmp_path
   end
 
-  defp url_from_spec({:file, path}) do
-    [Pleroma.Web.base_url(), "media", path]
+  defp url_from_spec(base_url, {:file, path}) do
+    [base_url, "media", path]
     |> Path.join()
   end
 
index c69ed7ea483255c4371df9886de1238453a86879..d71f9f13a71948eca143abb054c762bd75f51131 100644 (file)
@@ -82,6 +82,23 @@ defmodule Pleroma.MediaProxyTest do
       [_, "proxy", sig, base64 | _] = URI.parse(encoded).path |> String.split("/")
       assert decode_url(sig, base64) == {:error, :invalid_signature}
     end
+
+    test "uses the configured base_url" do
+      base_url = Pleroma.Config.get([:media_proxy, :base_url])
+
+      if base_url do
+        on_exit(fn ->
+          Pleroma.Config.put([:media_proxy, :base_url], base_url)
+        end)
+      end
+
+      Pleroma.Config.put([:media_proxy, :base_url], "https://cache.pleroma.social")
+
+      url = "https://pleroma.soykaf.com/static/logo.png"
+      encoded = url(url)
+
+      assert String.starts_with?(encoded, Pleroma.Config.get([:media_proxy, :base_url]))
+    end
   end
 
   describe "when disabled" do
index 7117373bd718c28de40040653ea3725a3f851a3a..cfd86ddd0362a22cad1cd172cb4cd7a63fe7cc46 100644 (file)
@@ -36,6 +36,24 @@ defmodule Pleroma.UploadTest do
       assert String.starts_with?(url, Pleroma.Web.base_url() <> "/media/")
     end
 
+    test "returns a media url with configured base_url" do
+      base_url = "https://cache.pleroma.social"
+
+      File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
+
+      file = %Plug.Upload{
+        content_type: "image/jpg",
+        path: Path.absname("test/fixtures/image_tmp.jpg"),
+        filename: "image.jpg"
+      }
+
+      {:ok, data} = Upload.store(file, base_url: base_url)
+
+      assert %{"url" => [%{"href" => url}]} = data
+
+      assert String.starts_with?(url, base_url <> "/media/")
+    end
+
     test "copies the file to the configured folder with deduping" do
       File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")