| defmodule PlausibleWeb.Plugins.API.Spec do | |
| @moduledoc """ | |
| OpenAPI specification for the Plugins API | |
| """ | |
| alias OpenApiSpex.{Components, Info, OpenApi, Paths, Server} | |
| alias PlausibleWeb.Router | |
| @behaviour OpenApi | |
| @impl OpenApi | |
| def spec do | |
| %OpenApi{ | |
| servers: [ | |
| %Server{ | |
| description: "This server", | |
| url: PlausibleWeb.Endpoint.url(), | |
| variables: %{} | |
| } | |
| ], | |
| info: %Info{ | |
| title: "Plausible Plugins API", | |
| version: "1.0-rc" | |
| }, | |
| # Populate the paths from a phoenix router | |
| paths: Paths.from_router(Router), | |
| components: %Components{ | |
| securitySchemes: %{ | |
| "basic_auth" => %OpenApiSpex.SecurityScheme{ | |
| type: "http", | |
| scheme: "basic", | |
| description: """ | |
| HTTP basic access authentication using your Site Domain as the | |
| username and the Plugin Token contents as the password. | |
| Note that Site Domain is optional, a password alone suffices. | |
| For more information see | |
| https://en.wikipedia.org/wiki/Basic_access_authentication | |
| """ | |
| } | |
| } | |
| }, | |
| security: [%{"basic_auth" => []}] | |
| } | |
| # Discover request/response schemas from path specs | |
| |> OpenApiSpex.resolve_schema_modules() | |
| end | |
| end | |