commit: 1775a4db081f6764c358ac68bc0b5153a1a369fe
parent 4f78a9142abca9330894eaa50a3d72d4aab7367a
Author: lain <lain@soykaf.club>
Date: Wed, 2 Apr 2025 13:00:42 +0000
Merge branch 'siteinfo-baseurls' into 'develop'
Provide media proxy and upload base urls in siteinfo
See merge request pleroma/pleroma!4349
Diffstat:
3 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/changelog.d/siteinfo-baseurls.add b/changelog.d/siteinfo-baseurls.add
@@ -0,0 +1 @@
+Add `base_urls` to the /api/v1/instance pleroma metadata which provides information about the base URLs for media_proxy and uploads when configured
+\ No newline at end of file
diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex
@@ -261,6 +261,21 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
end
defp pleroma_configuration(instance) do
+ base_urls = %{}
+
+ base_urls =
+ if Config.get([:media_proxy, :enabled]) do
+ Map.put(base_urls, :media_proxy, Config.get([:media_proxy, :base_url]))
+ else
+ base_urls
+ end
+
+ base_urls =
+ case Config.get([Pleroma.Upload, :base_url]) do
+ nil -> base_urls
+ url -> Map.put(base_urls, :upload, url)
+ end
+
%{
metadata: %{
account_activation_required: Keyword.get(instance, :account_activation_required),
@@ -270,7 +285,8 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
post_formats: Config.get([:instance, :allowed_post_formats]),
birthday_required: Config.get([:instance, :birthday_required]),
birthday_min_age: Config.get([:instance, :birthday_min_age]),
- translation: supported_languages()
+ translation: supported_languages(),
+ base_urls: base_urls
},
stats: %{mau: Pleroma.User.active_user_count()},
vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key)
diff --git a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs
@@ -161,4 +161,37 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do
|> get("/api/v1/instance/translation_languages")
|> json_response_and_validate_schema(200)
end
+
+ test "base_urls in pleroma metadata", %{conn: conn} do
+ media_proxy_base_url = "https://media.example.org"
+ upload_base_url = "https://uploads.example.org"
+
+ clear_config([:media_proxy, :enabled], true)
+ clear_config([:media_proxy, :base_url], media_proxy_base_url)
+ clear_config([Pleroma.Upload, :base_url], upload_base_url)
+
+ conn = get(conn, "/api/v1/instance")
+
+ assert result = json_response_and_validate_schema(conn, 200)
+ assert result["pleroma"]["metadata"]["base_urls"]["media_proxy"] == media_proxy_base_url
+ assert result["pleroma"]["metadata"]["base_urls"]["upload"] == upload_base_url
+
+ # Test when media_proxy is disabled
+ clear_config([:media_proxy, :enabled], false)
+
+ conn = get(conn, "/api/v1/instance")
+
+ assert result = json_response_and_validate_schema(conn, 200)
+ refute Map.has_key?(result["pleroma"]["metadata"]["base_urls"], "media_proxy")
+ assert result["pleroma"]["metadata"]["base_urls"]["upload"] == upload_base_url
+
+ # Test when upload base_url is not set
+ clear_config([Pleroma.Upload, :base_url], nil)
+
+ conn = get(conn, "/api/v1/instance")
+
+ assert result = json_response_and_validate_schema(conn, 200)
+ refute Map.has_key?(result["pleroma"]["metadata"]["base_urls"], "media_proxy")
+ refute Map.has_key?(result["pleroma"]["metadata"]["base_urls"], "upload")
+ end
end