diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex
index 4ca1c28eb..6f5d41153 100644
--- a/lib/mix/tasks/pleroma/user.ex
+++ b/lib/mix/tasks/pleroma/user.ex
@@ -11,6 +11,7 @@ defmodule Mix.Tasks.Pleroma.User do
alias Pleroma.UserInviteToken
alias Pleroma.Web.ActivityPub.Builder
alias Pleroma.Web.ActivityPub.Pipeline
+ use Pleroma.Web, :verified_routes
@shortdoc "Manages Pleroma users"
@moduledoc File.read!("docs/docs/administration/CLI_tasks/user.md")
@@ -113,11 +114,7 @@ defmodule Mix.Tasks.Pleroma.User do
{:ok, token} <- Pleroma.PasswordResetToken.create_token(user) do
shell_info("Generated password reset token for #{user.nickname}")
- IO.puts(
- "URL: #{Pleroma.Web.Router.Helpers.reset_password_url(Pleroma.Web.Endpoint,
- :reset,
- token.token)}"
- )
+ IO.puts("URL: #{~p[/api/v1/pleroma/password_reset/#{token.token}]}")
else
_ ->
shell_error("No local user #{nickname}")
@@ -303,13 +300,7 @@ defmodule Mix.Tasks.Pleroma.User do
{:ok, invite} <- UserInviteToken.create_invite(options) do
shell_info("Generated user invite token " <> String.replace(invite.invite_type, "_", " "))
- url =
- Pleroma.Web.Router.Helpers.redirect_url(
- Pleroma.Web.Endpoint,
- :registration_page,
- invite.token
- )
-
+ url = ~p[/registration/#{invite.token}]
IO.puts(url)
else
error ->
diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex
index 88bc78aec..683de8e3b 100644
--- a/lib/pleroma/emails/admin_email.ex
+++ b/lib/pleroma/emails/admin_email.ex
@@ -6,10 +6,13 @@ defmodule Pleroma.Emails.AdminEmail do
@moduledoc "Admin emails"
import Swoosh.Email
-
+ use Pleroma.Web, :mailer
alias Pleroma.Config
alias Pleroma.HTML
- alias Pleroma.Web.Router.Helpers
+
+ use Phoenix.VerifiedRoutes,
+ endpoint: Pleroma.Web.Endpoint,
+ router: Pleroma.Web.Router
defp instance_config, do: Config.get(:instance)
defp instance_name, do: instance_config()[:name]
@@ -45,7 +48,7 @@ defmodule Pleroma.Emails.AdminEmail do
statuses
|> Enum.map(fn
%{id: id} ->
- status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, id)
+ status_url = url(~p[/notice/#{id}])
"
#{status_url}"
%{"id" => id} when is_binary(id) ->
diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex
index 1588c099c..fe319c775 100644
--- a/lib/pleroma/emails/user_email.ex
+++ b/lib/pleroma/emails/user_email.ex
@@ -6,12 +6,11 @@ defmodule Pleroma.Emails.UserEmail do
@moduledoc "User emails"
require Pleroma.Web.Gettext
+ use Pleroma.Web, :mailer
alias Pleroma.Config
alias Pleroma.User
- alias Pleroma.Web.Endpoint
alias Pleroma.Web.Gettext
- alias Pleroma.Web.Router
import Swoosh.Email
import Phoenix.Swoosh, except: [render_body: 3]
@@ -75,7 +74,7 @@ defmodule Pleroma.Emails.UserEmail do
def password_reset_email(user, token) when is_binary(token) do
Gettext.with_locale_or_default user.language do
- password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token)
+ password_reset_url = ~p[/api/v1/pleroma/password_reset/#{token}]
html_body =
Gettext.dpgettext(
@@ -108,12 +107,7 @@ defmodule Pleroma.Emails.UserEmail do
to_name \\ nil
) do
Gettext.with_locale_or_default user.language do
- registration_url =
- Router.Helpers.redirect_url(
- Endpoint,
- :registration_page,
- user_invite_token.token
- )
+ registration_url = ~p[/registration/#{user_invite_token.token}]
html_body =
Gettext.dpgettext(
@@ -146,13 +140,7 @@ defmodule Pleroma.Emails.UserEmail do
def account_confirmation_email(user) do
Gettext.with_locale_or_default user.language do
- confirmation_url =
- Router.Helpers.confirm_email_url(
- Endpoint,
- :confirm_email,
- user.id,
- to_string(user.confirmation_token)
- )
+ confirmation_url = ~p[/api/account/confirm_email/#{user.id}/#{user.confirmation_token}]
html_body =
Gettext.dpgettext(
@@ -342,7 +330,7 @@ defmodule Pleroma.Emails.UserEmail do
|> Pleroma.JWT.generate_and_sign!()
|> Base.encode64()
- Router.Helpers.subscription_url(Endpoint, :unsubscribe, token)
+ ~p[/mailer/unsubscribe/#{token}]
end
def backup_is_ready_email(backup, admin_user_id \\ nil) do
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 83b45e3b4..d3f25b6cf 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -44,6 +44,8 @@ defmodule Pleroma.User do
alias Pleroma.Web.RelMe
alias Pleroma.Workers.BackgroundWorker
+ use Pleroma.Web, :verified_routes
+
require Logger
@type t :: %__MODULE__{}
@@ -2447,12 +2449,7 @@ defmodule Pleroma.User do
end
if is_url(raw_value) do
- frontend_url =
- Pleroma.Web.Router.Helpers.redirect_url(
- Pleroma.Web.Endpoint,
- :redirector_with_meta,
- nickname
- )
+ frontend_url = ~p[/#{nickname}]
possible_urls = [ap_id, frontend_url]
diff --git a/lib/pleroma/web.ex b/lib/pleroma/web.ex
index ae0ae1282..5422e7896 100644
--- a/lib/pleroma/web.ex
+++ b/lib/pleroma/web.ex
@@ -38,8 +38,6 @@ defmodule Pleroma.Web do
import Pleroma.Web.Gettext
import Pleroma.Web.TranslationHelpers
- alias Pleroma.Web.Router.Helpers, as: Routes
-
unquote(verified_routes())
plug(:set_put_layout)
@@ -224,7 +222,7 @@ defmodule Pleroma.Web do
def router do
quote do
- use Phoenix.Router
+ use Phoenix.Router, helpers: false
import Plug.Conn
import Phoenix.Controller
@@ -252,7 +250,6 @@ defmodule Pleroma.Web do
import Pleroma.Web.ErrorHelpers
import Pleroma.Web.Gettext
- alias Pleroma.Web.Router.Helpers, as: Routes
unquote(verified_routes())
end
end
@@ -268,6 +265,12 @@ defmodule Pleroma.Web do
end
end
+ def mailer do
+ quote do
+ unquote(verified_routes())
+ end
+ end
+
@doc """
When used, dispatch to the appropriate controller/view/etc.
"""
diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex
index 6d39ad3a8..e67a14b58 100644
--- a/lib/pleroma/web/activity_pub/builder.ex
+++ b/lib/pleroma/web/activity_pub/builder.ex
@@ -18,6 +18,8 @@ defmodule Pleroma.Web.ActivityPub.Builder do
alias Pleroma.Web.CommonAPI.ActivityDraft
alias Pleroma.Web.Endpoint
+ use Pleroma.Web, :verified_routes
+
require Pleroma.Constants
def accept_or_reject(actor, activity, type) do
@@ -402,6 +404,6 @@ defmodule Pleroma.Web.ActivityPub.Builder do
end
defp pinned_url(nickname) when is_binary(nickname) do
- Pleroma.Web.Router.Helpers.activity_pub_url(Pleroma.Web.Endpoint, :pinned, nickname)
+ url(~p[/users/#{nickname}/collections/featured])
end
end
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index 008aec475..f731b5286 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -16,10 +16,11 @@ defmodule Pleroma.Web.ActivityPub.Utils do
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.AdminAPI.AccountView
alias Pleroma.Web.Endpoint
- alias Pleroma.Web.Router.Helpers
import Ecto.Query
+ use Pleroma.Web, :verified_routes
+
require Logger
require Pleroma.Constants
@@ -124,19 +125,15 @@ defmodule Pleroma.Web.ActivityPub.Utils do
end
def generate_activity_id do
- generate_id("activities")
+ url(~p[/activities/#{UUID.generate()}])
end
def generate_context_id do
- generate_id("contexts")
+ url(~p[/contexts/#{UUID.generate()}])
end
def generate_object_id do
- Helpers.o_status_url(Endpoint, :object, UUID.generate())
- end
-
- def generate_id(type) do
- "#{Endpoint.url()}/#{type}/#{UUID.generate()}"
+ url(~p[/objects/#{UUID.generate()}])
end
def get_notified_from_object(%{"type" => type} = object) when type in @supported_object_types do
@@ -154,7 +151,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
Notification.get_notified_from_activity(%Activity{data: object}, false)
end
- def maybe_create_context(context), do: context || generate_id("contexts")
+ def maybe_create_context(context), do: context || generate_context_id()
@doc """
Enqueues an activity for federation if it's local
diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex
index 7333fb2c1..82b59c47f 100644
--- a/lib/pleroma/web/activity_pub/views/user_view.ex
+++ b/lib/pleroma/web/activity_pub/views/user_view.ex
@@ -12,24 +12,22 @@ defmodule Pleroma.Web.ActivityPub.UserView do
alias Pleroma.Web.ActivityPub.ObjectView
alias Pleroma.Web.ActivityPub.Transmogrifier
alias Pleroma.Web.ActivityPub.Utils
- alias Pleroma.Web.Endpoint
- alias Pleroma.Web.Router.Helpers
require Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Query
def render("endpoints.json", %{user: %User{nickname: nil, local: true} = _user}) do
- %{"sharedInbox" => Helpers.activity_pub_url(Endpoint, :inbox)}
+ %{"sharedInbox" => ~p"/inbox"}
end
def render("endpoints.json", %{user: %User{local: true} = _user}) do
%{
- "oauthAuthorizationEndpoint" => Helpers.o_auth_url(Endpoint, :authorize),
- "oauthRegistrationEndpoint" => Helpers.app_url(Endpoint, :create),
- "oauthTokenEndpoint" => Helpers.o_auth_url(Endpoint, :token_exchange),
- "sharedInbox" => Helpers.activity_pub_url(Endpoint, :inbox),
- "uploadMedia" => Helpers.activity_pub_url(Endpoint, :upload_media)
+ "oauthAuthorizationEndpoint" => ~p"/oauth/authorize",
+ "oauthRegistrationEndpoint" => ~p"/api/v1/apps",
+ "oauthTokenEndpoint" => ~p"/oauth/token",
+ "sharedInbox" => ~p"/inbox",
+ "uploadMedia" => ~p"/api/ap/upload_media"
}
end
diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
index 1d7ac78a0..bd0ddc21d 100644
--- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
@@ -17,9 +17,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
alias Pleroma.Web.AdminAPI
alias Pleroma.Web.AdminAPI.AccountView
alias Pleroma.Web.AdminAPI.ModerationLogView
- alias Pleroma.Web.Endpoint
alias Pleroma.Web.Plugs.OAuthScopesPlug
- alias Pleroma.Web.Router
@users_page_size 50
@@ -256,7 +254,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
conn
|> json(%{
token: token.token,
- link: Router.Helpers.reset_password_url(Endpoint, :reset, token.token)
+ link: ~p[/api/v1/pleroma/password_reset/#{token.token}]
})
end
diff --git a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
index 2e963d6f5..30e40ac42 100644
--- a/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/auth_controller.ex
@@ -54,12 +54,7 @@ defmodule Pleroma.Web.MastodonAPI.AuthController do
defp redirect_to_oauth_form(conn, _params) do
with {:ok, app} <- local_mastofe_app() do
path =
- Routes.o_auth_path(conn, :authorize,
- response_type: "code",
- client_id: app.client_id,
- redirect_uri: ".",
- scope: Enum.join(app.scopes, " ")
- )
+ ~p[/oauth/authorize?#{[response_type: "code", client_id: app.client_id, redirect_uri: ".", scope: Enum.join(app.scopes, " ")]}]
redirect(conn, to: path)
end
diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex
index 47d1616c4..ac0955534 100644
--- a/lib/pleroma/web/mastodon_api/views/status_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/status_view.ex
@@ -322,7 +322,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
url =
if user.local do
- Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, activity)
+ url(~p[/notice/#{activity}])
else
object.data["url"] || object.data["external_url"] || object.data["id"]
end
diff --git a/lib/pleroma/web/mastodon_api/views/tag_view.ex b/lib/pleroma/web/mastodon_api/views/tag_view.ex
index 02108c736..6d3ea3c1a 100644
--- a/lib/pleroma/web/mastodon_api/views/tag_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/tag_view.ex
@@ -1,7 +1,6 @@
defmodule Pleroma.Web.MastodonAPI.TagView do
use Pleroma.Web, :view
alias Pleroma.User
- alias Pleroma.Web.Router.Helpers
def render("index.json", %{tags: tags, for_user: user}) do
render_many(tags, __MODULE__, "show.json", %{for_user: user})
@@ -17,7 +16,7 @@ defmodule Pleroma.Web.MastodonAPI.TagView do
%{
name: tag.name,
- url: Helpers.tag_feed_url(Pleroma.Web.Endpoint, :feed, tag.name),
+ url: url(~p[/tags/#{tag.name}]),
history: [],
following: following
}
diff --git a/lib/pleroma/web/metadata/providers/feed.ex b/lib/pleroma/web/metadata/providers/feed.ex
index d0ab5c19e..15f47b843 100644
--- a/lib/pleroma/web/metadata/providers/feed.ex
+++ b/lib/pleroma/web/metadata/providers/feed.ex
@@ -3,9 +3,9 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Metadata.Providers.Feed do
- alias Pleroma.Web.Endpoint
alias Pleroma.Web.Metadata.Providers.Provider
- alias Pleroma.Web.Router.Helpers
+
+ use Pleroma.Web, :verified_routes
@behaviour Provider
@@ -16,7 +16,7 @@ defmodule Pleroma.Web.Metadata.Providers.Feed do
[
rel: "alternate",
type: "application/atom+xml",
- href: Helpers.user_feed_path(Endpoint, :feed, user.nickname) <> ".atom"
+ href: ~p[/users/#{user.nickname}/feed.atom]
], []}
]
end
diff --git a/lib/pleroma/web/metadata/providers/twitter_card.ex b/lib/pleroma/web/metadata/providers/twitter_card.ex
index b2497d14e..ab48ea272 100644
--- a/lib/pleroma/web/metadata/providers/twitter_card.ex
+++ b/lib/pleroma/web/metadata/providers/twitter_card.ex
@@ -10,6 +10,8 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
alias Pleroma.Web.Metadata.Providers.Provider
alias Pleroma.Web.Metadata.Utils
+ use Pleroma.Web, :verified_routes
+
@behaviour Provider
@media_types ["image", "audio", "video"]
@@ -112,7 +114,7 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
defp build_attachments(_id, _object), do: []
defp player_url(id) do
- Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice_player, id)
+ url(~p[/notice/#{id}/embed_player])
end
# Videos have problems without dimensions, but we used to not provide WxH for images.
diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex
index 95a22895e..2b2872c9a 100644
--- a/lib/pleroma/web/o_status/o_status_controller.ex
+++ b/lib/pleroma/web/o_status/o_status_controller.ex
@@ -14,7 +14,6 @@ defmodule Pleroma.Web.OStatus.OStatusController do
alias Pleroma.Web.Fallback.RedirectController
alias Pleroma.Web.Metadata.PlayerView
alias Pleroma.Web.Plugs.RateLimiter
- alias Pleroma.Web.Router
plug(
RateLimiter,
@@ -87,7 +86,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
%{
activity_id: activity.id,
object: object,
- url: Router.Helpers.o_status_url(Endpoint, :notice, activity.id),
+ url: url(~p[/notice/#{activity.id}]),
user: user
}
)
diff --git a/lib/pleroma/web/plugs/http_signature_plug.ex b/lib/pleroma/web/plugs/http_signature_plug.ex
index 488108b08..7f8343fce 100644
--- a/lib/pleroma/web/plugs/http_signature_plug.ex
+++ b/lib/pleroma/web/plugs/http_signature_plug.ex
@@ -5,8 +5,9 @@
defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
import Plug.Conn
import Phoenix.Controller, only: [get_format: 1]
+
+ use Pleroma.Web, :verified_routes
alias Pleroma.Activity
- alias Pleroma.Web.Router
alias Pleroma.Signature
alias Pleroma.Instances
require Logger
@@ -32,7 +33,7 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
end
def route_aliases(%{path_info: ["objects", id], query_string: query_string}) do
- ap_id = Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :object, id)
+ ap_id = ~p[/objects/#{id}]
with %Activity{} = activity <- Activity.get_by_object_ap_id_with_object(ap_id) do
["/notice/#{activity.id}", "/notice/#{activity.id}?#{query_string}"]
diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex
index 56ee4e41e..04d5dc917 100644
--- a/lib/pleroma/web/static_fe/static_fe_controller.ex
+++ b/lib/pleroma/web/static_fe/static_fe_controller.ex
@@ -11,7 +11,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.Metadata
- alias Pleroma.Web.Router.Helpers
plug(:put_layout, :static_fe)
plug(:assign_id)
@@ -111,11 +110,11 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
end
def show(%{assigns: %{object_id: _}} = conn, _params) do
- url = Helpers.url(conn) <> conn.request_path
+ url = conn.url <> conn.request_path
case Activity.get_create_by_object_ap_id_with_object(url) do
%Activity{} = activity ->
- to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity)
+ to = ~p[/notice/#{activity}]
redirect(conn, to: to)
_ ->
@@ -124,11 +123,11 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
end
def show(%{assigns: %{activity_id: _}} = conn, _params) do
- url = Helpers.url(conn) <> conn.request_path
+ url = conn.url <> conn.request_path
case Activity.get_by_ap_id(url) do
%Activity{} = activity ->
- to = Helpers.o_status_path(Pleroma.Web.Endpoint, :notice, activity)
+ to = ~p[/notice/#{activity}]
redirect(conn, to: to)
_ ->
@@ -167,7 +166,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
link =
case user.local do
- true -> Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, activity)
+ true -> ~p[/notice/#{activity}]
_ -> data["url"] || data["external_url"] || data["id"]
end
diff --git a/lib/pleroma/web/static_fe/static_fe_view.ex b/lib/pleroma/web/static_fe/static_fe_view.ex
index f0c9ddd22..c1d83c5a0 100644
--- a/lib/pleroma/web/static_fe/static_fe_view.ex
+++ b/lib/pleroma/web/static_fe/static_fe_view.ex
@@ -11,7 +11,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEView do
alias Pleroma.Web.Gettext
alias Pleroma.Web.MediaProxy
alias Pleroma.Web.Metadata.Utils
- alias Pleroma.Web.Router.Helpers
use Phoenix.HTML
diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
index 3d1cf77e5..0bc44738b 100644
--- a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
+++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex
@@ -36,7 +36,7 @@
-