Protocol filter: Support home path mapped to UNC share

Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
automated-signal 2022-01-06 11:23:44 -08:00 committed by GitHub
parent bbbbd8137a
commit fa54e8a61e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

View File

@ -29,7 +29,13 @@ export function _urlToPath(
options?: { isWindows: boolean }
): string {
const decoded = decodeURIComponent(targetUrl);
const withoutScheme = decoded.slice(options?.isWindows ? 8 : 7);
// We generally expect URLs to start with file:// or file:/// here, but for users with
// their home directory redirected to a UNC share, it will start with //.
const withoutScheme = decoded.startsWith('//')
? decoded
: decoded.slice(options?.isWindows ? 8 : 7);
const withoutQuerystring = _eliminateAllAfterCharacter(withoutScheme, '?');
const withoutHash = _eliminateAllAfterCharacter(withoutQuerystring, '#');

View File

@ -67,8 +67,24 @@ describe('Protocol Filter', () => {
expect(actual).to.equal(expected);
});
// this seems to be the only way to get a relative path through Electron
it('handles SMB share path', () => {
it('handles UNC path', () => {
const path = '//share/path';
const expected = '//share/path';
const actual = _urlToPath(path);
expect(actual).to.equal(expected);
});
it('handles UNC path on windows', () => {
const path = '//share/path';
const expected = '//share/path';
const isWindows = true;
const actual = _urlToPath(path, { isWindows });
expect(actual).to.equal(expected);
});
it('handles simple relative path', () => {
const path = 'file://relative/path';
const expected = 'relative/path';
@ -76,7 +92,7 @@ describe('Protocol Filter', () => {
expect(actual).to.equal(expected);
});
it('handles SMB share path on windows', () => {
it('handles simple relative path', () => {
const path = 'file://relative/path';
const expected = 'elative/path';
const isWindows = true;