From: lain <lain@soykaf.club>
Date: Wed, 23 Jan 2019 11:40:57 +0000 (+0100)
Subject: New frontend configuration mechanism.
X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=e221c681dcd387aa445c35957a32fdc0189a0955;p=akkoma

New frontend configuration mechanism.
---

diff --git a/config/config.exs b/config/config.exs
index d30b0aad0..7f63a0a39 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -154,6 +154,7 @@ config :pleroma, :markup,
     Pleroma.HTML.Scrubber.Default
   ]
 
+# Deprecated, will be gone in 1.0
 config :pleroma, :fe,
   theme: "pleroma-dark",
   logo: "/static/logo.png",
@@ -172,6 +173,24 @@ config :pleroma, :fe,
   subject_line_behavior: "email",
   always_show_subject_input: true
 
+config :pleroma, :frontend_configurations,
+  pleroma_fe: %{
+    theme: "pleroma-dark",
+    logo: "/static/logo.png",
+    background: "/static/aurora_borealis.jpg",
+    redirectRootNoLogin: "/main/all",
+    redirectRootLogin: "/main/friends",
+    showInstanceSpecificPanel: true,
+    scopeOptionsEnabled: false,
+    formattingOptionsEnabled: false,
+    collapseMessageWithSubject: false,
+    hidePostStats: false,
+    hideUserStats: false,
+    scopeCopy: true,
+    subjectLineBehavior: "email",
+    alwaysShowSubjectInput: true
+  }
+
 config :pleroma, :activitypub,
   accept_blocks: true,
   unfollow_blocked: true,
diff --git a/docs/config.md b/docs/config.md
index 6bf7b9ea7..ff4a1012c 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -101,7 +101,24 @@ config :pleroma, Pleroma.Mailer,
 * `backends`: `:console` is used to send logs to stdout, `{ExSyslogger, :ex_syslogger}` to log to syslog
 See: [logger’s documentation](https://hexdocs.pm/logger/Logger.html) and [ex_syslogger’s documentation](https://hexdocs.pm/ex_syslogger/)
 
+
+## :frontend_configurations
+
+This can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for `pleroma_fe` are configured.
+
+Frontends can access these settings at `/api/pleroma/frontend_configurations`
+
+To add your own configuration for PleromaFE, use it like this:
+
+`config :pleroma, :frontend_configurations, :pleroma_fe, %{theme: "my-theme", ...}`
+
+These settings need to be complete, they will overide the defaults.
+
 ## :fe
+__THIS IS DEPRACTED__
+
+If you are using this method, please change it to the `frontend_configurations` method.
+
 This section is used to configure Pleroma-FE, unless ``:managed_config`` in ``:instance`` is set to false.
 
 * `theme`: Which theme to use, they are defined in ``styles.json``
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 69ab58c6a..8ddc642ea 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -284,6 +284,7 @@ defmodule Pleroma.Web.Router do
     post("/help/test", TwitterAPI.UtilController, :help_test)
     get("/statusnet/config", TwitterAPI.UtilController, :config)
     get("/statusnet/version", TwitterAPI.UtilController, :version)
+    get("/pleroma/frontend_configurations", TwitterAPI.UtilController, :frontend_configurations)
   end
 
   scope "/api", Pleroma.Web do
diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex
index a79072f3d..085642876 100644
--- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex
+++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex
@@ -216,6 +216,14 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
     end
   end
 
+  def frontend_configurations(conn, _params) do
+    config =
+      Pleroma.Config.get(:frontend_configurations, %{})
+      |> Enum.into(%{})
+
+    json(conn, config)
+  end
+
   def version(conn, _params) do
     version = Pleroma.Application.named_version()
 
diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs
index 73aa70bd5..c099db003 100644
--- a/test/web/twitter_api/util_controller_test.exs
+++ b/test/web/twitter_api/util_controller_test.exs
@@ -32,4 +32,27 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
       assert response == "job started"
     end
   end
+
+  describe "GET /api/pleroma/frontent_configurations" do
+    test "returns everything in :pleroma, :frontend_configurations", %{conn: conn} do
+      config = [
+        frontend_a: %{
+          x: 1,
+          y: 2
+        },
+        frontend_b: %{
+          z: 3
+        }
+      ]
+
+      Pleroma.Config.put(:frontend_configurations, config)
+
+      response =
+        conn
+        |> get("/api/pleroma/frontend_configurations")
+        |> json_response(:ok)
+
+      assert response == Jason.encode!(config |> Enum.into(%{})) |> Jason.decode!()
+    end
+  end
 end