FIX: Subfolder replace should only affect URL prefix (#12135)

* FIX: Subfolder replace should only affect URL prefix

Issue was reported in https://meta.discourse.org/t/-/179504

* DEV: Test subfolder handling in get-url when called twice on the same path
This commit is contained in:
Rafael dos Santos Silva 2021-02-19 16:06:18 -03:00 committed by GitHub
parent b22ea7911c
commit 5117f0a3e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 3 deletions

View File

@ -1,9 +1,10 @@
let cdn, baseUrl, baseUri;
let cdn, baseUrl, baseUri, baseUriMatcher;
let S3BaseUrl, S3CDN;
export default function getURL(url) {
if (baseUri === undefined) {
baseUri = $('meta[name="discourse-base-uri"]').attr("content") || "";
baseUriMatcher = new RegExp(`^${baseUri}`);
}
if (!url) {
@ -47,18 +48,23 @@ export function isAbsoluteURL(url) {
}
export function withoutPrefix(path) {
const rootURL = (!baseUri ? "/" : baseUri).replace(/\/$/, "");
return path.replace(rootURL, "");
if (!baseUri) {
return path;
} else {
return path.replace(baseUriMatcher, "");
}
}
export function setPrefix(configBaseUri) {
baseUri = configBaseUri;
baseUriMatcher = new RegExp(`^${baseUri}`);
}
export function setupURL(configCdn, configBaseUrl, configBaseUri) {
cdn = configCdn;
baseUrl = configBaseUrl;
baseUri = configBaseUri;
baseUriMatcher = new RegExp(`^${baseUri}`);
}
export function setupS3CDN(configS3BaseUrl, configS3CDN) {

View File

@ -39,6 +39,43 @@ module("Unit | Utility | get-url", function () {
assert.equal(withoutPrefix("/"), "/");
});
test("withoutPrefix called multiple times on the same path", function (assert) {
setPrefix("/eviltrout");
assert.equal(withoutPrefix(withoutPrefix("/eviltrout/hello")), "/hello");
assert.equal(withoutPrefix(withoutPrefix("/eviltrout/")), "/");
assert.equal(withoutPrefix(withoutPrefix("/eviltrout")), "");
setPrefix("");
assert.equal(
withoutPrefix(withoutPrefix("/eviltrout/hello")),
"/eviltrout/hello"
);
assert.equal(withoutPrefix(withoutPrefix("/eviltrout")), "/eviltrout");
assert.equal(withoutPrefix(withoutPrefix("/")), "/");
setPrefix(null);
assert.equal(
withoutPrefix(withoutPrefix("/eviltrout/hello")),
"/eviltrout/hello"
);
assert.equal(withoutPrefix(withoutPrefix("/eviltrout")), "/eviltrout");
assert.equal(withoutPrefix(withoutPrefix("/")), "/");
setPrefix("/f");
assert.equal(
withoutPrefix(withoutPrefix("/f/t/falco-says-hello")),
"/t/falco-says-hello"
);
assert.equal(
withoutPrefix(withoutPrefix("/f/tag/fast-chain-food")),
"/tag/fast-chain-food"
);
assert.equal(
withoutPrefix(withoutPrefix("/f/u/falco/summary")),
"/u/falco/summary"
);
});
test("getURL with empty paths", function (assert) {
setupURL(null, "https://example.com", "/");
assert.equal(getURL("/"), "/");