User: Add settings store to Info, AccountView
authorlain <lain@soykaf.club>
Fri, 31 May 2019 12:27:15 +0000 (14:27 +0200)
committerlain <lain@soykaf.club>
Fri, 31 May 2019 12:27:15 +0000 (14:27 +0200)
This is to provide a generic frontend settings storage mechanism for all kinds
of frontends.

lib/pleroma/user/info.ex
lib/pleroma/web/mastodon_api/views/account_view.ex
test/web/mastodon_api/account_view_test.exs

index 6397e2737b8fddc658149b420e74db539a41f27e..e6623160d0da40499c900bbdcd35a357e6d0f39c 100644 (file)
@@ -45,6 +45,7 @@ defmodule Pleroma.User.Info do
     field(:flavour, :string, default: nil)
     field(:mascot, :map, default: nil)
     field(:emoji, {:array, :map}, default: [])
+    field(:pleroma_settings_store, :map, default: %{})
 
     field(:notification_settings, :map,
       default: %{"remote" => true, "local" => true, "followers" => true, "follows" => true}
index b82d3319b4c4d40da6ef356ed61eb2b0e00dca91..04d48534090fa1f295e08167945d60b3c4627c34 100644 (file)
@@ -130,6 +130,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
     |> maybe_put_role(user, opts[:for])
     |> maybe_put_settings(user, opts[:for], user_info)
     |> maybe_put_notification_settings(user, opts[:for])
+    |> maybe_put_settings_store(user, opts[:for], opts)
   end
 
   defp username_from_nickname(string) when is_binary(string) do
@@ -152,6 +153,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
 
   defp maybe_put_settings(data, _, _, _), do: data
 
+  defp maybe_put_settings_store(data, %User{info: info, id: id}, %User{id: id}, %{
+         with_pleroma_settings: true
+       }) do
+    data
+    |> Kernel.put_in([:pleroma, :settings], info.pleroma_settings_store)
+  end
+
+  defp maybe_put_settings_store(data, _, _, _), do: data
+
   defp maybe_put_role(data, %User{info: %{show_role: true}} = user, _) do
     data
     |> Kernel.put_in([:pleroma, :is_admin], user.info.is_admin)
index aaf2261bbd2f6f98e76c73fca2edd744a2bbca13..ca73d6581a7edfd9ed61d3476cc96d4afeee64af 100644 (file)
@@ -239,4 +239,19 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
 
     assert expected == AccountView.render("account.json", %{user: user, for: other_user})
   end
+
+  test "returns the settings store if the requesting user is the represented user and it's requested specifically" do
+    user = insert(:user, %{info: %User.Info{pleroma_settings_store: %{fe: "test"}}})
+
+    result =
+      AccountView.render("account.json", %{user: user, for: user, with_pleroma_settings: true})
+
+    assert result.pleroma.settings == %{:fe => "test"}
+
+    result = AccountView.render("account.json", %{user: user, with_pleroma_settings: true})
+    assert result.pleroma[:settings] == nil
+
+    result = AccountView.render("account.json", %{user: user, for: user})
+    assert result.pleroma[:settings] == nil
+  end
 end