Fix API spec, add app schema
authorSean King <seanking2919@protonmail.com>
Thu, 26 Aug 2021 17:55:43 +0000 (11:55 -0600)
committerSean King <seanking2919@protonmail.com>
Thu, 26 Aug 2021 17:55:43 +0000 (11:55 -0600)
lib/pleroma/web/api_spec/operations/app_operation.ex
lib/pleroma/web/api_spec/schemas/app.ex [new file with mode: 0644]

index c2221ac98018b797a30869bf040ca0bc3abed832..71d7b9ee81df418d3809689704a17143fc6a3a36 100644 (file)
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do
   alias OpenApiSpex.Operation
   alias OpenApiSpex.Schema
   alias Pleroma.Web.ApiSpec.Helpers
+  alias Pleroma.Web.ApiSpec.Schemas.App
 
   @spec open_api_operation(atom) :: Operation.t()
   def open_api_operation(action) do
@@ -21,7 +22,7 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do
       description: "List the OAuth applications for the current user",
       operationId: "AppController.index",
       responses: %{
-        200 => Operation.response("App", "application/json", index_response())
+        200 => Operation.response("Array of App", "application/json", array_of_apps())
       }
     }
   end
@@ -159,33 +160,7 @@ defmodule Pleroma.Web.ApiSpec.AppOperation do
     }
   end
 
-  defp index_response do
-    %Schema{
-      title: "AppIndexResponse",
-      description: "Response schema for GET /api/v1/apps",
-      type: :object,
-      properties: [
-        %{
-          id: %Schema{type: :string},
-          name: %Schema{type: :string},
-          client_id: %Schema{type: :string},
-          client_secret: %Schema{type: :string},
-          redirect_uri: %Schema{type: :string},
-          vapid_key: %Schema{type: :string},
-          website: %Schema{type: :string, nullable: true}
-        }
-      ],
-      example: [
-        %{
-          "id" => "123",
-          "name" => "My App",
-          "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM",
-          "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw",
-          "vapid_key" =>
-            "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=",
-          "website" => "https://myapp.com/"
-        }
-      ]
-    }
+  defp array_of_apps do
+    %Schema{type: :array, items: App, example: [App.schema().example]}
   end
 end
diff --git a/lib/pleroma/web/api_spec/schemas/app.ex b/lib/pleroma/web/api_spec/schemas/app.ex
new file mode 100644 (file)
index 0000000..c3d1af3
--- /dev/null
@@ -0,0 +1,33 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ApiSpec.Schemas.App do
+  alias OpenApiSpex.Schema
+
+  require OpenApiSpex
+
+  OpenApiSpex.schema(%{
+    title: "App",
+    description: "Response schema for an app",
+    type: :object,
+    properties: %{
+      id: %Schema{type: :string},
+      name: %Schema{type: :string},
+      client_id: %Schema{type: :string},
+      client_secret: %Schema{type: :string},
+      redirect_uri: %Schema{type: :string},
+      vapid_key: %Schema{type: :string},
+      website: %Schema{type: :string, nullable: true}
+    },
+    example: %{
+      "id" => "123",
+      "name" => "My App",
+      "client_id" => "TWhM-tNSuncnqN7DBJmoyeLnk6K3iJJ71KKXxgL1hPM",
+      "client_secret" => "ZEaFUFmF0umgBX1qKJDjaU99Q31lDkOU8NutzTOoliw",
+      "vapid_key" =>
+        "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M=",
+      "website" => "https://myapp.com/"
+    }
+  })
+end