[MM-34836] Cleanse URLs of extra slashes on parsing, and add the image proxy case (#1560)

* [MM-34836] Cleanse URLs of extra slashes on parsing, and add the image proxy case

* Added unit tests
This commit is contained in:
Devin Binnie
2021-04-23 11:01:12 -04:00
committed by GitHub
parent 7211848cad
commit f4f64c50a9
4 changed files with 26 additions and 1 deletions

View File

@@ -40,7 +40,7 @@ function parseURL(inputURL) {
return inputURL;
}
try {
return new URL(inputURL);
return new URL(inputURL.replace(/([^:]\/)\/+/g, '$1'));
} catch (e) {
return null;
}

View File

@@ -136,6 +136,12 @@ const generateNewWindowListener = (getServersFunction, spellcheck) => {
return;
}
// Image proxy case
if (parsedURL.pathname.match(/^\/api\/v[3-4]\/image/)) {
shell.openExternal(url);
return;
}
if (parsedURL.pathname.match(/^\/help\//)) {
// Help links case
// continue to open special case internal urls in default browser

View File

@@ -2,3 +2,4 @@
// See LICENSE.txt for license information.
import './trusted_origins_test';
import './url_test';

18
test/unit/url_test.js Normal file
View File

@@ -0,0 +1,18 @@
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
'use strict';
import assert from 'assert';
import urlUtils from 'common/utils/url';
describe('URL', () => {
describe('parseURL', () => {
it('should remove duplicate slashes in a URL when parsing', () => {
const urlWithExtraSlashes = 'https://mattermost.com//sub//path//example';
const parsedURL = urlUtils.parseURL(urlWithExtraSlashes);
assert.strictEqual(parsedURL.toString(), 'https://mattermost.com/sub/path/example');
});
});
});