Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma] / lib / pleroma / web / fallback_redirect_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Fallback.RedirectController do
6 use Pleroma.Web, :controller
7 require Logger
8 alias Pleroma.User
9 alias Pleroma.Web.Metadata
10
11 def api_not_implemented(conn, _params) do
12 conn
13 |> put_status(404)
14 |> json(%{error: "Not implemented"})
15 end
16
17 def redirector(conn, _params, code \\ 200)
18
19 # redirect to admin section
20 # /pleroma/admin -> /pleroma/admin/
21 #
22 def redirector(conn, %{"path" => ["pleroma", "admin"]} = _, _code) do
23 redirect(conn, to: "/pleroma/admin/")
24 end
25
26 def redirector(conn, _params, code) do
27 conn
28 |> put_resp_content_type("text/html")
29 |> send_file(code, index_file_path())
30 end
31
32 def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do
33 with %User{} = user <- User.get_cached_by_nickname_or_id(maybe_nickname_or_id) do
34 redirector_with_meta(conn, %{user: user})
35 else
36 nil ->
37 redirector(conn, params)
38 end
39 end
40
41 def redirector_with_meta(conn, params) do
42 {:ok, index_content} = File.read(index_file_path())
43
44 tags =
45 try do
46 Metadata.build_tags(params)
47 rescue
48 e ->
49 Logger.error(
50 "Metadata rendering for #{conn.request_path} failed.\n" <>
51 Exception.format(:error, e, __STACKTRACE__)
52 )
53
54 ""
55 end
56
57 response = String.replace(index_content, "<!--server-generated-meta-->", tags)
58
59 conn
60 |> put_resp_content_type("text/html")
61 |> send_resp(200, response)
62 end
63
64 def index_file_path do
65 Pleroma.Plugs.InstanceStatic.file_path("index.html")
66 end
67
68 def registration_page(conn, params) do
69 redirector(conn, params)
70 end
71
72 def empty(conn, _params) do
73 conn
74 |> put_status(204)
75 |> text("")
76 end
77 end