frontend_operation.ex (2521B)
- # Pleroma: A lightweight social networking server
- # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
- # SPDX-License-Identifier: AGPL-3.0-only
- defmodule Pleroma.Web.ApiSpec.Admin.FrontendOperation do
- alias OpenApiSpex.Operation
- alias OpenApiSpex.Schema
- alias Pleroma.Web.ApiSpec.Schemas.ApiError
- import Pleroma.Web.ApiSpec.Helpers
- def open_api_operation(action) do
- operation = String.to_existing_atom("#{action}_operation")
- apply(__MODULE__, operation, [])
- end
- def index_operation do
- %Operation{
- tags: ["Frontend management"],
- summary: "Retrieve a list of available frontends",
- operationId: "AdminAPI.FrontendController.index",
- security: [%{"oAuth" => ["admin:read"]}],
- responses: %{
- 200 => Operation.response("Response", "application/json", list_of_frontends()),
- 403 => Operation.response("Forbidden", "application/json", ApiError)
- }
- }
- end
- def install_operation do
- %Operation{
- tags: ["Frontend management"],
- summary: "Install a frontend",
- operationId: "AdminAPI.FrontendController.install",
- security: [%{"oAuth" => ["admin:read"]}],
- requestBody: request_body("Parameters", install_request(), required: true),
- responses: %{
- 200 => Operation.response("Response", "application/json", list_of_frontends()),
- 403 => Operation.response("Forbidden", "application/json", ApiError),
- 400 => Operation.response("Error", "application/json", ApiError)
- }
- }
- end
- defp list_of_frontends do
- %Schema{
- type: :array,
- items: %Schema{
- type: :object,
- properties: %{
- name: %Schema{type: :string},
- git: %Schema{type: :string, format: :uri, nullable: true},
- build_url: %Schema{type: :string, format: :uri, nullable: true},
- ref: %Schema{type: :string, nullable: true},
- installed: %Schema{type: :boolean},
- installed_refs: %Schema{type: :array, items: %Schema{type: :string}}
- }
- }
- }
- end
- defp install_request do
- %Schema{
- title: "FrontendInstallRequest",
- type: :object,
- required: [:name],
- properties: %{
- name: %Schema{
- type: :string
- },
- ref: %Schema{
- type: :string
- },
- file: %Schema{
- type: :string
- },
- build_url: %Schema{
- type: :string
- },
- build_dir: %Schema{
- type: :string
- }
- }
- }
- end
- end