Remove deps from Streaming/Persisting behaviors
[akkoma] / lib / pleroma / web / admin_api / controllers / o_auth_app_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.AdminAPI.OAuthAppController do
6 use Pleroma.Web, :controller
7
8 import Pleroma.Web.ControllerHelper, only: [json_response: 3]
9
10 alias Pleroma.Web.OAuth.App
11 alias Pleroma.Web.Plugs.OAuthScopesPlug
12
13 require Logger
14
15 plug(Pleroma.Web.ApiSpec.CastAndValidate)
16 plug(:put_view, Pleroma.Web.MastodonAPI.AppView)
17
18 plug(
19 OAuthScopesPlug,
20 %{scopes: ["admin:write"]}
21 when action in [:create, :index, :update, :delete]
22 )
23
24 action_fallback(Pleroma.Web.AdminAPI.FallbackController)
25
26 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.OAuthAppOperation
27
28 def index(conn, params) do
29 search_params =
30 params
31 |> Map.take([:client_id, :page, :page_size, :trusted])
32 |> Map.put(:client_name, params[:name])
33
34 with {:ok, apps, count} <- App.search(search_params) do
35 render(conn, "index.json",
36 apps: apps,
37 count: count,
38 page_size: params.page_size,
39 admin: true
40 )
41 end
42 end
43
44 def create(%{body_params: params} = conn, _) do
45 params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
46
47 case App.create(params) do
48 {:ok, app} ->
49 render(conn, "show.json", app: app, admin: true)
50
51 {:error, changeset} ->
52 json(conn, App.errors(changeset))
53 end
54 end
55
56 def update(%{body_params: params} = conn, %{id: id}) do
57 params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
58
59 with {:ok, app} <- App.update(id, params) do
60 render(conn, "show.json", app: app, admin: true)
61 else
62 {:error, changeset} ->
63 json(conn, App.errors(changeset))
64
65 nil ->
66 json_response(conn, :bad_request, "")
67 end
68 end
69
70 def delete(conn, params) do
71 with {:ok, _app} <- App.destroy(params.id) do
72 json_response(conn, :no_content, "")
73 else
74 _ -> json_response(conn, :bad_request, "")
75 end
76 end
77 end