Browse Source

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

staff discovery api

See merge request pleroma/pleroma!326
tags/v0.9.9
kaniini 5 years ago
parent
commit
8143251f06
4 changed files with 39 additions and 0 deletions
  1. +8
    -0
      lib/pleroma/user.ex
  2. +7
    -0
      lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
  3. +7
    -0
      priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs
  4. +17
    -0
      test/web/node_info_test.exs

+ 8
- 0
lib/pleroma/user.ex View File

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


+ 7
- 0
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex View File

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


+ 7
- 0
priv/repo/migrations/20180903114437_users_add_is_moderator_index.exs 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

+ 17
- 0
test/web/node_info_test.exs 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

Loading…
Cancel
Save