From 1add29cf40f8a9ede5d2720adea278ce5d53806d Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 4 Mar 2026 18:44:27 +0100 Subject: [PATCH] Redirect to short account URLs when requesting HTML for one of the AP endpoints (#38056) --- app/controllers/accounts_controller.rb | 2 ++ app/controllers/statuses_controller.rb | 2 ++ spec/requests/accounts_spec.rb | 16 +++++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index efd0c92cef..0deeb76e3e 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -18,6 +18,8 @@ class AccountsController < ApplicationController respond_to do |format| format.html do expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.hour) unless user_signed_in? + + redirect_to short_account_path(@account) if account_id_param.present? && username_param.blank? end format.rss do diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index be3641589f..7b1f63da6c 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -26,6 +26,8 @@ class StatusesController < ApplicationController respond_to do |format| format.html do expires_in 10.seconds, public: true if current_account.nil? + + redirect_to short_account_status_path(@account, @status) if account_id_param.present? && username_param.blank? end format.json do diff --git a/spec/requests/accounts_spec.rb b/spec/requests/accounts_spec.rb index cc2a5be7c5..cd67e89d45 100644 --- a/spec/requests/accounts_spec.rb +++ b/spec/requests/accounts_spec.rb @@ -6,10 +6,20 @@ RSpec.describe 'Accounts show response' do let(:account) { Fabricate(:account) } context 'with numeric-based identifiers' do - it 'returns http success' do - get "/ap/users/#{account.id}" + context 'with JSON format' do + it 'returns http success' do + get "/ap/users/#{account.id}", headers: { 'ACCEPT' => 'application/json' } - expect(response).to have_http_status(200) + expect(response).to have_http_status(200) + end + end + + context 'with HTML format' do + it 'redirects to success' do + get "/ap/users/#{account.id}", as: 'html' + + expect(response).to redirect_to("/@#{account.username}") + end end end