Change user.discoverable field to user.is_discoverable
[akkoma] / lib / pleroma / web / admin_api / controllers / status_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.AdminAPI.StatusController do
6 use Pleroma.Web, :controller
7
8 alias Pleroma.Activity
9 alias Pleroma.ModerationLog
10 alias Pleroma.Plugs.OAuthScopesPlug
11 alias Pleroma.Web.ActivityPub.ActivityPub
12 alias Pleroma.Web.CommonAPI
13 alias Pleroma.Web.MastodonAPI
14
15 require Logger
16
17 plug(Pleroma.Web.ApiSpec.CastAndValidate)
18 plug(OAuthScopesPlug, %{scopes: ["read:statuses"], admin: true} when action in [:index, :show])
19
20 plug(
21 OAuthScopesPlug,
22 %{scopes: ["write:statuses"], admin: true} when action in [:update, :delete]
23 )
24
25 action_fallback(Pleroma.Web.AdminAPI.FallbackController)
26
27 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.StatusOperation
28
29 def index(%{assigns: %{user: _admin}} = conn, params) do
30 activities =
31 ActivityPub.fetch_statuses(nil, %{
32 godmode: params.godmode,
33 local_only: params.local_only,
34 limit: params.page_size,
35 offset: (params.page - 1) * params.page_size,
36 exclude_reblogs: not params.with_reblogs
37 })
38
39 render(conn, "index.json", activities: activities, as: :activity)
40 end
41
42 def show(conn, %{id: id}) do
43 with %Activity{} = activity <- Activity.get_by_id(id) do
44 render(conn, "show.json", %{activity: activity})
45 else
46 nil -> {:error, :not_found}
47 end
48 end
49
50 def update(%{assigns: %{user: admin}, body_params: params} = conn, %{id: id}) do
51 with {:ok, activity} <- CommonAPI.update_activity_scope(id, params) do
52 ModerationLog.insert_log(%{
53 action: "status_update",
54 actor: admin,
55 subject: activity,
56 sensitive: params[:sensitive],
57 visibility: params[:visibility]
58 })
59
60 conn
61 |> put_view(MastodonAPI.StatusView)
62 |> render("show.json", %{activity: activity})
63 end
64 end
65
66 def delete(%{assigns: %{user: user}} = conn, %{id: id}) do
67 with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do
68 ModerationLog.insert_log(%{
69 action: "status_delete",
70 actor: user,
71 subject_id: id
72 })
73
74 json(conn, %{})
75 end
76 end
77 end