Fix crash when S3_ALIAS_HOST or S3_CLOUDFRONT_HOST have a path component (#25018)

This commit is contained in:
Claire 2023-06-01 09:23:28 +02:00 committed by GitHub
parent 2b45fecde1
commit b922ad7a1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 9 deletions

View file

@ -169,11 +169,11 @@ module ApplicationHelper
end end
def storage_host def storage_host
URI::HTTPS.build(host: storage_host_name).to_s "https://#{storage_host_var}"
end end
def storage_host? def storage_host?
storage_host_name.present? storage_host_var.present?
end end
def quote_wrap(text, line_width: 80, break_sequence: "\n") def quote_wrap(text, line_width: 80, break_sequence: "\n")
@ -234,7 +234,7 @@ module ApplicationHelper
private private
def storage_host_name def storage_host_var
ENV.fetch('S3_ALIAS_HOST', nil) || ENV.fetch('S3_CLOUDFRONT_HOST', nil) ENV.fetch('S3_ALIAS_HOST', nil) || ENV.fetch('S3_CLOUDFRONT_HOST', nil)
end end
end end

View file

@ -208,6 +208,18 @@ describe ApplicationHelper do
end end
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 context 'when S3 cloudfront is present' do
around do |example| around do |example|
ClimateControl.modify S3_CLOUDFRONT_HOST: 's3.cloudfront' do ClimateControl.modify S3_CLOUDFRONT_HOST: 's3.cloudfront' do
@ -219,12 +231,6 @@ describe ApplicationHelper do
expect(helper.storage_host).to eq('https://s3.cloudfront') expect(helper.storage_host).to eq('https://s3.cloudfront')
end end
end end
context 'when neither env value is present' do
it 'returns false' do
expect(helper.storage_host).to eq('https:')
end
end
end end
describe 'storage_host?' do describe 'storage_host?' do