Merge branch 'issue/1934-welcome-email' into 'develop'
[akkoma] / lib / pleroma / web / views / masto_fe_view.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 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 @default_settings %{
13 onboarded: true,
14 home: %{
15 shows: %{
16 reblog: true,
17 reply: true
18 }
19 },
20 notifications: %{
21 alerts: %{
22 follow: true,
23 favourite: true,
24 reblog: true,
25 mention: true
26 },
27 shows: %{
28 follow: true,
29 favourite: true,
30 reblog: true,
31 mention: true
32 },
33 sounds: %{
34 follow: true,
35 favourite: true,
36 reblog: true,
37 mention: true
38 }
39 }
40 }
41
42 def initial_state(token, user, custom_emojis) do
43 limit = Config.get([:instance, :limit])
44
45 %{
46 meta: %{
47 streaming_api_base_url: Pleroma.Web.Endpoint.websocket_url(),
48 access_token: token,
49 locale: "en",
50 domain: Pleroma.Web.Endpoint.host(),
51 admin: "1",
52 me: "#{user.id}",
53 unfollow_modal: false,
54 boost_modal: false,
55 delete_modal: true,
56 auto_play_gif: false,
57 display_sensitive_media: false,
58 reduce_motion: false,
59 max_toot_chars: limit,
60 mascot: User.get_mascot(user)["url"]
61 },
62 poll_limits: Config.get([:instance, :poll_limits]),
63 rights: %{
64 delete_others_notice: present?(user.is_moderator),
65 admin: present?(user.is_admin)
66 },
67 compose: %{
68 me: "#{user.id}",
69 default_privacy: user.default_scope,
70 default_sensitive: false,
71 allow_content_types: Config.get([:instance, :allowed_post_formats])
72 },
73 media_attachments: %{
74 accept_content_types: [
75 ".jpg",
76 ".jpeg",
77 ".png",
78 ".gif",
79 ".webm",
80 ".mp4",
81 ".m4v",
82 "image\/jpeg",
83 "image\/png",
84 "image\/gif",
85 "video\/webm",
86 "video\/mp4"
87 ]
88 },
89 settings: user.mastofe_settings || @default_settings,
90 push_subscription: nil,
91 accounts: %{user.id => render(AccountView, "show.json", user: user, for: user)},
92 custom_emojis: render(CustomEmojiView, "index.json", custom_emojis: custom_emojis),
93 char_limit: limit
94 }
95 |> Jason.encode!()
96 |> Phoenix.HTML.raw()
97 end
98
99 defp present?(nil), do: false
100 defp present?(false), do: false
101 defp present?(_), do: true
102
103 def render("manifest.json", _params) do
104 %{
105 name: Config.get([:instance, :name]),
106 description: Config.get([:instance, :description]),
107 icons: Config.get([:manifest, :icons]),
108 theme_color: Config.get([:manifest, :theme_color]),
109 background_color: Config.get([:manifest, :background_color]),
110 display: "standalone",
111 scope: Pleroma.Web.base_url(),
112 start_url: masto_fe_path(Pleroma.Web.Endpoint, :index, ["getting-started"]),
113 categories: [
114 "social"
115 ],
116 serviceworker: %{
117 src: "/sw.js"
118 }
119 }
120 end
121 end