1 defmodule Pleroma.Web.AkkomaAPI.FrontendSettingsController do
2 use Pleroma.Web, :controller
4 alias Pleroma.Web.Plugs.OAuthScopesPlug
5 alias Pleroma.Akkoma.FrontendSettingsProfile
7 @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []}
11 @unauthenticated_access
14 :update_preferred_frontend
20 %{@unauthenticated_access | scopes: ["read:accounts"]}
29 %{@unauthenticated_access | scopes: ["write:accounts"]}
36 plug(Pleroma.Web.ApiSpec.CastAndValidate)
37 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FrontendSettingsOperation
39 action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
41 @doc "GET /api/v1/akkoma/frontend_settings/:frontend_name/:profile_name"
42 def get_profile(conn, %{frontend_name: frontend_name, profile_name: profile_name}) do
43 with %FrontendSettingsProfile{} = profile <-
44 FrontendSettingsProfile.get_by_user_and_frontend_name_and_profile_name(
51 settings: profile.settings,
52 version: profile.version
55 nil -> {:error, :not_found}
59 @doc "GET /api/v1/akkoma/frontend_settings/:frontend_name"
60 def list_profiles(conn, %{frontend_name: frontend_name}) do
62 FrontendSettingsProfile.get_all_by_user_and_frontend_name(
67 Enum.map(profiles, fn profile ->
68 %{name: profile.profile_name, version: profile.version}
74 @doc "DELETE /api/v1/akkoma/frontend_settings/:frontend_name/:profile_name"
75 def delete_profile(conn, %{frontend_name: frontend_name, profile_name: profile_name}) do
76 with %FrontendSettingsProfile{} = profile <-
77 FrontendSettingsProfile.get_by_user_and_frontend_name_and_profile_name(
82 {:ok, _} <- FrontendSettingsProfile.delete_profile(profile) do
83 json(conn, %{deleted: "ok"})
85 nil -> {:error, :not_found}
89 @doc "PUT /api/v1/akkoma/frontend_settings/:frontend_name/:profile_name"
90 def update_profile(%{body_params: %{settings: settings, version: version}} = conn, %{
91 frontend_name: frontend_name,
92 profile_name: profile_name
94 with {:ok, profile} <-
95 FrontendSettingsProfile.create_or_update(
103 |> json(profile.settings)
107 @doc "GET /api/v1/akkoma/preferred_frontend/available"
108 def available_frontends(conn, _params) do
109 available = Pleroma.Config.get([:frontends, :pickable])
115 @doc "PUT /api/v1/akkoma/preferred_frontend"
116 def update_preferred_frontend(
117 %{body_params: %{frontend_name: preferred_frontend}} = conn,
121 |> put_resp_cookie("preferred_frontend", preferred_frontend)
122 |> json(%{frontend_name: preferred_frontend})