1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.AdminAPI.StatusController do
6 use Pleroma.Web, :controller
9 alias Pleroma.ModerationLog
10 alias Pleroma.Web.ActivityPub.ActivityPub
11 alias Pleroma.Web.CommonAPI
12 alias Pleroma.Web.MastodonAPI
13 alias Pleroma.Web.Plugs.OAuthScopesPlug
17 plug(Pleroma.Web.ApiSpec.CastAndValidate)
18 plug(OAuthScopesPlug, %{scopes: ["read:statuses"], admin: true} when action in [:index, :show])
22 %{scopes: ["write:statuses"], admin: true} when action in [:update, :delete]
25 action_fallback(Pleroma.Web.AdminAPI.FallbackController)
27 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.StatusOperation
29 def index(%{assigns: %{user: _admin}} = conn, params) do
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
39 render(conn, "index.json", activities: activities, as: :activity)
42 def show(conn, %{id: id}) do
43 with %Activity{} = activity <- Activity.get_by_id(id) do
44 render(conn, "show.json", %{activity: activity})
46 nil -> {:error, :not_found}
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",
56 sensitive: params[:sensitive],
57 visibility: params[:visibility]
61 |> put_view(MastodonAPI.StatusView)
62 |> render("show.json", %{activity: activity})
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",