commit: 0476cf42838dc84af568c89a550be2d8fb3e30f4
parent e81e0d64c1b484b86d69420ceb9b3260b2e8ff91
Author: nicole mikołajczyk <me@mkljczk.pl>
Date: Fri, 28 Nov 2025 14:51:11 +0100
Merge branch 'rss-redirect' into 'develop'
Redirect /users/:nickname.rss to /users/:nickname/feed.rss instead of .atom
See merge request pleroma/pleroma!4375
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