diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex | 79 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex | 5 | 
2 files changed, 83 insertions, 1 deletions
| diff --git a/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex new file mode 100644 index 000000000..8c5f37ea6 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/pleroma_mascot_operation.ex @@ -0,0 +1,79 @@ +# 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.PleromaMascotOperation 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 show_operation do +    %Operation{ +      tags: ["Mascot"], +      summary: "Gets user mascot image", +      security: [%{"oAuth" => ["read:accounts"]}], +      operationId: "PleromaAPI.MascotController.show", +      responses: %{ +        200 => Operation.response("Mascot", "application/json", mascot()) +      } +    } +  end + +  def update_operation do +    %Operation{ +      tags: ["Mascot"], +      summary: "Set/clear user avatar image", +      description: +        "Behaves exactly the same as `POST /api/v1/upload`. Can only accept images - any attempt to upload non-image files will be met with `HTTP 415 Unsupported Media Type`.", +      operationId: "PleromaAPI.MascotController.update", +      requestBody: +        request_body( +          "Parameters", +          %Schema{ +            type: :object, +            properties: %{ +              file: %Schema{type: :string, format: :binary} +            } +          }, +          required: true +        ), +      security: [%{"oAuth" => ["write:accounts"]}], +      responses: %{ +        200 => Operation.response("Mascot", "application/json", mascot()), +        415 => Operation.response("Unsupported Media Type", "application/json", ApiError) +      } +    } +  end + +  defp mascot do +    %Schema{ +      type: :object, +      properties: %{ +        id: %Schema{type: :string}, +        url: %Schema{type: :string, format: :uri}, +        type: %Schema{type: :string}, +        pleroma: %Schema{ +          type: :object, +          properties: %{ +            mime_type: %Schema{type: :string} +          } +        } +      }, +      example: %{ +        "id" => "abcdefg", +        "url" => "https://pleroma.example.org/media/abcdefg.png", +        "type" => "image", +        "pleroma" => %{ +          "mime_type" => "image/png" +        } +      } +    } +  end +end diff --git a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex index d4e0d8b7c..df6c50ca5 100644 --- a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex @@ -9,16 +9,19 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do    alias Pleroma.User    alias Pleroma.Web.ActivityPub.ActivityPub +  plug(Pleroma.Web.ApiSpec.CastAndValidate)    plug(OAuthScopesPlug, %{scopes: ["read:accounts"]} when action == :show)    plug(OAuthScopesPlug, %{scopes: ["write:accounts"]} when action != :show) +  defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaMascotOperation +    @doc "GET /api/v1/pleroma/mascot"    def show(%{assigns: %{user: user}} = conn, _params) do      json(conn, User.get_mascot(user))    end    @doc "PUT /api/v1/pleroma/mascot" -  def update(%{assigns: %{user: user}} = conn, %{"file" => file}) do +  def update(%{assigns: %{user: user}, body_params: %{file: file}} = conn, _) do      with {:ok, object} <- ActivityPub.upload(file, actor: User.ap_id(user)),           # Reject if not an image           %{type: "image"} = attachment <- render_attachment(object) do | 
