Fix some user-independent endpoints potentially reading session cookies (#24650)
This commit is contained in:
		
							parent
							
								
									276c39361b
								
							
						
					
					
						commit
						1419f90ef2
					
				
					 6 changed files with 32 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -2,11 +2,17 @@
 | 
			
		|||
 | 
			
		||||
class Api::V1::Instances::ExtendedDescriptionsController < Api::BaseController
 | 
			
		||||
  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 | 
			
		||||
  skip_around_action :set_locale
 | 
			
		||||
 | 
			
		||||
  before_action :set_extended_description
 | 
			
		||||
 | 
			
		||||
  vary_by ''
 | 
			
		||||
 | 
			
		||||
  # Override `current_user` to avoid reading session cookies unless in whitelist mode
 | 
			
		||||
  def current_user
 | 
			
		||||
    super if whitelist_mode?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def show
 | 
			
		||||
    cache_even_if_authenticated!
 | 
			
		||||
    render json: @extended_description, serializer: REST::ExtendedDescriptionSerializer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,15 @@ class Api::V1::Instances::PeersController < Api::BaseController
 | 
			
		|||
  before_action :require_enabled_api!
 | 
			
		||||
 | 
			
		||||
  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 | 
			
		||||
  skip_around_action :set_locale
 | 
			
		||||
 | 
			
		||||
  vary_by ''
 | 
			
		||||
 | 
			
		||||
  # Override `current_user` to avoid reading session cookies unless in whitelist mode
 | 
			
		||||
  def current_user
 | 
			
		||||
    super if whitelist_mode?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def index
 | 
			
		||||
    cache_even_if_authenticated!
 | 
			
		||||
    render_with_cache(expires_in: 1.day) { Instance.where.not(domain: DomainBlock.select(:domain)).pluck(:domain) }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,11 +2,17 @@
 | 
			
		|||
 | 
			
		||||
class Api::V1::Instances::RulesController < Api::BaseController
 | 
			
		||||
  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 | 
			
		||||
  skip_around_action :set_locale
 | 
			
		||||
 | 
			
		||||
  before_action :set_rules
 | 
			
		||||
 | 
			
		||||
  vary_by ''
 | 
			
		||||
 | 
			
		||||
  # Override `current_user` to avoid reading session cookies unless in whitelist mode
 | 
			
		||||
  def current_user
 | 
			
		||||
    super if whitelist_mode?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def index
 | 
			
		||||
    cache_even_if_authenticated!
 | 
			
		||||
    render json: @rules, each_serializer: REST::RuleSerializer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,9 +2,15 @@
 | 
			
		|||
 | 
			
		||||
class Api::V1::InstancesController < Api::BaseController
 | 
			
		||||
  skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
 | 
			
		||||
  skip_around_action :set_locale
 | 
			
		||||
 | 
			
		||||
  vary_by ''
 | 
			
		||||
 | 
			
		||||
  # Override `current_user` to avoid reading session cookies unless in whitelist mode
 | 
			
		||||
  def current_user
 | 
			
		||||
    super if whitelist_mode?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def show
 | 
			
		||||
    cache_even_if_authenticated!
 | 
			
		||||
    render_with_cache json: InstancePresenter.new, serializer: REST::V1::InstanceSerializer, root: 'instance'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,10 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class ManifestsController < ActionController::Base # rubocop:disable Rails/ApplicationController
 | 
			
		||||
  # Prevent `active_model_serializer`'s `ActionController::Serialization` from calling `current_user`
 | 
			
		||||
  # and thus re-issuing session cookies
 | 
			
		||||
  serialization_scope nil
 | 
			
		||||
 | 
			
		||||
  def show
 | 
			
		||||
    expires_in 3.minutes, public: true
 | 
			
		||||
    render json: InstancePresenter.new, serializer: ManifestSerializer, root: 'instance'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,10 @@ module WellKnown
 | 
			
		|||
  class NodeInfoController < ActionController::Base # rubocop:disable Rails/ApplicationController
 | 
			
		||||
    include CacheConcern
 | 
			
		||||
 | 
			
		||||
    # Prevent `active_model_serializer`'s `ActionController::Serialization` from calling `current_user`
 | 
			
		||||
    # and thus re-issuing session cookies
 | 
			
		||||
    serialization_scope nil
 | 
			
		||||
 | 
			
		||||
    def index
 | 
			
		||||
      expires_in 3.days, public: true
 | 
			
		||||
      render_with_cache json: {}, serializer: NodeInfo::DiscoverySerializer, adapter: NodeInfo::Adapter, expires_in: 3.days, root: 'nodeinfo'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue