aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/user.ex8
-rw-r--r--lib/pleroma/web/nodeinfo/nodeinfo_controller.ex7
-rw-r--r--priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs7
-rw-r--r--test/web/node_info_test.exs17
4 files changed, 39 insertions, 0 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 64c69b209..1dad30e87 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -609,6 +609,14 @@ defmodule Pleroma.User do
)
end
+ def moderator_user_query() do
+ from(
+ u in User,
+ where: u.local == true,
+ where: fragment("?->'is_moderator' @> 'true'", u.info)
+ )
+ end
+
def deactivate(%User{} = user) do
new_info = Map.put(user.info, "deactivated", true)
cs = User.info_changeset(user, %{info: new_info})
diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
index 9155e42cd..67cef004a 100644
--- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
+++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
@@ -3,6 +3,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
alias Pleroma.Stats
alias Pleroma.Web
+ alias Pleroma.{User, Repo}
def schemas(conn, _params) do
response = %{
@@ -26,6 +27,11 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
gopher = Application.get_env(:pleroma, :gopher)
stats = Stats.get_stats()
+ staff_accounts =
+ User.moderator_user_query()
+ |> Repo.all()
+ |> Enum.map(fn u -> u.ap_id end)
+
response = %{
version: "2.0",
software: %{
@@ -55,6 +61,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
timeout: Keyword.get(suggestions, :timeout, 5000),
web: Keyword.get(suggestions, :web, "")
},
+ staffAccounts: staff_accounts,
chat: Keyword.get(chat, :enabled),
gopher: Keyword.get(gopher, :enabled)
}
diff --git a/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs b/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs
new file mode 100644
index 000000000..ba6b90ea9
--- /dev/null
+++ b/priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs
@@ -0,0 +1,7 @@
+defmodule Pleroma.Repo.Migrations.UsersAddIsModeratorIndex do
+ use Ecto.Migration
+
+ def change do
+ create index(:users, ["(info->'is_moderator')"], name: :users_is_moderator_index, using: :gin)
+ end
+end
diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs
new file mode 100644
index 000000000..d48f40e47
--- /dev/null
+++ b/test/web/node_info_test.exs
@@ -0,0 +1,17 @@
+defmodule Pleroma.Web.NodeInfoTest do
+ use Pleroma.Web.ConnCase
+
+ import Pleroma.Factory
+
+ test "nodeinfo shows staff accounts", %{conn: conn} do
+ user = insert(:user, %{local: true, info: %{"is_moderator" => true}})
+
+ conn =
+ conn
+ |> get("/nodeinfo/2.0.json")
+
+ assert result = json_response(conn, 200)
+
+ assert user.ap_id in result["metadata"]["staffAccounts"]
+ end
+end