logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 8143251f06b1a781ee20924c89be484e514f0bec
parent: 1c9e539b47ff594d75c9548a04e64cb0c61cff8c
Author: kaniini <nenolod@gmail.com>
Date:   Mon,  3 Sep 2018 15:00:56 +0000

Merge branch 'feature/staff-discovery-api' into 'develop'

staff discovery api

See merge request pleroma/pleroma!326

Diffstat:

Mlib/pleroma/user.ex8++++++++
Mlib/pleroma/web/nodeinfo/nodeinfo_controller.ex7+++++++
Apriv/repo/migrations/20180903114437_users_add_is_moderator_index.exs7+++++++
Atest/web/node_info_test.exs17+++++++++++++++++
4 files changed, 39 insertions(+), 0 deletions(-)

diff --git 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 @@ -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 @@ -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 @@ -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