Browse Source

[#1097] added redirect: /pleroma/admin -> /pleroma/admin/

tags/v1.1.4
Maksim rinpatch 5 years ago
parent
commit
6b77a88365
3 changed files with 81 additions and 65 deletions
  1. +77
    -0
      lib/pleroma/web/fallback_redirect_controller.ex
  2. +0
    -65
      lib/pleroma/web/router.ex
  3. +4
    -0
      test/web/fallback_test.exs

+ 77
- 0
lib/pleroma/web/fallback_redirect_controller.ex View 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

+ 0
- 65
lib/pleroma/web/router.ex View File

@@ -729,68 +729,3 @@ defmodule Pleroma.Web.Router do
options("/*path", RedirectController, :empty)
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

+ 4
- 0
test/web/fallback_test.exs View File

@@ -30,6 +30,10 @@ defmodule Pleroma.Web.FallbackTest do
|> json_response(404) == %{"error" => "Not implemented"}
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
assert conn
|> get("/foo")


Loading…
Cancel
Save