From 40ba6e119b7457161fd43b449875d0fb9d473c1a Mon Sep 17 00:00:00 2001
From: Claire <claire.github-309c@sitedethib.com>
Date: Thu, 5 Oct 2023 09:50:08 +0200
Subject: [PATCH] Fix Vary headers not being set on some redirects (#27272)

---
 app/controllers/concerns/web_app_controller_concern.rb | 10 ++++++----
 app/controllers/follower_accounts_controller.rb        |  1 -
 app/controllers/following_accounts_controller.rb       |  1 -
 spec/requests/cache_spec.rb                            |  1 +
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb
index 273d7344caa..5687d6e5b60 100644
--- a/app/controllers/concerns/web_app_controller_concern.rb
+++ b/app/controllers/concerns/web_app_controller_concern.rb
@@ -4,10 +4,10 @@ module WebAppControllerConcern
   extend ActiveSupport::Concern
 
   included do
-    prepend_before_action :redirect_unauthenticated_to_permalinks!
-    before_action :set_app_body_class
-
     vary_by 'Accept, Accept-Language, Cookie'
+
+    before_action :redirect_unauthenticated_to_permalinks!
+    before_action :set_app_body_class
   end
 
   def skip_csrf_meta_tags?
@@ -22,7 +22,9 @@ module WebAppControllerConcern
     return if user_signed_in? && current_account.moved_to_account_id.nil?
 
     redirect_path = PermalinkRedirector.new(request.path).redirect_path
+    return if redirect_path.blank?
 
-    redirect_to(redirect_path) if redirect_path.present?
+    expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?
+    redirect_to(redirect_path)
   end
 end
diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb
index ffdbd01802e..5effd9495e3 100644
--- a/app/controllers/follower_accounts_controller.rb
+++ b/app/controllers/follower_accounts_controller.rb
@@ -3,7 +3,6 @@
 class FollowerAccountsController < ApplicationController
   include AccountControllerConcern
   include SignatureVerification
-  include WebAppControllerConcern
 
   vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }
 
diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb
index cce296f9fd6..268fad96d09 100644
--- a/app/controllers/following_accounts_controller.rb
+++ b/app/controllers/following_accounts_controller.rb
@@ -3,7 +3,6 @@
 class FollowingAccountsController < ApplicationController
   include AccountControllerConcern
   include SignatureVerification
-  include WebAppControllerConcern
 
   vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }
 
diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb
index 178d19ed0da..c391c8b3da9 100644
--- a/spec/requests/cache_spec.rb
+++ b/spec/requests/cache_spec.rb
@@ -30,6 +30,7 @@ module TestEndpoints
     /directory
     /@alice
     /@alice/110224538612341312
+    /deck/home
   ).freeze
 
   # Endpoints that should be cachable when accessed anonymously but have a Vary