92 lines
2.6 KiB
Elixir
92 lines
2.6 KiB
Elixir
|
# Pleroma: A lightweight social networking server
|
||
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
defmodule Pleroma.Web.MastoFEView do
|
||
|
use Pleroma.Web, :view
|
||
|
alias Pleroma.Config
|
||
|
alias Pleroma.User
|
||
|
alias Pleroma.Web.MastodonAPI.AccountView
|
||
|
alias Pleroma.Web.MastodonAPI.CustomEmojiView
|
||
|
|
||
|
def initial_state(token, user, custom_emojis) do
|
||
|
limit = Config.get([:instance, :limit])
|
||
|
|
||
|
%{
|
||
|
meta: %{
|
||
|
streaming_api_base_url: Pleroma.Web.Endpoint.websocket_url(),
|
||
|
access_token: token,
|
||
|
locale: "en",
|
||
|
domain: Pleroma.Web.Endpoint.host(),
|
||
|
admin: "1",
|
||
|
me: "#{user.id}",
|
||
|
unfollow_modal: false,
|
||
|
boost_modal: false,
|
||
|
delete_modal: true,
|
||
|
auto_play_gif: false,
|
||
|
display_sensitive_media: false,
|
||
|
reduce_motion: false,
|
||
|
max_toot_chars: limit,
|
||
|
mascot: User.get_mascot(user)["url"]
|
||
|
},
|
||
|
poll_limits: Config.get([:instance, :poll_limits]),
|
||
|
rights: %{
|
||
|
delete_others_notice: present?(user.is_moderator),
|
||
|
admin: present?(user.is_admin)
|
||
|
},
|
||
|
compose: %{
|
||
|
me: "#{user.id}",
|
||
|
default_privacy: user.default_scope,
|
||
|
default_sensitive: false,
|
||
|
allow_content_types: Config.get([:instance, :allowed_post_formats])
|
||
|
},
|
||
|
media_attachments: %{
|
||
|
accept_content_types: [
|
||
|
".jpg",
|
||
|
".jpeg",
|
||
|
".png",
|
||
|
".gif",
|
||
|
".webm",
|
||
|
".mp4",
|
||
|
".m4v",
|
||
|
"image\/jpeg",
|
||
|
"image\/png",
|
||
|
"image\/gif",
|
||
|
"video\/webm",
|
||
|
"video\/mp4"
|
||
|
]
|
||
|
},
|
||
|
settings: user.mastofe_settings || %{},
|
||
|
push_subscription: nil,
|
||
|
accounts: %{user.id => render(AccountView, "show.json", user: user, for: user)},
|
||
|
custom_emojis: render(CustomEmojiView, "index.json", custom_emojis: custom_emojis),
|
||
|
char_limit: limit
|
||
|
}
|
||
|
|> Jason.encode!()
|
||
|
|> Phoenix.HTML.raw()
|
||
|
end
|
||
|
|
||
|
defp present?(nil), do: false
|
||
|
defp present?(false), do: false
|
||
|
defp present?(_), do: true
|
||
|
|
||
|
def render("manifest.json", _params) do
|
||
|
%{
|
||
|
name: Config.get([:instance, :name]),
|
||
|
description: Config.get([:instance, :description]),
|
||
|
icons: Config.get([:manifest, :icons]),
|
||
|
theme_color: Config.get([:manifest, :theme_color]),
|
||
|
background_color: Config.get([:manifest, :background_color]),
|
||
|
display: "standalone",
|
||
|
scope: Pleroma.Web.Endpoint.url(),
|
||
|
start_url: Routes.masto_fe_path(Pleroma.Web.Endpoint, :index, ["getting-started"]),
|
||
|
categories: [
|
||
|
"social"
|
||
|
],
|
||
|
serviceworker: %{
|
||
|
src: "/sw.js"
|
||
|
}
|
||
|
}
|
||
|
end
|
||
|
end
|