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

staff discovery api

See merge request pleroma/pleroma!326
This commit is contained in:
kaniini 2018-09-03 15:00:56 +00:00
commit 8143251f06
4 changed files with 39 additions and 0 deletions

View file

@ -609,6 +609,14 @@ def local_user_query() do
) )
end 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 def deactivate(%User{} = user) do
new_info = Map.put(user.info, "deactivated", true) new_info = Map.put(user.info, "deactivated", true)
cs = User.info_changeset(user, %{info: new_info}) cs = User.info_changeset(user, %{info: new_info})

View file

@ -3,6 +3,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
alias Pleroma.Stats alias Pleroma.Stats
alias Pleroma.Web alias Pleroma.Web
alias Pleroma.{User, Repo}
def schemas(conn, _params) do def schemas(conn, _params) do
response = %{ response = %{
@ -26,6 +27,11 @@ def nodeinfo(conn, %{"version" => "2.0"}) do
gopher = Application.get_env(:pleroma, :gopher) gopher = Application.get_env(:pleroma, :gopher)
stats = Stats.get_stats() stats = Stats.get_stats()
staff_accounts =
User.moderator_user_query()
|> Repo.all()
|> Enum.map(fn u -> u.ap_id end)
response = %{ response = %{
version: "2.0", version: "2.0",
software: %{ software: %{
@ -55,6 +61,7 @@ def nodeinfo(conn, %{"version" => "2.0"}) do
timeout: Keyword.get(suggestions, :timeout, 5000), timeout: Keyword.get(suggestions, :timeout, 5000),
web: Keyword.get(suggestions, :web, "") web: Keyword.get(suggestions, :web, "")
}, },
staffAccounts: staff_accounts,
chat: Keyword.get(chat, :enabled), chat: Keyword.get(chat, :enabled),
gopher: Keyword.get(gopher, :enabled) gopher: Keyword.get(gopher, :enabled)
} }

View file

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

View file

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