Merge pull request 'Redirect /users/:nickname.rss to /users/:nickname/feed.rss instead of .atom' (#1022) from mkljczk/akkoma:akkoma-feed-redirect into develop

Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/1022
Reviewed-by: Oneric <oneric@noreply.akkoma>
This commit is contained in:
Oneric 2025-11-26 20:56:12 +00:00
commit 078c73ee2c
2 changed files with 20 additions and 2 deletions

View file

@ -28,9 +28,12 @@ def feed_redirect(%{assigns: %{format: format}} = conn, _params)
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: "#{url(~p"/users/#{user.nickname}/feed")}.atom")
redirect(conn, external: "#{url(~p"/users/#{user.nickname}/feed")}.#{format}")
end
end

View file

@ -236,6 +236,21 @@ test "with non-html / non-json format, it redirects to user feed in atom format"
"#{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