replace subfolder on cdn url conversion between general cdn and s3 (#7764)

When both a cdn URL and an s3 cdn URL defined, subfolder paths were leaking
through to the s3 cdn URL. If we are replacing the cdn url with the s3_cdn url,
we also need to make sure that the subpath is removed as well, as it appears in
the original cdn url.

The test should give a fairly good gist of the situations - in subfolder
situations where s3_cdn and a cdn is defined:
`asset_path` returns the asset with a subfolder, in the form `{cdn_url}/{subfolder}/{asset_path}`

Currently this is being replaced to `{s3_cdn_url}/{subfolder}/{asset_path}`
I am proposing we change this to: `{s3_cdn_url}/{asset_path}` as it seems like
for s3_cdn urls we should not be carrying around app subfolder pathing anywhere
we are looking up s3 paths.
This commit is contained in:
Jeff Wong 2019-06-17 11:51:17 -07:00 committed by GitHub
parent dbc59cfe61
commit 893b50031d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -1,3 +1,4 @@
# coding: utf-8
# frozen_string_literal: true
require 'current_user'
require 'canonical_url'
@ -62,7 +63,8 @@ module ApplicationHelper
if GlobalSetting.use_s3? && GlobalSetting.s3_cdn_url
if GlobalSetting.cdn_url
path = path.gsub(GlobalSetting.cdn_url, GlobalSetting.s3_cdn_url)
folder = ActionController::Base.config.relative_url_root || "/"
path = path.gsub(File.join(GlobalSetting.cdn_url, folder, "/"), File.join(GlobalSetting.s3_cdn_url, "/"))
else
# we must remove the subfolder path here, assets are uploaded to s3
# without it getting involved

View File

@ -1,3 +1,4 @@
# coding: utf-8
# frozen_string_literal: true
require 'rails_helper'
@ -32,6 +33,13 @@ describe ApplicationHelper do
expect(helper.preload_script("application")).to include('https://s3cdn.com/assets/application.js')
end
it "replaces cdn URLs with s3 cdn subfolder paths" do
global_setting :s3_cdn_url, 'https://s3cdn.com/s3_subpath'
set_cdn_url "https://awesome.com"
ActionController::Base.config.relative_url_root = "/community"
expect(helper.preload_script("application")).to include('https://s3cdn.com/s3_subpath/assets/application.js')
end
it "returns magic brotli mangling for brotli requests" do
helper.request.env["HTTP_ACCEPT_ENCODING"] = 'br'