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.OAuthAppController do
6 use Pleroma.Web, :controller
8 import Pleroma.Web.ControllerHelper, only: [json_response: 3]
10 alias Pleroma.Plugs.OAuthScopesPlug
11 alias Pleroma.Web.OAuth.App
15 plug(Pleroma.Web.ApiSpec.CastAndValidate)
16 plug(:put_view, Pleroma.Web.MastodonAPI.AppView)
20 %{scopes: ["write"], admin: true}
21 when action in [:create, :index, :update, :delete]
24 action_fallback(Pleroma.Web.AdminAPI.FallbackController)
26 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.OAuthAppOperation
28 def index(conn, params) do
31 |> Map.take([:client_id, :page, :page_size, :trusted])
32 |> Map.put(:client_name, params[:name])
34 with {:ok, apps, count} <- App.search(search_params) do
35 render(conn, "index.json",
38 page_size: params.page_size,
44 def create(%{body_params: params} = conn, _) do
47 Map.put(params, :client_name, params[:name])
52 case App.create(params) do
54 render(conn, "show.json", app: app, admin: true)
56 {:error, changeset} ->
57 json(conn, App.errors(changeset))
61 def update(%{body_params: params} = conn, %{id: id}) do
64 Map.put(params, :client_name, params.name)
69 with {:ok, app} <- App.update(id, params) do
70 render(conn, "show.json", app: app, admin: true)
72 {:error, changeset} ->
73 json(conn, App.errors(changeset))
76 json_response(conn, :bad_request, "")
80 def delete(conn, params) do
81 with {:ok, _app} <- App.destroy(params.id) do
82 json_response(conn, :no_content, "")
84 _ -> json_response(conn, :bad_request, "")