From 83ae45b000261d3e03a4b554064350a5ead172c3 Mon Sep 17 00:00:00 2001
From: Alex Gleason <alex@alexgleason.me>
Date: Mon, 12 Oct 2020 18:49:37 -0500
Subject: [PATCH] Preload `/api/pleroma/frontend_configurations`, fixes #1932

---
 lib/pleroma/web/preload/instance.ex                      | 9 +++++++++
 .../web/twitter_api/controllers/util_controller.ex       | 6 +-----
 lib/pleroma/web/twitter_api/views/util_view.ex           | 6 ++++++
 test/web/preload/instance_test.exs                       | 8 ++++++++
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/web/preload/instance.ex b/lib/pleroma/web/preload/instance.ex
index 50d1f3382..cc6f8cf99 100644
--- a/lib/pleroma/web/preload/instance.ex
+++ b/lib/pleroma/web/preload/instance.ex
@@ -7,11 +7,13 @@ defmodule Pleroma.Web.Preload.Providers.Instance do
   alias Pleroma.Web.MastodonAPI.InstanceView
   alias Pleroma.Web.Nodeinfo.Nodeinfo
   alias Pleroma.Web.Preload.Providers.Provider
+  alias Pleroma.Web.TwitterAPI.UtilView
 
   @behaviour Provider
   @instance_url "/api/v1/instance"
   @panel_url "/instance/panel.html"
   @nodeinfo_url "/nodeinfo/2.0.json"
+  @fe_config_url "/api/pleroma/frontend_configurations"
 
   @impl Provider
   def generate_terms(_params) do
@@ -19,6 +21,7 @@ defmodule Pleroma.Web.Preload.Providers.Instance do
     |> build_info_tag()
     |> build_panel_tag()
     |> build_nodeinfo_tag()
+    |> build_fe_config_tag()
   end
 
   defp build_info_tag(acc) do
@@ -47,4 +50,10 @@ defmodule Pleroma.Web.Preload.Providers.Instance do
         Map.put(acc, @nodeinfo_url, nodeinfo_data)
     end
   end
+
+  defp build_fe_config_tag(acc) do
+    fe_data = UtilView.render("frontend_configurations.json", %{})
+
+    Map.put(acc, @fe_config_url, fe_data)
+  end
 end
diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex
index 70b0fbd54..6d827846d 100644
--- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex
+++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex
@@ -74,11 +74,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
   end
 
   def frontend_configurations(conn, _params) do
-    config =
-      Config.get(:frontend_configurations, %{})
-      |> Enum.into(%{})
-
-    json(conn, config)
+    render(conn, "frontend_configurations.json")
   end
 
   def emoji(conn, _params) do
diff --git a/lib/pleroma/web/twitter_api/views/util_view.ex b/lib/pleroma/web/twitter_api/views/util_view.ex
index d3bdb4f62..98eea1d18 100644
--- a/lib/pleroma/web/twitter_api/views/util_view.ex
+++ b/lib/pleroma/web/twitter_api/views/util_view.ex
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.TwitterAPI.UtilView do
   use Pleroma.Web, :view
   import Phoenix.HTML.Form
+  alias Pleroma.Config
   alias Pleroma.Web
 
   def status_net_config(instance) do
@@ -19,4 +20,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilView do
     </config>
     """
   end
+
+  def render("frontend_configurations.json", _) do
+    Config.get(:frontend_configurations, %{})
+    |> Enum.into(%{})
+  end
 end
diff --git a/test/web/preload/instance_test.exs b/test/web/preload/instance_test.exs
index a46f28312..8493f2a94 100644
--- a/test/web/preload/instance_test.exs
+++ b/test/web/preload/instance_test.exs
@@ -45,4 +45,12 @@ defmodule Pleroma.Web.Preload.Providers.InstanceTest do
     assert metadata.private == false
     assert metadata.suggestions == %{enabled: false}
   end
+
+  test "it renders the frontend configurations", %{
+    "/api/pleroma/frontend_configurations" => fe_configs
+  } do
+    assert %{
+             pleroma_fe: %{background: "/images/city.jpg", logo: "/static/logo.png"}
+           } = fe_configs
+  end
 end