|
@@ -13,53 +13,11 @@ import { IObfuscationResult } from '../../../../../src/interfaces/source-code/IO
|
|
|
import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
|
|
|
|
|
|
import { DomainLockTemplate } from '../../../../../src/custom-code-helpers/domain-lock/templates/DomainLockTemplate';
|
|
|
-import { GlobalVariableTemplate1 } from '../../../../../src/custom-code-helpers/common/templates/GlobalVariableTemplate1';
|
|
|
|
|
|
import { InversifyContainerFacade } from '../../../../../src/container/InversifyContainerFacade';
|
|
|
import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
|
|
|
import { readFileAsString } from '../../../../helpers/readFileAsString';
|
|
|
|
|
|
-/**
|
|
|
- * @param {string} currentDomain
|
|
|
- * @returns {string}
|
|
|
- */
|
|
|
-function getDocumentDomainTemplate (currentDomain: string): string {
|
|
|
- return `
|
|
|
- document = {
|
|
|
- domain: '${currentDomain}'
|
|
|
- };
|
|
|
- `
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * @param {string} currentDomain
|
|
|
- * @returns {string}
|
|
|
- */
|
|
|
-function getDocumentLocationTemplate (currentDomain: string): string {
|
|
|
- return `
|
|
|
- document = {
|
|
|
- location: {
|
|
|
- hostname: '${currentDomain}'
|
|
|
- }
|
|
|
- };
|
|
|
- `
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * @param {string} currentDomain
|
|
|
- * @returns {string}
|
|
|
- */
|
|
|
-function getDocumentDomainAndLocationTemplate (currentDomain: string): string {
|
|
|
- return `
|
|
|
- document = {
|
|
|
- domain: '${currentDomain}',
|
|
|
- location: {
|
|
|
- hostname: '${currentDomain}'
|
|
|
- }
|
|
|
- };
|
|
|
- `
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* @param templateData
|
|
|
* @param {string} callsControllerFunctionName
|
|
@@ -85,11 +43,12 @@ function getFunctionFromTemplate (
|
|
|
})();
|
|
|
|
|
|
${domainLockTemplate}
|
|
|
- `)();
|
|
|
+ `);
|
|
|
}
|
|
|
|
|
|
describe('DomainLockTemplate', () => {
|
|
|
const singleCallControllerFunctionName: string = 'callsController';
|
|
|
+ const thatThisTemplate = 'const that = this;';
|
|
|
|
|
|
let cryptUtils: ICryptUtils;
|
|
|
|
|
@@ -102,393 +61,614 @@ describe('DomainLockTemplate', () => {
|
|
|
|
|
|
describe('Variant #1: current domain matches with `domainsString`', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'www.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #2: current domain matches with base domain of `domainsString`', () => {
|
|
|
const domainsString: string = ['.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'www.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #3: current domain matches with root domain of `domainsString`', () => {
|
|
|
const domainsString: string = ['.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #4: current root domain matches with `domainsString`', () => {
|
|
|
describe('Variant #1', () => {
|
|
|
const domainsString: string = ['example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #2', () => {
|
|
|
const domainsString: string = ['example.com', '.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'subdomain.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #3', () => {
|
|
|
const domainsString: string = ['.example.com', 'example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'subdomain.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #4', () => {
|
|
|
const domainsString: string = ['sub1.example.com', 'sub2.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'sub1.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #5: current domain matches with base domain of `domainsString` item', () => {
|
|
|
const domainsString: string = ['www.test.com', '.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'subdomain.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isUndefined(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #6: current domain doesn\'t match with `domainsString`', () => {
|
|
|
describe('Variant #1', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'www.test.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #2', () => {
|
|
|
const domainsString: string = ['sub1.test.com', 'sub2.test.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'sub3.test.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate({
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate({
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #3', () => {
|
|
|
const domainsString: string = ['www.example.com', '.example.com', 'sub.test.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'www.test.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #4', () => {
|
|
|
const domainsString: string = ['.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'example1.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- describe('Variant #4', () => {
|
|
|
+ describe('Variant #5', () => {
|
|
|
const domainsString: string = ['example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentDomain: string = 'sub.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentDomain,
|
|
|
+ location: undefined,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainTemplate(currentDomain)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
});
|
|
@@ -496,61 +676,97 @@ describe('DomainLockTemplate', () => {
|
|
|
describe('Variant #7: location.hostname', () => {
|
|
|
describe('Variant #1: current location.hostname matches with `domainsString`', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentHostName: string = 'www.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ location: {
|
|
|
+ hostname: currentHostName,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentLocationTemplate(currentHostName)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isObject(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #2: current location.hostname doesn\'t match with `domainsString`', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentHostName: string = 'www.test.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ location: {
|
|
|
+ hostname: currentHostName,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentLocationTemplate(currentHostName)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
});
|
|
@@ -558,61 +774,99 @@ describe('DomainLockTemplate', () => {
|
|
|
describe('Variant #8: domain and location.hostname presented', () => {
|
|
|
describe('Variant #1: current domain matches with `domainsString`', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentHostName: string = 'www.example.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentHostName,
|
|
|
+ location: {
|
|
|
+ hostname: currentHostName,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainAndLocationTemplate(currentHostName)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
it('should correctly run code inside template', () => {
|
|
|
- assert.doesNotThrow(testFunc);
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.isObject(root.document.location);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
describe('Variant #2: current domain doesn\'t match with `domainsString`', () => {
|
|
|
const domainsString: string = ['www.example.com'].join(';');
|
|
|
+ const domainDest: string = 'about:blank';
|
|
|
const currentHostName: string = 'www.test.com';
|
|
|
|
|
|
- let testFunc: () => void;
|
|
|
+ let testFunc: Function;
|
|
|
+ let root: any;
|
|
|
|
|
|
before(() => {
|
|
|
const [
|
|
|
hiddenDomainsString,
|
|
|
- diff
|
|
|
+ domainsStringDiff
|
|
|
] = cryptUtils.hideString(domainsString, domainsString.length * 3);
|
|
|
|
|
|
- testFunc = () => getFunctionFromTemplate(
|
|
|
+ const [
|
|
|
+ hiddenDomainDest,
|
|
|
+ domainDestDiff
|
|
|
+ ] = cryptUtils.hideString(domainDest, domainDest.length * 3);
|
|
|
+
|
|
|
+ root = {
|
|
|
+ document: {
|
|
|
+ domain: currentHostName,
|
|
|
+ location: {
|
|
|
+ hostname: currentHostName,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ testFunc = getFunctionFromTemplate(
|
|
|
{
|
|
|
domainLockFunctionName: 'domainLockFunction',
|
|
|
- diff: diff,
|
|
|
+ domainsStringDiff,
|
|
|
domains: hiddenDomainsString,
|
|
|
- globalVariableTemplate: GlobalVariableTemplate1(),
|
|
|
+ domainDestDiff,
|
|
|
+ domainDest: hiddenDomainDest,
|
|
|
+ globalVariableTemplate: '',
|
|
|
singleCallControllerFunctionName
|
|
|
},
|
|
|
singleCallControllerFunctionName,
|
|
|
- getDocumentDomainAndLocationTemplate(currentHostName)
|
|
|
+ thatThisTemplate
|
|
|
);
|
|
|
});
|
|
|
|
|
|
- it('should throw an error', () => {
|
|
|
- assert.throws(testFunc);
|
|
|
+ it('should change document.location', () => {
|
|
|
+ assert.doesNotThrow(() => testFunc.apply(root));
|
|
|
+ assert.equal(root.document.location, domainDest);
|
|
|
});
|
|
|
});
|
|
|
});
|