logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma

oauth_app_controller.ex (2074B)


  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. defmodule Pleroma.Web.AdminAPI.OAuthAppController do
  5. use Pleroma.Web, :controller
  6. import Pleroma.Web.ControllerHelper, only: [json_response: 3]
  7. alias Pleroma.Plugs.OAuthScopesPlug
  8. alias Pleroma.Web.OAuth.App
  9. require Logger
  10. plug(Pleroma.Web.ApiSpec.CastAndValidate)
  11. plug(:put_view, Pleroma.Web.MastodonAPI.AppView)
  12. plug(
  13. OAuthScopesPlug,
  14. %{scopes: ["write"], admin: true}
  15. when action in [:create, :index, :update, :delete]
  16. )
  17. action_fallback(Pleroma.Web.AdminAPI.FallbackController)
  18. defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.OAuthAppOperation
  19. def index(conn, params) do
  20. search_params =
  21. params
  22. |> Map.take([:client_id, :page, :page_size, :trusted])
  23. |> Map.put(:client_name, params[:name])
  24. with {:ok, apps, count} <- App.search(search_params) do
  25. render(conn, "index.json",
  26. apps: apps,
  27. count: count,
  28. page_size: params.page_size,
  29. admin: true
  30. )
  31. end
  32. end
  33. def create(%{body_params: params} = conn, _) do
  34. params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
  35. case App.create(params) do
  36. {:ok, app} ->
  37. render(conn, "show.json", app: app, admin: true)
  38. {:error, changeset} ->
  39. json(conn, App.errors(changeset))
  40. end
  41. end
  42. def update(%{body_params: params} = conn, %{id: id}) do
  43. params = Pleroma.Maps.put_if_present(params, :client_name, params[:name])
  44. with {:ok, app} <- App.update(id, params) do
  45. render(conn, "show.json", app: app, admin: true)
  46. else
  47. {:error, changeset} ->
  48. json(conn, App.errors(changeset))
  49. nil ->
  50. json_response(conn, :bad_request, "")
  51. end
  52. end
  53. def delete(conn, params) do
  54. with {:ok, _app} <- App.destroy(params.id) do
  55. json_response(conn, :no_content, "")
  56. else
  57. _ -> json_response(conn, :bad_request, "")
  58. end
  59. end
  60. end