{:ok, _activity} <-
ActivityPub.accept(%{
to: [follower.ap_id],
- actor: followed.ap_id,
+ actor: followed,
object: follow_activity.data["id"],
type: "Accept"
}) do
{:ok, _activity} <-
ActivityPub.reject(%{
to: [follower.ap_id],
- actor: followed.ap_id,
+ actor: followed,
object: follow_activity.data["id"],
type: "Reject"
}) do
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),