forked from AkkomaGang/akkoma
[#1097] added redirect: /pleroma/admin -> /pleroma/admin/
This commit is contained in:
parent
46e8b68093
commit
6b77a88365
3 changed files with 81 additions and 65 deletions
77
lib/pleroma/web/fallback_redirect_controller.ex
Normal file
77
lib/pleroma/web/fallback_redirect_controller.ex
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Fallback.RedirectController do
|
||||||
|
use Pleroma.Web, :controller
|
||||||
|
require Logger
|
||||||
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.Metadata
|
||||||
|
|
||||||
|
def api_not_implemented(conn, _params) do
|
||||||
|
conn
|
||||||
|
|> put_status(404)
|
||||||
|
|> json(%{error: "Not implemented"})
|
||||||
|
end
|
||||||
|
|
||||||
|
def redirector(conn, _params, code \\ 200)
|
||||||
|
|
||||||
|
# redirect to admin section
|
||||||
|
# /pleroma/admin -> /pleroma/admin/
|
||||||
|
#
|
||||||
|
def redirector(conn, %{"path" => ["pleroma", "admin"]} = _, _code) do
|
||||||
|
redirect(conn, to: "/pleroma/admin/")
|
||||||
|
end
|
||||||
|
|
||||||
|
def redirector(conn, _params, code) do
|
||||||
|
conn
|
||||||
|
|> put_resp_content_type("text/html")
|
||||||
|
|> send_file(code, index_file_path())
|
||||||
|
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 =
|
||||||
|
try do
|
||||||
|
Metadata.build_tags(params)
|
||||||
|
rescue
|
||||||
|
e ->
|
||||||
|
Logger.error(
|
||||||
|
"Metadata rendering for #{conn.request_path} failed.\n" <>
|
||||||
|
Exception.format(:error, e, __STACKTRACE__)
|
||||||
|
)
|
||||||
|
|
||||||
|
""
|
||||||
|
end
|
||||||
|
|
||||||
|
response = String.replace(index_content, "<!--server-generated-meta-->", tags)
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> put_resp_content_type("text/html")
|
||||||
|
|> send_resp(200, response)
|
||||||
|
end
|
||||||
|
|
||||||
|
def index_file_path do
|
||||||
|
Pleroma.Plugs.InstanceStatic.file_path("index.html")
|
||||||
|
end
|
||||||
|
|
||||||
|
def registration_page(conn, params) do
|
||||||
|
redirector(conn, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
def empty(conn, _params) do
|
||||||
|
conn
|
||||||
|
|> put_status(204)
|
||||||
|
|> text("")
|
||||||
|
end
|
||||||
|
end
|
|
@ -729,68 +729,3 @@ defmodule Pleroma.Web.Router do
|
||||||
options("/*path", RedirectController, :empty)
|
options("/*path", RedirectController, :empty)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defmodule Fallback.RedirectController do
|
|
||||||
use Pleroma.Web, :controller
|
|
||||||
require Logger
|
|
||||||
alias Pleroma.User
|
|
||||||
alias Pleroma.Web.Metadata
|
|
||||||
|
|
||||||
def api_not_implemented(conn, _params) do
|
|
||||||
conn
|
|
||||||
|> put_status(404)
|
|
||||||
|> json(%{error: "Not implemented"})
|
|
||||||
end
|
|
||||||
|
|
||||||
def redirector(conn, _params, code \\ 200) do
|
|
||||||
conn
|
|
||||||
|> put_resp_content_type("text/html")
|
|
||||||
|> send_file(code, index_file_path())
|
|
||||||
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 =
|
|
||||||
try do
|
|
||||||
Metadata.build_tags(params)
|
|
||||||
rescue
|
|
||||||
e ->
|
|
||||||
Logger.error(
|
|
||||||
"Metadata rendering for #{conn.request_path} failed.\n" <>
|
|
||||||
Exception.format(:error, e, __STACKTRACE__)
|
|
||||||
)
|
|
||||||
|
|
||||||
""
|
|
||||||
end
|
|
||||||
|
|
||||||
response = String.replace(index_content, "<!--server-generated-meta-->", tags)
|
|
||||||
|
|
||||||
conn
|
|
||||||
|> put_resp_content_type("text/html")
|
|
||||||
|> send_resp(200, response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def index_file_path do
|
|
||||||
Pleroma.Plugs.InstanceStatic.file_path("index.html")
|
|
||||||
end
|
|
||||||
|
|
||||||
def registration_page(conn, params) do
|
|
||||||
redirector(conn, params)
|
|
||||||
end
|
|
||||||
|
|
||||||
def empty(conn, _params) do
|
|
||||||
conn
|
|
||||||
|> put_status(204)
|
|
||||||
|> text("")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -30,6 +30,10 @@ test "GET /api*path", %{conn: conn} do
|
||||||
|> json_response(404) == %{"error" => "Not implemented"}
|
|> json_response(404) == %{"error" => "Not implemented"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "GET /pleroma/admin -> /pleroma/admin/", %{conn: conn} do
|
||||||
|
assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/"
|
||||||
|
end
|
||||||
|
|
||||||
test "GET /*path", %{conn: conn} do
|
test "GET /*path", %{conn: conn} do
|
||||||
assert conn
|
assert conn
|
||||||
|> get("/foo")
|
|> get("/foo")
|
||||||
|
|
Loading…
Reference in a new issue