diff options
| author | Alex Gleason <alex@alexgleason.me> | 2020-09-22 13:37:02 -0500 | 
|---|---|---|
| committer | Alex Gleason <alex@alexgleason.me> | 2020-09-22 13:37:02 -0500 | 
| commit | 3104367931bdd259752fb9e2b7a19ba42a72e614 (patch) | |
| tree | 92d59fed02dded222d51e300269f8a742e4c9c05 /lib/pleroma/web/api_spec/operations/admin | |
| parent | bf181ca96850f3e5baaf8f3dcd6e11b926fcdeeb (diff) | |
| parent | 02f12ec6253093d8bedaf84d78d0f7e533745e1b (diff) | |
| download | pleroma-3104367931bdd259752fb9e2b7a19ba42a72e614.tar.gz pleroma-3104367931bdd259752fb9e2b7a19ba42a72e614.zip | |
Merge remote-tracking branch 'upstream/develop' into email-fix-develop
Diffstat (limited to 'lib/pleroma/web/api_spec/operations/admin')
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/admin/chat_operation.ex | 96 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex | 115 | 
2 files changed, 211 insertions, 0 deletions
| diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex new file mode 100644 index 000000000..d3e5dfc1c --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex @@ -0,0 +1,96 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do +  alias OpenApiSpex.Operation +  alias Pleroma.Web.ApiSpec.Schemas.Chat +  alias Pleroma.Web.ApiSpec.Schemas.ChatMessage + +  import Pleroma.Web.ApiSpec.Helpers + +  def open_api_operation(action) do +    operation = String.to_existing_atom("#{action}_operation") +    apply(__MODULE__, operation, []) +  end + +  def delete_message_operation do +    %Operation{ +      tags: ["admin", "chat"], +      summary: "Delete an individual chat message", +      operationId: "AdminAPI.ChatController.delete_message", +      parameters: [ +        Operation.parameter(:id, :path, :string, "The ID of the Chat"), +        Operation.parameter(:message_id, :path, :string, "The ID of the message") +      ], +      responses: %{ +        200 => +          Operation.response( +            "The deleted ChatMessage", +            "application/json", +            ChatMessage +          ) +      }, +      security: [ +        %{ +          "oAuth" => ["write:chats"] +        } +      ] +    } +  end + +  def messages_operation do +    %Operation{ +      tags: ["admin", "chat"], +      summary: "Get the most recent messages of the chat", +      operationId: "AdminAPI.ChatController.messages", +      parameters: +        [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++ +          pagination_params(), +      responses: %{ +        200 => +          Operation.response( +            "The messages in the chat", +            "application/json", +            Pleroma.Web.ApiSpec.ChatOperation.chat_messages_response() +          ) +      }, +      security: [ +        %{ +          "oAuth" => ["read:chats"] +        } +      ] +    } +  end + +  def show_operation do +    %Operation{ +      tags: ["chat"], +      summary: "Create a chat", +      operationId: "AdminAPI.ChatController.show", +      parameters: [ +        Operation.parameter( +          :id, +          :path, +          :string, +          "The id of the chat", +          required: true, +          example: "1234" +        ) +      ], +      responses: %{ +        200 => +          Operation.response( +            "The existing chat", +            "application/json", +            Chat +          ) +      }, +      security: [ +        %{ +          "oAuth" => ["read"] +        } +      ] +    } +  end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex new file mode 100644 index 000000000..a120ff4e8 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex @@ -0,0 +1,115 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do +  alias OpenApiSpex.Operation +  alias OpenApiSpex.Schema +  alias Pleroma.Web.ApiSpec.Helpers +  alias Pleroma.Web.ApiSpec.Schemas.ApiError + +  def open_api_operation(action) do +    operation = String.to_existing_atom("#{action}_operation") +    apply(__MODULE__, operation, []) +  end + +  def show_operation do +    %Operation{ +      tags: ["Admin", "InstanceDocument"], +      summary: "Get the instance document", +      operationId: "AdminAPI.InstanceDocumentController.show", +      security: [%{"oAuth" => ["read"]}], +      parameters: [ +        Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", +          required: true +        ) +        | Helpers.admin_api_params() +      ], +      responses: %{ +        200 => document_content(), +        400 => Operation.response("Bad Request", "application/json", ApiError), +        403 => Operation.response("Forbidden", "application/json", ApiError), +        404 => Operation.response("Not Found", "application/json", ApiError) +      } +    } +  end + +  def update_operation do +    %Operation{ +      tags: ["Admin", "InstanceDocument"], +      summary: "Update the instance document", +      operationId: "AdminAPI.InstanceDocumentController.update", +      security: [%{"oAuth" => ["write"]}], +      requestBody: Helpers.request_body("Parameters", update_request()), +      parameters: [ +        Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", +          required: true +        ) +        | Helpers.admin_api_params() +      ], +      responses: %{ +        200 => Operation.response("InstanceDocument", "application/json", instance_document()), +        400 => Operation.response("Bad Request", "application/json", ApiError), +        403 => Operation.response("Forbidden", "application/json", ApiError), +        404 => Operation.response("Not Found", "application/json", ApiError) +      } +    } +  end + +  defp update_request do +    %Schema{ +      title: "UpdateRequest", +      description: "POST body for uploading the file", +      type: :object, +      required: [:file], +      properties: %{ +        file: %Schema{ +          type: :string, +          format: :binary, +          description: "The file to be uploaded, using multipart form data." +        } +      } +    } +  end + +  def delete_operation do +    %Operation{ +      tags: ["Admin", "InstanceDocument"], +      summary: "Get the instance document", +      operationId: "AdminAPI.InstanceDocumentController.delete", +      security: [%{"oAuth" => ["write"]}], +      parameters: [ +        Operation.parameter(:name, :path, %Schema{type: :string}, "The document name", +          required: true +        ) +        | Helpers.admin_api_params() +      ], +      responses: %{ +        200 => Operation.response("InstanceDocument", "application/json", instance_document()), +        400 => Operation.response("Bad Request", "application/json", ApiError), +        403 => Operation.response("Forbidden", "application/json", ApiError), +        404 => Operation.response("Not Found", "application/json", ApiError) +      } +    } +  end + +  defp instance_document do +    %Schema{ +      title: "InstanceDocument", +      type: :object, +      properties: %{ +        url: %Schema{type: :string} +      }, +      example: %{ +        "url" => "https://example.com/static/terms-of-service.html" +      } +    } +  end + +  defp document_content do +    Operation.response("InstanceDocumentContent", "text/html", %Schema{ +      type: :string, +      example: "<h1>Instance panel</h1>" +    }) +  end +end | 
