API compatibility with fedibird, frontend config (#163)
[akkoma] / lib / pleroma / web / views / masto_fe_view.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastoFEView do
6 use Pleroma.Web, :view
7 alias Pleroma.Config
8 alias Pleroma.User
9 alias Pleroma.Web.MastodonAPI.AccountView
10 alias Pleroma.Web.MastodonAPI.CustomEmojiView
11
12 def initial_state(token, user, custom_emojis) do
13 limit = Config.get([:instance, :limit])
14
15 %{
16 meta: %{
17 title: Config.get([:instance, :name]),
18 streaming_api_base_url: Pleroma.Web.Endpoint.websocket_url(),
19 access_token: token,
20 locale: "en",
21 domain: Pleroma.Web.Endpoint.host(),
22 admin: "1",
23 me: "#{user.id}",
24 unfollow_modal: false,
25 boost_modal: false,
26 delete_modal: true,
27 auto_play_gif: false,
28 display_sensitive_media: false,
29 reduce_motion: false,
30 max_toot_chars: limit,
31 mascot: User.get_mascot(user)["url"],
32 show_quote_button: true,
33 enable_reaction: true,
34 compact_reaction: false,
35 advanced_layout: true
36 },
37 poll_limits: Config.get([:instance, :poll_limits]),
38 rights: %{
39 delete_others_notice: present?(user.is_moderator),
40 admin: present?(user.is_admin)
41 },
42 compose: %{
43 me: "#{user.id}",
44 default_privacy: user.default_scope,
45 default_sensitive: false,
46 allow_content_types: Config.get([:instance, :allowed_post_formats])
47 },
48 media_attachments: %{
49 accept_content_types: [
50 ".jpg",
51 ".jpeg",
52 ".png",
53 ".gif",
54 ".webm",
55 ".mp4",
56 ".m4v",
57 "image\/jpeg",
58 "image\/png",
59 "image\/gif",
60 "video\/webm",
61 "video\/mp4"
62 ]
63 },
64 lists: [],
65 settings: user.mastofe_settings || %{},
66 push_subscription: nil,
67 accounts: %{user.id => render(AccountView, "show.json", user: user, for: user)},
68 custom_emojis: render(CustomEmojiView, "index.json", custom_emojis: custom_emojis),
69 char_limit: limit
70 }
71 |> Jason.encode!()
72 |> Phoenix.HTML.raw()
73 end
74
75 defp present?(nil), do: false
76 defp present?(false), do: false
77 defp present?(_), do: true
78
79 def render("manifest.json", _params) do
80 %{
81 name: Config.get([:instance, :name]),
82 description: Config.get([:instance, :description]),
83 icons: Config.get([:manifest, :icons]),
84 theme_color: Config.get([:manifest, :theme_color]),
85 background_color: Config.get([:manifest, :background_color]),
86 display: "standalone",
87 scope: Pleroma.Web.Endpoint.url(),
88 start_url: Routes.masto_fe_path(Pleroma.Web.Endpoint, :index, ["getting-started"]),
89 categories: [
90 "social"
91 ],
92 serviceworker: %{
93 src: "/sw.js"
94 }
95 }
96 end
97 end