From b922ad7a1b4bc8d968d0df2c7f307d4fec53435d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 1 Jun 2023 09:23:28 +0200 Subject: [PATCH] Fix crash when S3_ALIAS_HOST or S3_CLOUDFRONT_HOST have a path component (#25018) --- app/helpers/application_helper.rb | 6 +++--- spec/helpers/application_helper_spec.rb | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index cdd5927c40..281219186f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -169,11 +169,11 @@ module ApplicationHelper end def storage_host - URI::HTTPS.build(host: storage_host_name).to_s + "https://#{storage_host_var}" end def storage_host? - storage_host_name.present? + storage_host_var.present? end def quote_wrap(text, line_width: 80, break_sequence: "\n") @@ -234,7 +234,7 @@ module ApplicationHelper private - def storage_host_name + def storage_host_var ENV.fetch('S3_ALIAS_HOST', nil) || ENV.fetch('S3_CLOUDFRONT_HOST', nil) end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index df13838725..d191265cad 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -208,6 +208,18 @@ describe ApplicationHelper do end end + context 'when S3 alias includes a path component' do + around do |example| + ClimateControl.modify S3_ALIAS_HOST: 's3.alias/path' do + example.run + end + end + + it 'returns a correct URL' do + expect(helper.storage_host).to eq('https://s3.alias/path') + end + end + context 'when S3 cloudfront is present' do around do |example| ClimateControl.modify S3_CLOUDFRONT_HOST: 's3.cloudfront' do @@ -219,12 +231,6 @@ describe ApplicationHelper do expect(helper.storage_host).to eq('https://s3.cloudfront') end end - - context 'when neither env value is present' do - it 'returns false' do - expect(helper.storage_host).to eq('https:') - end - end end describe 'storage_host?' do