04e629fc1b2c4b9f6fe79d45aa6c3f6d98c111ea
[akkoma] / lib / pleroma / web / admin_api / controllers / oauth_app_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 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.Plugs.OAuthScopesPlug
11 alias Pleroma.Web.OAuth.App
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: ["write"], admin: true}
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 =
46 if params[:name] do
47 Map.put(params, :client_name, params[:name])
48 else
49 params
50 end
51
52 case App.create(params) do
53 {:ok, app} ->
54 render(conn, "show.json", app: app, admin: true)
55
56 {:error, changeset} ->
57 json(conn, App.errors(changeset))
58 end
59 end
60
61 def update(%{body_params: params} = conn, %{id: id}) do
62 params =
63 if params[:name] do
64 Map.put(params, :client_name, params.name)
65 else
66 params
67 end
68
69 with {:ok, app} <- App.update(id, params) do
70 render(conn, "show.json", app: app, admin: true)
71 else
72 {:error, changeset} ->
73 json(conn, App.errors(changeset))
74
75 nil ->
76 json_response(conn, :bad_request, "")
77 end
78 end
79
80 def delete(conn, params) do
81 with {:ok, _app} <- App.destroy(params.id) do
82 json_response(conn, :no_content, "")
83 else
84 _ -> json_response(conn, :bad_request, "")
85 end
86 end
87 end