fix s3_cdn_url when the s3 bucket contains a folder

This commit is contained in:
Andrew Schleifer 2018-05-22 16:21:52 -05:00
parent ea7ffac17e
commit 4be0e31459
3 changed files with 26 additions and 2 deletions

View File

@ -85,7 +85,8 @@ module FileStore
def cdn_url(url)
return url if SiteSetting.Upload.s3_cdn_url.blank?
schema = url[/^(https?:)?\/\//, 1]
url.sub("#{schema}#{absolute_base_url}", SiteSetting.Upload.s3_cdn_url)
folder = @s3_helper.s3_bucket_folder_path.nil? ? "" : "#{@s3_helper.s3_bucket_folder_path}/"
url.sub("#{schema}#{absolute_base_url}/#{folder}", "#{SiteSetting.Upload.s3_cdn_url}/")
end
def cache_avatar(avatar, user_id)

View File

@ -4,7 +4,7 @@ class S3Helper
class SettingMissing < StandardError; end
attr_reader :s3_bucket_name
attr_reader :s3_bucket_name, :s3_bucket_folder_path
def initialize(s3_bucket_name, tombstone_prefix = '', options = {})
@s3_options = default_s3_options.merge(options)

View File

@ -725,6 +725,29 @@ describe PrettyText do
test_s3_cdn
end
def test_s3_with_subfolder_cdn
raw = <<~RAW
<img src='https:#{Discourse.store.absolute_base_url}/subfolder/original/9/9/99c9384b8b6d87f8509f8395571bc7512ca3cad1.jpg'>
RAW
html = <<~HTML
<p><img src="https://awesome.cdn/subfolder/original/9/9/99c9384b8b6d87f8509f8395571bc7512ca3cad1.jpg"></p>
HTML
expect(PrettyText.cook(raw)).to eq(html.strip)
end
it 'can substitute s3 with subfolder cdn when added via global setting' do
global_setting :s3_access_key_id, 'XXX'
global_setting :s3_secret_access_key, 'XXX'
global_setting :s3_bucket, 'XXX/subfolder'
global_setting :s3_region, 'XXX'
global_setting :s3_cdn_url, 'https://awesome.cdn/subfolder'
test_s3_with_subfolder_cdn
end
end
describe "emoji" do