# Pleroma: A lightweight social networking server # Copyright © 2017-2021 Pleroma Authors # 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: %{ title: Config.get([:instance, :name]), 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"], show_quote_button: true, enable_reaction: true, compact_reaction: false, advanced_layout: true }, 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" ] }, lists: [], 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