Add frontend preference route
This commit is contained in:
parent
004f9fa69b
commit
bb44501a9e
3 changed files with 111 additions and 0 deletions
|
|
@ -0,0 +1,62 @@
|
||||||
|
defmodule Pleroma.Web.ApiSpec.PleromaFrontendSettingsOperation do
|
||||||
|
alias OpenApiSpex.Operation
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
import Pleroma.Web.ApiSpec.Helpers
|
||||||
|
|
||||||
|
@spec open_api_operation(atom) :: Operation.t()
|
||||||
|
def open_api_operation(action) do
|
||||||
|
operation = String.to_existing_atom("#{action}_operation")
|
||||||
|
apply(__MODULE__, operation, [])
|
||||||
|
end
|
||||||
|
|
||||||
|
def available_frontends_operation() do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Frontends"],
|
||||||
|
summary: "Frontend Settings Profiles",
|
||||||
|
description: "List frontend setting profiles",
|
||||||
|
operationId: "PleromaAPI.FrontendSettingsController.available_frontends",
|
||||||
|
responses: %{
|
||||||
|
200 =>
|
||||||
|
Operation.response("Frontends", "application/json", %Schema{
|
||||||
|
type: :array,
|
||||||
|
items: %Schema{
|
||||||
|
type: :string
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_preferred_frontend_operation() do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Frontends"],
|
||||||
|
summary: "Frontend Settings Profiles",
|
||||||
|
description: "List frontend setting profiles",
|
||||||
|
operationId: "PleromaAPI.FrontendSettingsController.available_frontends",
|
||||||
|
requestBody:
|
||||||
|
request_body(
|
||||||
|
"Frontend",
|
||||||
|
%Schema{
|
||||||
|
type: :object,
|
||||||
|
required: [:frontend_name],
|
||||||
|
properties: %{
|
||||||
|
frontend_name: %Schema{
|
||||||
|
type: :string,
|
||||||
|
description: "Frontend name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
required: true
|
||||||
|
),
|
||||||
|
responses: %{
|
||||||
|
200 =>
|
||||||
|
Operation.response("Frontends", "application/json", %Schema{
|
||||||
|
type: :array,
|
||||||
|
items: %Schema{
|
||||||
|
type: :string
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
defmodule Pleroma.Web.PleromaAPI.FrontendSettingsController do
|
||||||
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
|
alias Pleroma.Web.Plugs.OAuthScopesPlug
|
||||||
|
|
||||||
|
plug(
|
||||||
|
OAuthScopesPlug,
|
||||||
|
%{fallback: :proceed_unauthenticated, scopes: []}
|
||||||
|
when action in [
|
||||||
|
:available_frontends,
|
||||||
|
:update_preferred_frontend
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
plug(Pleroma.Web.ApiSpec.CastAndValidate)
|
||||||
|
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaFrontendSettingsOperation
|
||||||
|
|
||||||
|
action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
|
||||||
|
|
||||||
|
@doc "GET /api/v1/pleroma/preferred_frontend/available"
|
||||||
|
def available_frontends(conn, _params) do
|
||||||
|
available = Pleroma.Config.get([:frontends, :pickable])
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> json(available)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc "PUT /api/v1/pleroma/preferred_frontend"
|
||||||
|
def update_preferred_frontend(
|
||||||
|
%{body_params: %{frontend_name: preferred_frontend}} = conn,
|
||||||
|
_params
|
||||||
|
) do
|
||||||
|
conn
|
||||||
|
|> put_resp_cookie("preferred_frontend", preferred_frontend)
|
||||||
|
|> json(%{frontend_name: preferred_frontend})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -561,6 +561,18 @@ defmodule Pleroma.Web.Router do
|
||||||
get("/apps", AppController, :index)
|
get("/apps", AppController, :index)
|
||||||
get("/statuses/:id/reactions/:emoji", EmojiReactionController, :index)
|
get("/statuses/:id/reactions/:emoji", EmojiReactionController, :index)
|
||||||
get("/statuses/:id/reactions", EmojiReactionController, :index)
|
get("/statuses/:id/reactions", EmojiReactionController, :index)
|
||||||
|
|
||||||
|
get(
|
||||||
|
"/preferred_frontend/available",
|
||||||
|
FrontendSettingsController,
|
||||||
|
:available_frontends
|
||||||
|
)
|
||||||
|
|
||||||
|
put(
|
||||||
|
"/preferred_frontend",
|
||||||
|
FrontendSettingsController,
|
||||||
|
:update_preferred_frontend
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/api/v0/pleroma", Pleroma.Web.PleromaAPI do
|
scope "/api/v0/pleroma", Pleroma.Web.PleromaAPI do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue