commit: 50e3cc67fc09bd9baf4dcb8f8abaa1d3b7fca374
parent 8f9a139ba17fa99ca472d15023485290db0e8faf
Author: nicole mikołajczyk <git@mkljczk.pl>
Date: Tue, 14 Oct 2025 20:29:06 +0200
Redirect /users/:nickname.rss to /users/:nickname/feed.rss instead of .atom
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
Diffstat:
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/changelog.d/rss-redirect.change b/changelog.d/rss-redirect.change
@@ -0,0 +1 @@
+Redirect /users/:nickname.rss to /users/:nickname/feed.rss instead of .atom
+\ No newline at end of file
diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex
@@ -28,9 +28,12 @@ defmodule Pleroma.Web.Feed.UserController do
ActivityPubController.call(conn, :user)
end
- def feed_redirect(conn, %{"nickname" => nickname}) do
+ def feed_redirect(%{assigns: assigns} = conn, %{"nickname" => nickname}) do
+ format = Map.get(assigns, :format, "atom")
+ format = if format in ["atom", "rss"], do: format, else: "atom"
+
with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do
- redirect(conn, external: "#{Routes.user_feed_url(conn, :feed, user.nickname)}.atom")
+ redirect(conn, external: "#{Routes.user_feed_url(conn, :feed, user.nickname)}.#{format}")
end
end
diff --git a/test/pleroma/web/feed/user_controller_test.exs b/test/pleroma/web/feed/user_controller_test.exs
@@ -282,6 +282,21 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
"#{Pleroma.Web.Endpoint.url()}/users/#{user.nickname}/feed.atom"
end
+ test "redirects to rss feed when explicitly requested", %{conn: conn} do
+ note_activity = insert(:note_activity)
+ user = User.get_cached_by_ap_id(note_activity.data["actor"])
+
+ conn =
+ conn
+ |> put_req_header("accept", "application/xml")
+ |> get("/users/#{user.nickname}.rss")
+
+ assert conn.status == 302
+
+ assert redirected_to(conn) ==
+ "#{Pleroma.Web.Endpoint.url()}/users/#{user.nickname}/feed.rss"
+ end
+
test "with non-html / non-json format, it returns error when user is not found", %{conn: conn} do
response =
conn