Deprecate Pleroma.Web.base_url/0
[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 streaming_api_base_url: Pleroma.Web.Endpoint.websocket_url(),
18 access_token: token,
19 locale: "en",
20 domain: Pleroma.Web.Endpoint.host(),
21 admin: "1",
22 me: "#{user.id}",
23 unfollow_modal: false,
24 boost_modal: false,
25 delete_modal: true,
26 auto_play_gif: false,
27 display_sensitive_media: false,
28 reduce_motion: false,
29 max_toot_chars: limit,
30 mascot: User.get_mascot(user)["url"]
31 },
32 poll_limits: Config.get([:instance, :poll_limits]),
33 rights: %{
34 delete_others_notice: present?(user.is_moderator),
35 admin: present?(user.is_admin)
36 },
37 compose: %{
38 me: "#{user.id}",
39 default_privacy: user.default_scope,
40 default_sensitive: false,
41 allow_content_types: Config.get([:instance, :allowed_post_formats])
42 },
43 media_attachments: %{
44 accept_content_types: [
45 ".jpg",
46 ".jpeg",
47 ".png",
48 ".gif",
49 ".webm",
50 ".mp4",
51 ".m4v",
52 "image\/jpeg",
53 "image\/png",
54 "image\/gif",
55 "video\/webm",
56 "video\/mp4"
57 ]
58 },
59 settings: user.mastofe_settings || %{},
60 push_subscription: nil,
61 accounts: %{user.id => render(AccountView, "show.json", user: user, for: user)},
62 custom_emojis: render(CustomEmojiView, "index.json", custom_emojis: custom_emojis),
63 char_limit: limit
64 }
65 |> Jason.encode!()
66 |> Phoenix.HTML.raw()
67 end
68
69 defp present?(nil), do: false
70 defp present?(false), do: false
71 defp present?(_), do: true
72
73 def render("manifest.json", _params) do
74 %{
75 name: Config.get([:instance, :name]),
76 description: Config.get([:instance, :description]),
77 icons: Config.get([:manifest, :icons]),
78 theme_color: Config.get([:manifest, :theme_color]),
79 background_color: Config.get([:manifest, :background_color]),
80 display: "standalone",
81 scope: Pleroma.Web.Endpoint.url(),
82 start_url: Routes.masto_fe_path(Pleroma.Web.Endpoint, :index, ["getting-started"]),
83 categories: [
84 "social"
85 ],
86 serviceworker: %{
87 src: "/sw.js"
88 }
89 }
90 end
91 end