Merge branch 'benchmark' into 'develop'
[akkoma] / lib / pleroma / web / admin_api / controllers / instance_controller.ex
index ad6ea89efb2b2d93b15eb2fcf955948e987add76..00857983fbc73d14a77cec08d32a8ad6c2b4cb0e 100644 (file)
@@ -7,6 +7,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceController do
 
   import Pleroma.Web.ControllerHelper, only: [fetch_integer_param: 3]
 
+  alias Pleroma.Instances.Instance
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.AdminAPI
   alias Pleroma.Web.Plugs.OAuthScopesPlug
@@ -18,12 +19,18 @@ defmodule Pleroma.Web.AdminAPI.InstanceController do
   plug(
     OAuthScopesPlug,
     %{scopes: ["admin:read:statuses"]}
-    when action in [:list_instance_statuses]
+    when action in [:list_statuses]
+  )
+
+  plug(
+    OAuthScopesPlug,
+    %{scopes: ["admin:write:accounts", "admin:write:statuses"]}
+    when action in [:delete]
   )
 
   action_fallback(AdminAPI.FallbackController)
 
-  def list_instance_statuses(conn, %{"instance" => instance} = params) do
+  def list_statuses(conn, %{"instance" => instance} = params) do
     with_reblogs = params["with_reblogs"] == "true" || params["with_reblogs"] == true
     {page, page_size} = page_params(params)
 
@@ -41,6 +48,12 @@ defmodule Pleroma.Web.AdminAPI.InstanceController do
     |> render("index.json", %{total: result[:total], activities: result[:items], as: :activity})
   end
 
+  def delete(conn, %{"instance" => instance}) do
+    with {:ok, _job} <- Instance.delete_users_and_activities(instance) do
+      json(conn, instance)
+    end
+  end
+
   defp page_params(params) do
     {
       fetch_integer_param(params, "page", 1),