diff options
| author | Maksim Pechnikov <parallel588@gmail.com> | 2020-09-18 07:08:37 +0300 | 
|---|---|---|
| committer | Maksim Pechnikov <parallel588@gmail.com> | 2020-09-18 07:08:37 +0300 | 
| commit | 2ec0dcf00194544449a5d7768ab10777b294895b (patch) | |
| tree | 1c2f097403f48e6f43894ac792ce77dc5992b32d /lib/pleroma/web/api_spec/operations/admin | |
| parent | 5a8ea0a5b07c22d567a60af36345483fe880b638 (diff) | |
| parent | 49584a9928f02b461a0356332440084473ea6b69 (diff) | |
| download | pleroma-2ec0dcf00194544449a5d7768ab10777b294895b.tar.gz pleroma-2ec0dcf00194544449a5d7768ab10777b294895b.zip  | |
Merge branch 'develop' into issue/2099
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  | 
