1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 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.Plugs.OAuthScopesPlug
11 alias Pleroma.Web.ActivityPub.ActivityPub
12 alias Pleroma.Web.CommonAPI
13 alias Pleroma.Web.MastodonAPI
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
45 |> put_view(Pleroma.Web.AdminAPI.StatusView)
46 |> render("show.json", %{activity: activity})
48 nil -> {:error, :not_found}
52 def update(%{assigns: %{user: admin}, body_params: params} = conn, %{id: id}) do
53 with {:ok, activity} <- CommonAPI.update_activity_scope(id, params) do
54 ModerationLog.insert_log(%{
55 action: "status_update",
58 sensitive: params[:sensitive],
59 visibility: params[:visibility]
63 |> put_view(MastodonAPI.StatusView)
64 |> render("show.json", %{activity: activity})
68 def delete(%{assigns: %{user: user}} = conn, %{id: id}) do
69 with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do
70 ModerationLog.insert_log(%{
71 action: "status_delete",