diff options
| -rw-r--r-- | config/config.exs | 19 | ||||
| -rw-r--r-- | docs/config.md | 17 | ||||
| -rw-r--r-- | lib/pleroma/application.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/config/deprecation_warnings.ex | 20 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/controllers/util_controller.ex | 52 | ||||
| -rw-r--r-- | priv/static/images/city.jpg | bin | 0 -> 3191646 bytes | |||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 67 | 
8 files changed, 159 insertions, 19 deletions
diff --git a/config/config.exs b/config/config.exs index e8cf2ed3a..1180a50bc 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: "/images/city.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 5464fa90d..8740c3fae 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 DEPRECATED__ + +If you are using this method, please change it to the `frontend_configurations` method. Please set this option to false in your config like this: `config :pleroma, :fe, false`. +  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/application.ex b/lib/pleroma/application.ex index 47c0e5b68..c65bebb3b 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -22,6 +22,8 @@ defmodule Pleroma.Application do    def start(_type, _args) do      import Cachex.Spec +    Pleroma.Config.DeprecationWarnings.warn() +      # Define workers and child supervisors to be supervised      children =        [ diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex new file mode 100644 index 000000000..dc50682ee --- /dev/null +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -0,0 +1,20 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Config.DeprecationWarnings do +  require Logger + +  def check_frontend_config_mechanism() do +    if Pleroma.Config.get(:fe) do +      Logger.warn(""" +      !!!DEPRECATION WARNING!!! +      You are using the old configuration mechanism for the frontend. Please check config.md. +      """) +    end +  end + +  def warn do +    check_frontend_config_mechanism() +  end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 68e7a44b6..bfa10451a 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -278,6 +278,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..b347faa71 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -183,25 +183,31 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do            invitesEnabled: if(Keyword.get(instance, :invites_enabled, false), do: "1", else: "0")          } -        pleroma_fe = %{ -          theme: Keyword.get(instance_fe, :theme), -          background: Keyword.get(instance_fe, :background), -          logo: Keyword.get(instance_fe, :logo), -          logoMask: Keyword.get(instance_fe, :logo_mask), -          logoMargin: Keyword.get(instance_fe, :logo_margin), -          redirectRootNoLogin: Keyword.get(instance_fe, :redirect_root_no_login), -          redirectRootLogin: Keyword.get(instance_fe, :redirect_root_login), -          chatDisabled: !Keyword.get(instance_chat, :enabled), -          showInstanceSpecificPanel: Keyword.get(instance_fe, :show_instance_panel), -          scopeOptionsEnabled: Keyword.get(instance_fe, :scope_options_enabled), -          formattingOptionsEnabled: Keyword.get(instance_fe, :formatting_options_enabled), -          collapseMessageWithSubject: Keyword.get(instance_fe, :collapse_message_with_subject), -          hidePostStats: Keyword.get(instance_fe, :hide_post_stats), -          hideUserStats: Keyword.get(instance_fe, :hide_user_stats), -          scopeCopy: Keyword.get(instance_fe, :scope_copy), -          subjectLineBehavior: Keyword.get(instance_fe, :subject_line_behavior), -          alwaysShowSubjectInput: Keyword.get(instance_fe, :always_show_subject_input) -        } +        pleroma_fe = +          if instance_fe do +            %{ +              theme: Keyword.get(instance_fe, :theme), +              background: Keyword.get(instance_fe, :background), +              logo: Keyword.get(instance_fe, :logo), +              logoMask: Keyword.get(instance_fe, :logo_mask), +              logoMargin: Keyword.get(instance_fe, :logo_margin), +              redirectRootNoLogin: Keyword.get(instance_fe, :redirect_root_no_login), +              redirectRootLogin: Keyword.get(instance_fe, :redirect_root_login), +              chatDisabled: !Keyword.get(instance_chat, :enabled), +              showInstanceSpecificPanel: Keyword.get(instance_fe, :show_instance_panel), +              scopeOptionsEnabled: Keyword.get(instance_fe, :scope_options_enabled), +              formattingOptionsEnabled: Keyword.get(instance_fe, :formatting_options_enabled), +              collapseMessageWithSubject: +                Keyword.get(instance_fe, :collapse_message_with_subject), +              hidePostStats: Keyword.get(instance_fe, :hide_post_stats), +              hideUserStats: Keyword.get(instance_fe, :hide_user_stats), +              scopeCopy: Keyword.get(instance_fe, :scope_copy), +              subjectLineBehavior: Keyword.get(instance_fe, :subject_line_behavior), +              alwaysShowSubjectInput: Keyword.get(instance_fe, :always_show_subject_input) +            } +          else +            Pleroma.Config.get([:frontend_configurations, :pleroma_fe]) +          end          managed_config = Keyword.get(instance, :managed_config) @@ -216,6 +222,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/priv/static/images/city.jpg b/priv/static/images/city.jpg Binary files differnew file mode 100644 index 000000000..c32204719 --- /dev/null +++ b/priv/static/images/city.jpg diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 73aa70bd5..dc9bad369 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -32,4 +32,71 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        assert response == "job started"      end    end + +  describe "GET /api/statusnet/config.json" do +    test "it returns the managed config", %{conn: conn} do +      Pleroma.Config.put([:instance, :managed_config], false) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      refute response["site"]["pleromafe"] + +      Pleroma.Config.put([:instance, :managed_config], true) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      assert response["site"]["pleromafe"] +    end + +    test "if :pleroma, :fe is false, it returns the new style config settings", %{conn: conn} do +      Pleroma.Config.put([:instance, :managed_config], true) +      Pleroma.Config.put([:fe, :theme], "rei-ayanami-towel") +      Pleroma.Config.put([:frontend_configurations, :pleroma_fe], %{theme: "asuka-hospital"}) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      assert response["site"]["pleromafe"]["theme"] == "rei-ayanami-towel" + +      Pleroma.Config.put([:fe], false) + +      response = +        conn +        |> get("/api/statusnet/config.json") +        |> json_response(:ok) + +      assert response["site"]["pleromafe"]["theme"] == "asuka-hospital" +    end +  end + +  describe "GET /api/pleroma/frontend_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  | 
