Fix potential redirection loop of streaming endpoint (#28665)
This commit is contained in:
		
							parent
							
								
									01caa18e5b
								
							
						
					
					
						commit
						c0a9db3611
					
				| @ -2,7 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| class Api::V1::StreamingController < Api::BaseController | class Api::V1::StreamingController < Api::BaseController | ||||||
|   def index |   def index | ||||||
|     if Rails.configuration.x.streaming_api_base_url == request.host |     if same_host? | ||||||
|       not_found |       not_found | ||||||
|     else |     else | ||||||
|       redirect_to streaming_api_url, status: 301, allow_other_host: true |       redirect_to streaming_api_url, status: 301, allow_other_host: true | ||||||
| @ -11,6 +11,11 @@ class Api::V1::StreamingController < Api::BaseController | |||||||
| 
 | 
 | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|  |   def same_host? | ||||||
|  |     base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) | ||||||
|  |     request.host == base_url.host && request.port == (base_url.port || 80) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   def streaming_api_url |   def streaming_api_url | ||||||
|     Addressable::URI.parse(request.url).tap do |uri| |     Addressable::URI.parse(request.url).tap do |uri| | ||||||
|       base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) |       base_url = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url) | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ require 'rails_helper' | |||||||
| describe Api::V1::StreamingController do | describe Api::V1::StreamingController do | ||||||
|   around(:each) do |example| |   around(:each) do |example| | ||||||
|     before = Rails.configuration.x.streaming_api_base_url |     before = Rails.configuration.x.streaming_api_base_url | ||||||
|     Rails.configuration.x.streaming_api_base_url = Rails.configuration.x.web_domain |     Rails.configuration.x.streaming_api_base_url = "wss://#{Rails.configuration.x.web_domain}" | ||||||
|     example.run |     example.run | ||||||
|     Rails.configuration.x.streaming_api_base_url = before |     Rails.configuration.x.streaming_api_base_url = before | ||||||
|   end |   end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user