summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Chvanikov <chvanikoff@pm.me>2020-07-30 21:43:11 +0300
committerRoman Chvanikov <chvanikoff@pm.me>2020-07-30 21:46:00 +0300
commit5d5287989a8639d23a35d386294567efdde5bd6d (patch)
treea8faf938254f9a24eda4f376e6b32282e1b4f8a8
parentef12eb5e12ba34e78428c0f070efe328d94587ac (diff)
Migrate Redirect controller
-rw-r--r--lib/mix/tasks/pleroma/user.ex2
-rw-r--r--lib/pleroma/emails/user_email.ex2
-rw-r--r--lib/pleroma/plugs/frontend_static.ex2
-rw-r--r--lib/pleroma/web/controller/frontend_controller.ex38
-rw-r--r--lib/pleroma/web/fallback_redirect_controller.ex109
-rw-r--r--lib/pleroma/web/feed/user_controller.ex5
-rw-r--r--lib/pleroma/web/ostatus/ostatus_controller.ex26
-rw-r--r--lib/pleroma/web/router.ex9
-rw-r--r--test/emails/user_email_test.exs2
-rw-r--r--test/web/controllers/frontend/pleroma_controller_test.exs (renamed from test/web/fallback_test.exs)14
-rw-r--r--test/web/feed/user_controller_test.exs12
11 files changed, 73 insertions, 148 deletions
diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex
index 01824aa18..ce7ba9b80 100644
--- a/lib/mix/tasks/pleroma/user.ex
+++ b/lib/mix/tasks/pleroma/user.ex
@@ -277,7 +277,7 @@ defmodule Mix.Tasks.Pleroma.User do
shell_info("Generated user invite token " <> String.replace(invite.invite_type, "_", " "))
url =
- Pleroma.Web.Router.Helpers.redirect_url(
+ Pleroma.Web.Router.Helpers.frontend_url(
Pleroma.Web.Endpoint,
:registration_page,
invite.token
diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex
index 313533859..1a1f6fb4b 100644
--- a/lib/pleroma/emails/user_email.ex
+++ b/lib/pleroma/emails/user_email.ex
@@ -52,7 +52,7 @@ defmodule Pleroma.Emails.UserEmail do
to_name \\ nil
) do
registration_url =
- Router.Helpers.redirect_url(
+ Router.Helpers.frontend_url(
Endpoint,
:registration_page,
user_invite_token.token
diff --git a/lib/pleroma/plugs/frontend_static.ex b/lib/pleroma/plugs/frontend_static.ex
index f549ca75f..815f3bb20 100644
--- a/lib/pleroma/plugs/frontend_static.ex
+++ b/lib/pleroma/plugs/frontend_static.ex
@@ -21,8 +21,6 @@ defmodule Pleroma.Plugs.FrontendStatic do
configuration["ref"],
path
])
- else
- nil
end
end
diff --git a/lib/pleroma/web/controller/frontend_controller.ex b/lib/pleroma/web/controller/frontend_controller.ex
index fc717fa29..5fa4e6391 100644
--- a/lib/pleroma/web/controller/frontend_controller.ex
+++ b/lib/pleroma/web/controller/frontend_controller.ex
@@ -4,6 +4,7 @@ defmodule Pleroma.Web.FrontendController do
defmacro __using__(_opts) do
quote do
require Logger
+ alias Pleroma.User
def fallback(conn, _params) do
conn
@@ -11,6 +12,30 @@ defmodule Pleroma.Web.FrontendController do
|> text("Not found")
end
+ def registration_page(conn, params) do
+ redirector(conn, params)
+ end
+
+ def api_not_implemented(conn, _params) do
+ conn
+ |> put_status(404)
+ |> json(%{error: "Not implemented"})
+ end
+
+ def empty(conn, _params) do
+ conn
+ |> put_status(204)
+ |> text("")
+ end
+
+ def redirector(conn, _params) do
+ {:ok, path} = Pleroma.Frontend.file_path("index.html")
+
+ conn
+ |> put_resp_content_type("text/html")
+ |> send_file(conn.status || 200, path)
+ end
+
def redirector_with_preload(conn, %{"path" => ["pleroma", "admin"]}) do
redirect(conn, to: "/pleroma/admin/")
end
@@ -19,6 +44,19 @@ defmodule Pleroma.Web.FrontendController do
index_with_generated_data(conn, params, [:preload])
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
+ index_with_generated_data(conn, params, [:metadata, :preload])
+ end
+
def index_with_generated_data(conn, params, generators) do
{:ok, path} = Pleroma.Frontend.file_path("index.html")
{:ok, index_content} = File.read(path)
diff --git a/lib/pleroma/web/fallback_redirect_controller.ex b/lib/pleroma/web/fallback_redirect_controller.ex
deleted file mode 100644
index a59c2a02e..000000000
--- a/lib/pleroma/web/fallback_redirect_controller.ex
+++ /dev/null
@@ -1,109 +0,0 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 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
- 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
- |> 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 = build_tags(conn, params)
- preloads = preload_data(conn, params)
-
- response =
- index_content
- |> String.replace("<!--server-generated-meta-->", tags <> preloads)
-
- conn
- |> put_resp_content_type("text/html")
- |> send_resp(200, response)
- 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)
-
- response =
- index_content
- |> String.replace("<!--server-generated-meta-->", preloads)
-
- conn
- |> put_resp_content_type("text/html")
- |> send_resp(200, response)
- 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
- {:ok, file} = Pleroma.Frontend.file_path("index.html", :primary)
- file
- 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/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex
index d56f43818..47c3dba35 100644
--- a/lib/pleroma/web/feed/user_controller.ex
+++ b/lib/pleroma/web/feed/user_controller.ex
@@ -5,7 +5,6 @@
defmodule Pleroma.Web.Feed.UserController do
use Pleroma.Web, :controller
- alias Fallback.RedirectController
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.ActivityPubController
@@ -17,7 +16,9 @@ defmodule Pleroma.Web.Feed.UserController do
def feed_redirect(%{assigns: %{format: "html"}} = conn, %{"nickname" => nickname}) do
with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname_or_id(nickname)} do
- RedirectController.redirector_with_meta(conn, %{user: user})
+ conn
+ |> Map.put(:params, %{user: user})
+ |> Pleroma.Web.FrontendController.call(:redirector_with_meta)
end
end
diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex
index de1b0b3f0..e6ce1d350 100644
--- a/lib/pleroma/web/ostatus/ostatus_controller.ex
+++ b/lib/pleroma/web/ostatus/ostatus_controller.ex
@@ -5,7 +5,6 @@
defmodule Pleroma.Web.OStatus.OStatusController do
use Pleroma.Web, :controller
- alias Fallback.RedirectController
alias Pleroma.Activity
alias Pleroma.Object
alias Pleroma.Plugs.RateLimiter
@@ -91,24 +90,25 @@ defmodule Pleroma.Web.OStatus.OStatusController do
activity.data["type"] == "Create" ->
%Object{} = object = Object.normalize(activity)
- RedirectController.redirector_with_meta(
- conn,
- %{
- activity_id: activity.id,
- object: object,
- url: Router.Helpers.o_status_url(Endpoint, :notice, activity.id),
- user: user
- }
- )
+ params = %{
+ activity_id: activity.id,
+ object: object,
+ url: Router.Helpers.o_status_url(Endpoint, :notice, activity.id),
+ user: user
+ }
+
+ conn
+ |> Map.put(:params, params)
+ |> Pleroma.Web.FrontendController.call(:redirector_with_meta)
true ->
- RedirectController.redirector(conn, nil)
+ Pleroma.Web.FrontendController.call(conn, :redirector)
end
else
reason when reason in [{:public?, false}, {:activity, nil}] ->
conn
|> put_status(404)
- |> RedirectController.redirector(nil, 404)
+ |> Pleroma.Web.FrontendController.call(:redirector)
e ->
e
@@ -135,7 +135,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
_error ->
conn
|> put_status(404)
- |> RedirectController.redirector(nil, 404)
+ |> Pleroma.Web.FrontendController.call(:redirector)
end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index b8c93a389..3cf5728f0 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -715,12 +715,11 @@ defmodule Pleroma.Web.Router do
end
scope "/" do
- get("/registration/:token", Fallback.RedirectController, :registration_page)
- get("/:maybe_nickname_or_id", Fallback.RedirectController, :redirector_with_meta)
- get("/api*path", Fallback.RedirectController, :api_not_implemented)
- # get("/*path", RedirectController, :redirector_with_preload)
+ get("/registration/:token", Pleroma.Web.FrontendController, :registration_page)
+ get("/:maybe_nickname_or_id", Pleroma.Web.FrontendController, :redirector_with_meta)
+ get("/api*path", Pleroma.Web.FrontendController, :api_not_implemented)
get("/*path", Pleroma.Web.FrontendController, :redirector_with_preload)
- options("/*path", Fallback.RedirectController, :empty)
+ options("/*path", Pleroma.Web.FrontendController, :empty)
end
end
diff --git a/test/emails/user_email_test.exs b/test/emails/user_email_test.exs
index a75623bb4..c6044a8a5 100644
--- a/test/emails/user_email_test.exs
+++ b/test/emails/user_email_test.exs
@@ -31,7 +31,7 @@ defmodule Pleroma.Emails.UserEmailTest do
assert email.to == [{"Jonh", "test@test.com"}]
assert email.html_body =~
- Router.Helpers.redirect_url(Endpoint, :registration_page, token.token)
+ Router.Helpers.frontend_url(Endpoint, :registration_page, token.token)
end
test "build account confirmation email" do
diff --git a/test/web/fallback_test.exs b/test/web/controllers/frontend/pleroma_controller_test.exs
index a65865860..7c91d4581 100644
--- a/test/web/fallback_test.exs
+++ b/test/web/controllers/frontend/pleroma_controller_test.exs
@@ -1,11 +1,11 @@
-# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
-# SPDX-License-Identifier: AGPL-3.0-only
-
-defmodule Pleroma.Web.FallbackTest do
+defmodule Pleroma.Web.Frontend.PleromaControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
+ test "GET /pleroma/admin -> /pleroma/admin/", %{conn: conn} do
+ assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/"
+ end
+
describe "neither preloaded data nor metadata attached to" do
test "GET /registration/:token", %{conn: conn} do
response = get(conn, "/registration/foo")
@@ -64,10 +64,6 @@ 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 "OPTIONS /*path", %{conn: conn} do
assert conn
|> options("/foo")
diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs
index fa2ed1ea5..5bbb90eb4 100644
--- a/test/web/feed/user_controller_test.exs
+++ b/test/web/feed/user_controller_test.exs
@@ -194,11 +194,13 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
|> get("/users/#{user.nickname}")
|> response(200)
- assert response ==
- Fallback.RedirectController.redirector_with_meta(
- conn,
- %{user: user}
- ).resp_body
+ expected =
+ conn
+ |> Map.put(:params, %{user: user})
+ |> Pleroma.Web.FrontendController.call(:redirector_with_meta)
+ |> Map.get(:resp_body)
+
+ assert response == expected
end
test "with html format, it returns error when user is not found", %{conn: conn} do