[MM-22648] basic auth external sites (#1295)
* fix not using babel * wip * added tests, moved to map, polifill-like to convert between object and map * basic structure setup * working, found new bug * change buttons * fix login issue * remove logging code * address CR comments * remove custom function in favor of airbnb shim * fix linting * fix PM requested changes * [MM-25323] fix basic auth cancelling * fix crash when multiple request were made * address UX comments, added external link for user convenience
This commit is contained in:
99
test/specs/main/trusted_origins_test.js
Normal file
99
test/specs/main/trusted_origins_test.js
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
'use strict';
|
||||
|
||||
import assert from 'assert';
|
||||
import 'airbnb-js-shims/target/es2015';
|
||||
|
||||
import TrustedOriginsStore from '../../../src/main/trustedOrigins.js';
|
||||
import {BASIC_AUTH_PERMISSION} from '../../../src/common/permissions.js';
|
||||
|
||||
function mockTOS(fileName, returnvalue) {
|
||||
const tos = new TrustedOriginsStore(fileName);
|
||||
tos.readFromFile = () => {
|
||||
return returnvalue;
|
||||
};
|
||||
return tos;
|
||||
}
|
||||
|
||||
describe('Trusted Origins', () => {
|
||||
describe('validate load', () => {
|
||||
it('should be empty if there is no file', () => {
|
||||
const tos = mockTOS('emptyfile', null);
|
||||
tos.load();
|
||||
assert.deepEqual(tos.data.size, 0);
|
||||
});
|
||||
|
||||
it('should throw an error if data isn\'t an object', () => {
|
||||
const tos = mockTOS('notobject', 'this is not my object!');
|
||||
|
||||
assert.throws(tos.load, SyntaxError);
|
||||
});
|
||||
|
||||
it('should throw an error if data isn\'t in the expected format', () => {
|
||||
const tos = mockTOS('badobject', '{"https://mattermost.com": "this is not my object!"}');
|
||||
assert.throws(tos.load, /^Error: Provided TrustedOrigins file does not validate, using defaults instead\.$/);
|
||||
});
|
||||
|
||||
it('should drop keys that aren\'t urls', () => {
|
||||
const tos = mockTOS('badobject2', `{"this is not an uri": {"${BASIC_AUTH_PERMISSION}": true}}`);
|
||||
tos.load();
|
||||
assert.equal(typeof tos.data['this is not an uri'], 'undefined');
|
||||
});
|
||||
|
||||
it('should contain valid data if everything goes right', () => {
|
||||
const value = {
|
||||
'https://mattermost.com': {
|
||||
[BASIC_AUTH_PERMISSION]: true,
|
||||
}};
|
||||
const tos = mockTOS('okfile', JSON.stringify(value));
|
||||
tos.load();
|
||||
assert.deepEqual(Object.fromEntries(tos.data.entries()), value);
|
||||
});
|
||||
});
|
||||
describe('validate testing permissions', () => {
|
||||
const value = {
|
||||
'https://mattermost.com': {
|
||||
[BASIC_AUTH_PERMISSION]: true,
|
||||
},
|
||||
'https://notmattermost.com': {
|
||||
[BASIC_AUTH_PERMISSION]: false,
|
||||
},
|
||||
};
|
||||
const tos = mockTOS('permission_test', JSON.stringify(value));
|
||||
tos.load();
|
||||
it('tos should contain 2 elements', () => {
|
||||
assert.equal(tos.data.size, 2);
|
||||
});
|
||||
it('should say ok if the permission is set', () => {
|
||||
assert.equal(tos.checkPermission('https://mattermost.com', BASIC_AUTH_PERMISSION), true);
|
||||
});
|
||||
it('should say ko if the permission is set to false', () => {
|
||||
assert.equal(tos.checkPermission('https://notmattermost.com', BASIC_AUTH_PERMISSION), false);
|
||||
});
|
||||
it('should say ko if the uri is not set', () => {
|
||||
assert.equal(tos.checkPermission('https://undefined.com', BASIC_AUTH_PERMISSION), null);
|
||||
});
|
||||
it('should say null if the permission is unknown', () => {
|
||||
assert.equal(tos.checkPermission('https://mattermost.com'), null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('validate deleting permissions', () => {
|
||||
const value = {
|
||||
'https://mattermost.com': {
|
||||
[BASIC_AUTH_PERMISSION]: true,
|
||||
},
|
||||
'https://notmattermost.com': {
|
||||
[BASIC_AUTH_PERMISSION]: false,
|
||||
},
|
||||
};
|
||||
const tos = mockTOS('permission_test', JSON.stringify(value));
|
||||
tos.load();
|
||||
it('deleting revokes access', () => {
|
||||
assert.equal(tos.checkPermission('https://mattermost.com', BASIC_AUTH_PERMISSION), true);
|
||||
tos.delete('https://mattermost.com');
|
||||
assert.equal(tos.checkPermission('https://mattermost.com', BASIC_AUTH_PERMISSION), null);
|
||||
});
|
||||
});
|
||||
});
|
@@ -92,4 +92,16 @@ describe('Utils', () => {
|
||||
assert.equal(Utils.isInternalURL(targetURL, currentURL, basename), true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getHost', () => {
|
||||
it('should return the origin of a well formed url', () => {
|
||||
const myurl = 'https://mattermost.com/download';
|
||||
assert.equal(Utils.getHost(myurl), 'https://mattermost.com');
|
||||
});
|
||||
|
||||
it('shoud raise an error on malformed urls', () => {
|
||||
const myurl = 'http://example.com:-80/';
|
||||
assert.throws(() => Utils.getHost(myurl), Error);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user