Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
diff --git a/lib/pleroma/web/fallback/redirect_controller.ex b/lib/pleroma/web/fallback/redirect_controller.ex
index 1a86f7a53..8de54bffb 100644
--- a/lib/pleroma/web/fallback/redirect_controller.ex
+++ b/lib/pleroma/web/fallback/redirect_controller.ex
@@ -1,110 +1,145 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Fallback.RedirectController do
use Pleroma.Web, :controller
require Logger
alias Pleroma.User
alias Pleroma.Web.Metadata
alias Pleroma.Web.Preload
def api_not_implemented(conn, _params) do
conn
|> put_status(404)
|> json(%{error: "Not implemented"})
end
def redirector(conn, _params, code \\ 200) do
+ conn =
+ conn
+ |> put_resp_content_type("text/html")
+
+ if has_index?() do
+ conn
+ |> send_file(code, index_file_path())
+ else
+ conn
+ |> render_missing_frontend_notice()
+ end
+ end
+
+ defp has_index? do
+ File.exists?(index_file_path())
+ end
+
+ defp render_missing_frontend_notice(conn, opts \\ %{}) do
conn
- |> put_resp_content_type("text/html")
- |> send_file(code, index_file_path())
+ |> put_layout(:fallback_index)
+ |> put_view(Pleroma.Web.Fallback.RedirectView)
+ |> render(
+ "missing_frontend.html",
+ server_generated_meta: opts[:head_tags] || "",
+ title: opts[:title] || Pleroma.Config.get([:instance, :name])
+ )
end
def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do
with %User{} = user <- User.get_cached_by_nickname_or_id(maybe_nickname_or_id) do
redirector_with_meta(conn, %{user: user})
else
nil ->
redirector(conn, params)
end
end
def redirector_with_meta(conn, params) do
- {:ok, index_content} = File.read(index_file_path())
-
tags = build_tags(conn, params)
preloads = preload_data(conn, params)
- title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>"
- response =
- index_content
- |> String.replace("<!--server-generated-meta-->", tags <> preloads <> title)
+ if has_index?() do
+ {:ok, index_content} = File.read(index_file_path())
- conn
- |> put_resp_content_type("text/html")
- |> send_resp(200, response)
+ title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>"
+
+ response =
+ index_content
+ |> String.replace("<!--server-generated-meta-->", tags <> preloads <> title)
+
+ conn
+ |> put_resp_content_type("text/html")
+ |> send_resp(200, response)
+ else
+ conn
+ |> render_missing_frontend_notice(head_tags: tags <> preloads)
+ end
end
def redirector_with_preload(conn, %{"path" => ["pleroma", "admin"]}) do
redirect(conn, to: "/pleroma/admin/")
end
def redirector_with_preload(conn, params) do
- {:ok, index_content} = File.read(index_file_path())
preloads = preload_data(conn, params)
- title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>"
- response =
- index_content
- |> String.replace("<!--server-generated-meta-->", preloads <> title)
+ if has_index?() do
+ {:ok, index_content} = File.read(index_file_path())
+ title = "<title>#{Pleroma.Config.get([:instance, :name])}</title>"
- conn
- |> put_resp_content_type("text/html")
- |> send_resp(200, response)
+ response =
+ index_content
+ |> String.replace("<!--server-generated-meta-->", preloads <> title)
+
+ conn
+ |> put_resp_content_type("text/html")
+ |> send_resp(200, response)
+ else
+ conn
+ |> render_missing_frontend_notice(head_tags: preloads)
+ end
end
def registration_page(conn, params) do
redirector(conn, params)
end
def empty(conn, _params) do
conn
|> put_status(204)
|> text("")
end
defp index_file_path do
Pleroma.Web.Plugs.InstanceStatic.file_path("index.html")
end
defp build_tags(conn, params) do
try do
Metadata.build_tags(params)
rescue
e ->
Logger.error(
"Metadata rendering for #{conn.request_path} failed.\n" <>
Exception.format(:error, e, __STACKTRACE__)
)
""
end
end
defp preload_data(conn, params) do
try do
Preload.build_tags(conn, params)
rescue
e ->
Logger.error(
"Preloading for #{conn.request_path} failed.\n" <>
Exception.format(:error, e, __STACKTRACE__)
)
""
end
end
end
diff --git a/lib/pleroma/web/fallback/redirect_view.ex b/lib/pleroma/web/fallback/redirect_view.ex
new file mode 100644
index 000000000..ff9ae6dcf
--- /dev/null
+++ b/lib/pleroma/web/fallback/redirect_view.ex
@@ -0,0 +1,7 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.Fallback.RedirectView do
+ use Pleroma.Web, :view
+end
diff --git a/lib/pleroma/web/templates/fallback/redirect/missing_frontend.html.eex b/lib/pleroma/web/templates/fallback/redirect/missing_frontend.html.eex
new file mode 100644
index 000000000..ab0c8e9b3
--- /dev/null
+++ b/lib/pleroma/web/templates/fallback/redirect/missing_frontend.html.eex
@@ -0,0 +1,7 @@
+<h2><%= Pleroma.Web.Gettext.dpgettext("static_pages", "missing frontend title", "No frontend available") %></h2>
+<p>
+ <%= Pleroma.Web.Gettext.dpgettext("static_pages", "missing frontend description", "The server admin has not yet enabled a frontend here, so we have nothing to show you. You can still use a client to access this instance.") %>
+</p>
+<p>
+ <%= Pleroma.Web.Gettext.dpgettext("static_pages", "missing frontend contact admin", "Please contact the server admin if you need a frontend.") %>
+</p>
diff --git a/lib/pleroma/web/templates/layout/fallback_index.html.eex b/lib/pleroma/web/templates/layout/fallback_index.html.eex
new file mode 100644
index 000000000..31fb19d35
--- /dev/null
+++ b/lib/pleroma/web/templates/layout/fallback_index.html.eex
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="<%= Pleroma.Web.Gettext.language_tag() %>">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1,minimal-ui">
+ <title><%= @title %></title>
+ <%= Phoenix.HTML.raw @server_generated_meta %>
+ <link rel="stylesheet" href="/instance/static.css">
+ </head>
+ <body>
+ <div class="instance-header">
+ <a class="instance-header__content" href="/">
+ <img class="instance-header__thumbnail" src="<%= Pleroma.Config.get([:instance, :instance_thumbnail]) %>">
+ <h1 class="instance-header__title"><%= Pleroma.Config.get([:instance, :name]) %></h1>
+ </a>
+ </div>
+ <div class="container">
+ <%= @inner_content %>
+ </div>
+ </body>
+</html>

File Metadata

Mime Type
text/x-diff
Expires
Sun, Nov 1, 12:08 PM (7 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1803004
Default Alt Text
(6 KB)

Event Timeline