Add [:instances_favicons, :enabled] setting, defaults to false
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Wed, 8 Jul 2020 03:56:24 +0000 (05:56 +0200)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Wed, 8 Jul 2020 04:28:40 +0000 (06:28 +0200)
config/config.exs
config/description.exs
config/test.exs
docs/configuration/cheatsheet.md
lib/pleroma/web/mastodon_api/views/account_view.ex
test/web/mastodon_api/views/account_view_test.exs

index 458d3a99ab0b90cd66e18bcf6d9fca5e65708eb8..3577cd10104de71b3a73c85c4057de37b5e34b93 100644 (file)
@@ -706,6 +706,8 @@ config :tzdata, :http_client, Pleroma.HTTP.Tzdata
 
 config :ex_aws, http_client: Pleroma.HTTP.ExAws
 
+config :pleroma, :instances_favicons, enabled: false
+
 # 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"
index 650610fbe598a4e5b7ba04585a66e0c9736b4629..7c432d67dedba47c1c1fc817e5e894bb310a9690 100644 (file)
@@ -3447,5 +3447,18 @@ config :pleroma, :config_description, [
         suggestions: [false]
       }
     ]
+  },
+  %{
+    group: :pleroma,
+    key: :instances_favicons,
+    type: :group,
+    description: "Control favicons for instances",
+    children: [
+      %{
+        key: :enabled,
+        type: :boolean,
+        description: "Allow/disallow displaying and getting instances favicons"
+      }
+    ]
   }
 ]
index e38b9967d67a387031ad58d0b50b22458d45fd54..e6596e0bcecd552f7d0939b06eeab113a6058950 100644 (file)
@@ -111,6 +111,8 @@ config :pleroma, Pleroma.Plugs.RemoteIp, enabled: false
 
 config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: true
 
+config :pleroma, :instances_favicons, enabled: true
+
 if File.exists?("./config/test.secret.exs") do
   import_config "test.secret.exs"
 else
index 6b640cebc5cdca2aaba63f00871250a238022863..7a3200e019f8c4b2adcd419d7452fc16fa717188 100644 (file)
@@ -987,3 +987,9 @@ Restrict access for unauthenticated users to timelines (public and federate), us
 ## Pleroma.Web.ApiSpec.CastAndValidate
 
 * `:strict` a boolean, enables strict input validation (useful in development, not recommended in production). Defaults to `false`.
+
+## :instances_favicons
+
+Control favicons for instances.
+
+* `enabled`: Allow/disallow displaying and getting instances favicons
index db5739254ab46514ffbc85fbd35394b3159b238e..2feba47782dbb553908a6601a329086a3b56c3bf 100644 (file)
@@ -205,12 +205,16 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
       end
 
     favicon =
-      user
-      |> Map.get(:ap_id, "")
-      |> URI.parse()
-      |> URI.merge("/")
-      |> Pleroma.Instances.Instance.get_or_update_favicon()
-      |> MediaProxy.url()
+      if Pleroma.Config.get([:instances_favicons, :enabled]) do
+        user
+        |> Map.get(:ap_id, "")
+        |> URI.parse()
+        |> URI.merge("/")
+        |> Pleroma.Instances.Instance.get_or_update_favicon()
+        |> MediaProxy.url()
+      else
+        nil
+      end
 
     %{
       id: to_string(user.id),
index c4341cb2809e50b536b4aec003edcf31bbf79119..ac6d50e3adeaeae46a77ac71968f9dcf356513f2 100644 (file)
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
   use Pleroma.DataCase
 
+  alias Pleroma.Config
   alias Pleroma.User
   alias Pleroma.UserRelationship
   alias Pleroma.Web.CommonAPI
@@ -18,6 +19,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
     :ok
   end
 
+  setup do: clear_config([:instances_favicons, :enabled])
+
   test "Represent a user account" do
     background_image = %{
       "url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]
@@ -94,6 +97,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
     assert expected == AccountView.render("show.json", %{user: user})
   end
 
+  test "Favicon is nil when :instances_favicons is disabled" do
+    user = insert(:user)
+
+    Config.put([:instances_favicons, :enabled], true)
+
+    assert %{
+             pleroma: %{
+               favicon:
+                 "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png"
+             }
+           } = AccountView.render("show.json", %{user: user})
+
+    Config.put([:instances_favicons, :enabled], false)
+
+    assert %{pleroma: %{favicon: nil}} = AccountView.render("show.json", %{user: user})
+  end
+
   test "Represent the user account for the account owner" do
     user = insert(:user)