preload data into index.html
[akkoma] / lib / pleroma / web / preload / instance.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.Preload.Providers.Instance do
6 alias Pleroma.Web.MastodonAPI.InstanceView
7 alias Pleroma.Web.Nodeinfo.Nodeinfo
8 alias Pleroma.Web.Preload.Providers.Provider
9
10 @behaviour Provider
11 @instance_url :"/api/v1/instance"
12 @panel_url :"/instance/panel.html"
13 @nodeinfo_url :"/nodeinfo/2.0"
14
15 @impl Provider
16 def generate_terms(_params) do
17 %{}
18 |> build_info_tag()
19 |> build_panel_tag()
20 |> build_nodeinfo_tag()
21 end
22
23 defp build_info_tag(acc) do
24 info_data = InstanceView.render("show.json", %{})
25
26 Map.put(acc, @instance_url, info_data)
27 end
28
29 defp build_panel_tag(acc) do
30 instance_path = Path.join(:code.priv_dir(:pleroma), "static/instance/panel.html")
31
32 if File.exists?(instance_path) do
33 panel_data = File.read!(instance_path)
34 Map.put(acc, @panel_url, panel_data)
35 else
36 acc
37 end
38 end
39
40 defp build_nodeinfo_tag(acc) do
41 case Nodeinfo.get_nodeinfo("2.0") do
42 {:error, _} ->
43 acc
44
45 nodeinfo_data ->
46 Map.put(acc, @nodeinfo_url, nodeinfo_data)
47 end
48 end
49 end