2022-10-06 10:22:15 -06:00
|
|
|
defmodule Pleroma.Web.ApiSpec.FrontendSettingsOperation 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
|
|
|
|
|
|
|
|
@spec list_profiles_operation() :: Operation.t()
|
|
|
|
def list_profiles_operation() do
|
|
|
|
%Operation{
|
2023-03-12 17:24:07 -06:00
|
|
|
tags: ["Frontends"],
|
2022-10-06 10:22:15 -06:00
|
|
|
summary: "Frontend Settings Profiles",
|
|
|
|
description: "List frontend setting profiles",
|
|
|
|
operationId: "AkkomaAPI.FrontendSettingsController.list_profiles",
|
|
|
|
parameters: [frontend_name_param()],
|
|
|
|
security: [%{"oAuth" => ["read:accounts"]}],
|
|
|
|
responses: %{
|
|
|
|
200 =>
|
|
|
|
Operation.response("Profiles", "application/json", %Schema{
|
|
|
|
type: :array,
|
|
|
|
items: %Schema{
|
|
|
|
type: :object,
|
|
|
|
properties: %{
|
|
|
|
name: %Schema{type: :string},
|
|
|
|
version: %Schema{type: :integer}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
@spec get_profile_operation() :: Operation.t()
|
|
|
|
def get_profile_operation() do
|
|
|
|
%Operation{
|
2023-03-12 17:24:07 -06:00
|
|
|
tags: ["Frontends"],
|
2022-10-06 10:22:15 -06:00
|
|
|
summary: "Frontend Settings Profile",
|
|
|
|
description: "Get frontend setting profile",
|
|
|
|
operationId: "AkkomaAPI.FrontendSettingsController.get_profile",
|
|
|
|
security: [%{"oAuth" => ["read:accounts"]}],
|
|
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
|
|
responses: %{
|
|
|
|
200 =>
|
|
|
|
Operation.response("Profile", "application/json", %Schema{
|
|
|
|
type: :object,
|
|
|
|
properties: %{
|
|
|
|
"version" => %Schema{type: :integer},
|
|
|
|
"settings" => %Schema{type: :object, additionalProperties: true}
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
404 => Operation.response("Not Found", "application/json", %Schema{type: :object})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
@spec delete_profile_operation() :: Operation.t()
|
|
|
|
def delete_profile_operation() do
|
|
|
|
%Operation{
|
2023-03-12 17:24:07 -06:00
|
|
|
tags: ["Frontends"],
|
2022-10-06 10:22:15 -06:00
|
|
|
summary: "Delete frontend Settings Profile",
|
|
|
|
description: "Delete frontend setting profile",
|
|
|
|
operationId: "AkkomaAPI.FrontendSettingsController.delete_profile",
|
|
|
|
security: [%{"oAuth" => ["write:accounts"]}],
|
|
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
|
|
responses: %{
|
|
|
|
200 => Operation.response("Empty", "application/json", %Schema{type: :object}),
|
|
|
|
404 => Operation.response("Not Found", "application/json", %Schema{type: :object})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
@spec update_profile_operation() :: Operation.t()
|
|
|
|
def update_profile_operation() do
|
|
|
|
%Operation{
|
2023-03-12 17:24:07 -06:00
|
|
|
tags: ["Frontends"],
|
2022-10-06 10:22:15 -06:00
|
|
|
summary: "Frontend Settings Profile",
|
|
|
|
description: "Update frontend setting profile",
|
|
|
|
operationId: "AkkomaAPI.FrontendSettingsController.update_profile_operation",
|
|
|
|
security: [%{"oAuth" => ["write:accounts"]}],
|
|
|
|
parameters: [frontend_name_param(), profile_name_param()],
|
|
|
|
requestBody: profile_body_param(),
|
|
|
|
responses: %{
|
|
|
|
200 => Operation.response("Settings", "application/json", %Schema{type: :object}),
|
|
|
|
422 => Operation.response("Invalid", "application/json", %Schema{type: :object})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2023-03-12 17:24:07 -06:00
|
|
|
def available_frontends_operation() do
|
|
|
|
%Operation{
|
|
|
|
tags: ["Frontends"],
|
|
|
|
summary: "Frontend Settings Profiles",
|
|
|
|
description: "List frontend setting profiles",
|
|
|
|
operationId: "AkkomaAPI.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"],
|
2024-02-03 06:24:03 -07:00
|
|
|
summary: "Update preferred frontend setting",
|
|
|
|
description: "Store preferred frontend in cookies",
|
|
|
|
operationId: "AkkomaAPI.FrontendSettingsController.update_preferred_frontend",
|
2023-03-12 17:24:07 -06:00
|
|
|
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{
|
2024-02-03 06:24:03 -07:00
|
|
|
type: :object,
|
|
|
|
properties: %{
|
|
|
|
frontend_name: %Schema{
|
|
|
|
type: :string
|
|
|
|
}
|
2023-03-12 17:24:07 -06:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2022-10-06 10:22:15 -06:00
|
|
|
def frontend_name_param do
|
|
|
|
Operation.parameter(:frontend_name, :path, :string, "Frontend name",
|
|
|
|
example: "pleroma-fe",
|
|
|
|
required: true
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def profile_name_param do
|
|
|
|
Operation.parameter(:profile_name, :path, :string, "Profile name",
|
|
|
|
example: "mobile",
|
|
|
|
required: true
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def profile_body_param do
|
|
|
|
request_body(
|
|
|
|
"Settings",
|
|
|
|
%Schema{
|
|
|
|
title: "Frontend Setting Profile",
|
|
|
|
type: :object,
|
|
|
|
required: [:version, :settings],
|
|
|
|
properties: %{
|
|
|
|
version: %Schema{
|
|
|
|
type: :integer,
|
|
|
|
description: "Version of the profile, must increment by 1 each time",
|
|
|
|
example: 1
|
|
|
|
},
|
|
|
|
settings: %Schema{
|
|
|
|
type: :object,
|
|
|
|
description: "Settings of the profile",
|
|
|
|
example: %{
|
|
|
|
theme: "dark",
|
|
|
|
locale: "en"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
required: true
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|