## `/api/pleroma/admin/`…
See [Admin-API](Admin-API.md)
+
+## `/api/v1/pleroma/flavour/:flavour`
+* Method `POST`
+* Authentication: required
+* Response: JSON string. Returns the user flavour or the default one on success, otherwise returns `{"error": "error_msg"}`
+* Example response: "glitch"
+* Note: This is intended to be used only by mastofe
+
+## `/api/v1/pleroma/flavour`
+* Method `GET`
+* Authentication: required
+* Response: JSON string. Returns the user flavour or the default one.
+* Example response: "glitch"
+* Note: This is intended to be used only by mastofe
field(:hide_followers, :boolean, default: false)
field(:hide_follows, :boolean, default: false)
field(:pinned_activities, {:array, :string}, default: [])
+ field(:flavour, :string, default: nil)
# Found in the wild
# ap_id -> Where is this used?
|> validate_required([:settings])
end
+ def mastodon_flavour_update(info, flavour) do
+ params = %{flavour: flavour}
+
+ info
+ |> cast(params, [:flavour])
+ |> validate_required([:flavour])
+ end
+
def set_source_data(info, source_data) do
params = %{source_data: source_data}
accounts =
Map.put(%{}, user.id, AccountView.render("account.json", %{user: user, for: user}))
+ flavour = get_user_flavour(user)
+
initial_state =
%{
meta: %{
conn
|> put_layout(false)
|> put_view(MastodonView)
- |> render("index.html", %{initial_state: initial_state})
+ |> render("index.html", %{initial_state: initial_state, flavour: flavour})
else
conn
|> redirect(to: "/web/login")
end
end
+ @supported_flavours ["glitch", "vanilla"]
+
+ def set_flavour(%{assigns: %{user: user}} = conn, %{"flavour" => flavour} = _params)
+ when flavour in @supported_flavours do
+ flavour_cng = User.Info.mastodon_flavour_update(user.info, flavour)
+
+ with changeset <- Ecto.Changeset.change(user),
+ changeset <- Ecto.Changeset.put_embed(changeset, :info, flavour_cng),
+ {:ok, user} <- User.update_and_set_cache(changeset),
+ flavour <- user.info.flavour do
+ json(conn, flavour)
+ else
+ e ->
+ conn
+ |> put_resp_content_type("application/json")
+ |> send_resp(500, Jason.encode!(%{"error" => inspect(e)}))
+ end
+ end
+
+ def set_flavour(conn, _params) do
+ conn
+ |> put_status(400)
+ |> json(%{error: "Unsupported flavour"})
+ end
+
+ def get_flavour(%{assigns: %{user: user}} = conn, _params) do
+ json(conn, get_user_flavour(user))
+ end
+
+ defp get_user_flavour(%User{info: %{flavour: flavour}}) when flavour in @supported_flavours do
+ flavour
+ end
+
+ defp get_user_flavour(_) do
+ "glitch"
+ end
+
def login(conn, %{"code" => code}) do
with {:ok, app} <- get_or_make_app(),
%Authorization{} = auth <- Repo.get_by(Authorization, token: code, app_id: app.id),
get("/suggestions", MastodonAPIController, :suggestions)
get("/endorsements", MastodonAPIController, :empty_array)
+
+ post("/pleroma/flavour/:flavour", MastodonAPIController, :set_flavour)
+ get("/pleroma/flavour", MastodonAPIController, :get_flavour)
end
scope "/api/web", Pleroma.Web.MastodonAPI do
</title>
<link rel="icon" type="image/png" href="/favicon.png"/>
<script crossorigin='anonymous' src="/packs/locales.js"></script>
-<script crossorigin='anonymous' src="/packs/locales/glitch/en.js"></script>
+<script crossorigin='anonymous' src="/packs/locales/<%= @flavour %>/en.js"></script>
<link rel='preload' as='script' crossorigin='anonymous' href='/packs/features/getting_started.js'>
<link rel='preload' as='script' crossorigin='anonymous' href='/packs/features/compose.js'>
<script src="/packs/core/common.js"></script>
<link rel="stylesheet" media="all" href="/packs/core/common.css" />
-<script src="/packs/flavours/glitch/common.js"></script>
-<link rel="stylesheet" media="all" href="/packs/flavours/glitch/common.css" />
+<script src="/packs/flavours/<%= @flavour %>/common.js"></script>
+<link rel="stylesheet" media="all" href="/packs/flavours/<%= @flavour %>/common.css" />
-<script src="/packs/flavours/glitch/home.js"></script>
+<script src="/packs/flavours/<%= @flavour %>/home.js"></script>
</head>
<body class='app-body no-reduce-motion system-font'>
<div class='app-holder' data-props='{"locale":"en"}' id='mastodon'>