passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
63 lines (52 loc) • 2.94 kB
JavaScript
import sanitizeUrl, {urlProtocols} from "./sanitizeUrl";
describe("Sanitize URL checks", () => {
it("Baseline checks", () => {
expect(sanitizeUrl()).toBe(false);
expect(sanitizeUrl('')).toBe(false);
expect(sanitizeUrl(null)).toBe(false);
expect(sanitizeUrl(undefined)).toBe(false);
expect(sanitizeUrl({})).toBe(false);
expect(sanitizeUrl(1)).toBe(false);
expect(sanitizeUrl('/home')).toBe(false);
expect(sanitizeUrl('./home')).toBe(false);
expect(sanitizeUrl('../home')).toBe(false);
expect(sanitizeUrl('~/home')).toBe(false);
expect(sanitizeUrl('\home')).toBe(false);
expect(sanitizeUrl('\\home')).toBe(false);
expect(sanitizeUrl('localhost/test')).toBe(false);
expect(sanitizeUrl('passbolt.com')).toBe(false);
expect(sanitizeUrl('127.0.0.1')).toBe(false);
expect(sanitizeUrl('[::1]')).toBe(false);
expect(sanitizeUrl('javascript:alert(1)')).toBe(false);
expect(sanitizeUrl('ssh://localhost')).toBe(false);
expect(sanitizeUrl('ftp://localhost')).toBe(false);
expect(sanitizeUrl('http://localhost')).not.toBe(false);
expect(sanitizeUrl('https://localhost')).not.toBe(false);
expect(sanitizeUrl('https://1.1.1.1')).not.toBe(false);
expect(sanitizeUrl('https://[::1]')).not.toBe(false);
expect(sanitizeUrl('https://passbolt.com')).not.toBe(false);
expect(sanitizeUrl('https://www.passbolt.com')).not.toBe(false);
expect(sanitizeUrl('https://www.passbolt.com/test')).not.toBe(false);
});
it("White listed protocols option", () => {
const whitelistedProtocols = ['ssh:', 'ftp:', 'javascript:'];
expect(sanitizeUrl('javascript:alert(1)', {whitelistedProtocols})).toBe(false);
expect(sanitizeUrl('ssh://localhost', {whitelistedProtocols})).not.toBe(false);
expect(sanitizeUrl('ftp://localhost', {whitelistedProtocols})).not.toBe(false);
expect(sanitizeUrl('http://passbolt.com', {whitelistedProtocols})).toBe(false);
expect(sanitizeUrl('https://passbolt.com', {whitelistedProtocols})).toBe(false);
});
it("Default protocol option", () => {
const defaultProtocol = urlProtocols.HTTPS;
expect(sanitizeUrl('/home', {defaultProtocol})).toBe('https://home/');
expect(sanitizeUrl('./home', {defaultProtocol})).toBe('https://./home');
expect(sanitizeUrl('../home', {defaultProtocol})).toBe('https://../home');
expect(sanitizeUrl('~/home', {defaultProtocol})).toBe('https://~/home');
expect(sanitizeUrl('\home', {defaultProtocol})).toBe('https://home/');
expect(sanitizeUrl('\\home', {defaultProtocol})).toBe('https://home/');
expect(sanitizeUrl('localhost/test', {defaultProtocol})).toBe('https://localhost/test');
expect(sanitizeUrl('127.0.0.1', {defaultProtocol})).toBe('https://127.0.0.1/');
expect(sanitizeUrl('[::1]', {defaultProtocol})).toBe('https://[::1]/');
expect(sanitizeUrl('http://127.0.0.1', {defaultProtocol})).toBe('http://127.0.0.1/');
});
});