Merge remote-tracking branch 'pleroma/develop' into cycles-constants
[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
17 plug(
18 OAuthScopesPlug,
19 %{scopes: ["admin:write"]}
20 when action in [:create, :index, :update, :delete]
21 )
22
23 action_fallback(Pleroma.Web.AdminAPI.FallbackController)
24
25 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.OAuthAppOperation
26
27 def index(conn, params) do
28 search_params =
29 params
30 |> Map.take([:client_id, :page, :page_size, :trusted])
31 |> Map.put(:client_name, params[:name])
32
33 with {:ok, apps, count} <- App.search(search_params) do
34 render(conn, "index.json",
35 apps: apps,
36 count: count,
37 page_size: params.page_size,
38 admin: true
39 )
40 end
41 end
42
43 def create(%{body_params: params} = conn, _) do
44 params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
45
46 case App.create(params) do
47 {:ok, app} ->
48 render(conn, "show.json", app: app, admin: true)
49
50 {:error, changeset} ->
51 json(conn, App.errors(changeset))
52 end
53 end
54
55 def update(%{body_params: params} = conn, %{id: id}) do
56 params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
57
58 with {:ok, app} <- App.update(id, params) do
59 render(conn, "show.json", app: app, admin: true)
60 else
61 {:error, changeset} ->
62 json(conn, App.errors(changeset))
63
64 nil ->
65 json_response(conn, :bad_request, "")
66 end
67 end
68
69 def delete(conn, params) do
70 with {:ok, _app} <- App.destroy(params.id) do
71 json_response(conn, :no_content, "")
72 else
73 _ -> json_response(conn, :bad_request, "")
74 end
75 end
76 end