Fix not being able to resolve public resources in development environment (#13505)
This commit is contained in:
		
							parent
							
								
									cd3a0a17bc
								
							
						
					
					
						commit
						96920a7b8e
					
				
					 2 changed files with 22 additions and 3 deletions
				
			
		| 
						 | 
					@ -25,7 +25,18 @@ class FetchResourceService < BaseService
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def perform_request(&block)
 | 
					  def perform_request(&block)
 | 
				
			||||||
    Request.new(:get, @url).add_headers('Accept' => ACCEPT_HEADER).on_behalf_of(Account.representative).perform(&block)
 | 
					    Request.new(:get, @url).tap do |request|
 | 
				
			||||||
 | 
					      request.add_headers('Accept' => ACCEPT_HEADER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # In a real setting we want to sign all outgoing requests,
 | 
				
			||||||
 | 
					      # in case the remote server has secure mode enabled and requires
 | 
				
			||||||
 | 
					      # authentication on all resources. However, during development,
 | 
				
			||||||
 | 
					      # sending request signatures with an inaccessible host is useless
 | 
				
			||||||
 | 
					      # and prevents even public resources from being fetched, so
 | 
				
			||||||
 | 
					      # don't do it
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      request.on_behalf_of(Account.representative) unless Rails.env.development?
 | 
				
			||||||
 | 
					    end.perform(&block)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def process_response(response, terminal = false)
 | 
					  def process_response(response, terminal = false)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,11 @@ RSpec.describe FetchResourceService, type: :service do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'when OpenSSL::SSL::SSLError is raised' do
 | 
					    context 'when OpenSSL::SSL::SSLError is raised' do
 | 
				
			||||||
      before do
 | 
					      before do
 | 
				
			||||||
        allow(Request).to receive_message_chain(:new, :add_headers, :on_behalf_of, :perform).and_raise(OpenSSL::SSL::SSLError)
 | 
					        request = double()
 | 
				
			||||||
 | 
					        allow(Request).to receive(:new).and_return(request)
 | 
				
			||||||
 | 
					        allow(request).to receive(:add_headers)
 | 
				
			||||||
 | 
					        allow(request).to receive(:on_behalf_of)
 | 
				
			||||||
 | 
					        allow(request).to receive(:perform).and_raise(OpenSSL::SSL::SSLError)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      it { is_expected.to be_nil }
 | 
					      it { is_expected.to be_nil }
 | 
				
			||||||
| 
						 | 
					@ -29,7 +33,11 @@ RSpec.describe FetchResourceService, type: :service do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'when HTTP::ConnectionError is raised' do
 | 
					    context 'when HTTP::ConnectionError is raised' do
 | 
				
			||||||
      before do
 | 
					      before do
 | 
				
			||||||
        allow(Request).to receive_message_chain(:new, :add_headers, :on_behalf_of, :perform).and_raise(HTTP::ConnectionError)
 | 
					        request = double()
 | 
				
			||||||
 | 
					        allow(Request).to receive(:new).and_return(request)
 | 
				
			||||||
 | 
					        allow(request).to receive(:add_headers)
 | 
				
			||||||
 | 
					        allow(request).to receive(:on_behalf_of)
 | 
				
			||||||
 | 
					        allow(request).to receive(:perform).and_raise(HTTP::ConnectionError)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      it { is_expected.to be_nil }
 | 
					      it { is_expected.to be_nil }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue