DomainLockNodeTemplate.spec.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. import 'reflect-metadata';
  2. import format from 'string-template';
  3. import { assert } from 'chai';
  4. import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
  5. import { ICryptUtils } from '../../../../src/interfaces/utils/ICryptUtils';
  6. import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
  7. import { DomainLockNodeTemplate } from '../../../../src/templates/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate';
  8. import { GlobalVariableTemplate1 } from '../../../../src/templates/GlobalVariableTemplate1';
  9. import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
  10. /**
  11. * @param templateData
  12. * @param callsControllerFunctionName
  13. * @param currentDomain
  14. * @returns {Function}
  15. */
  16. function getFunctionFromTemplate (templateData: any, callsControllerFunctionName: string, currentDomain: string) {
  17. const domainLockTemplate: string = format(DomainLockNodeTemplate(), templateData);
  18. return Function(`
  19. document = {
  20. domain: '${currentDomain}'
  21. };
  22. var ${callsControllerFunctionName} = (function(){
  23. return function (context, fn){
  24. return function () {
  25. return fn.apply(context, arguments);
  26. };
  27. }
  28. })();
  29. ${domainLockTemplate}
  30. `)();
  31. }
  32. describe('DomainLockNodeTemplate', () => {
  33. const singleNodeCallControllerFunctionName: string = 'callsController';
  34. let cryptUtils: ICryptUtils;
  35. before(() => {
  36. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  37. inversifyContainerFacade.load('', {});
  38. cryptUtils = inversifyContainerFacade.get<ICryptUtils>(ServiceIdentifiers.ICryptUtils);
  39. });
  40. describe('Variant #1: current domain matches with `domainsString`', () => {
  41. const domainsString: string = ['www.example.com'].join(';');
  42. const currentDomain: string = 'www.example.com';
  43. let testFunc: () => void;
  44. before(() => {
  45. const [
  46. hiddenDomainsString,
  47. diff
  48. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  49. testFunc = () => getFunctionFromTemplate({
  50. domainLockFunctionName: 'domainLockFunction',
  51. diff: diff,
  52. domains: hiddenDomainsString,
  53. globalVariableTemplate: GlobalVariableTemplate1(),
  54. singleNodeCallControllerFunctionName
  55. }, singleNodeCallControllerFunctionName, currentDomain);
  56. });
  57. it('should correctly run code inside template', () => {
  58. assert.doesNotThrow(testFunc);
  59. });
  60. });
  61. describe('Variant #2: current domain matches with base domain of `domainsString`', () => {
  62. const domainsString: string = ['.example.com'].join(';');
  63. const currentDomain: string = 'www.example.com';
  64. let testFunc: () => void;
  65. before(() => {
  66. const [
  67. hiddenDomainsString,
  68. diff
  69. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  70. testFunc = () => getFunctionFromTemplate({
  71. domainLockFunctionName: 'domainLockFunction',
  72. diff: diff,
  73. domains: hiddenDomainsString,
  74. globalVariableTemplate: GlobalVariableTemplate1(),
  75. singleNodeCallControllerFunctionName
  76. }, singleNodeCallControllerFunctionName, currentDomain);
  77. });
  78. it('should correctly run code inside template', () => {
  79. assert.doesNotThrow(testFunc);
  80. });
  81. });
  82. describe('Variant #3: current domain matches with all domains of `domainsString`', () => {
  83. describe('Variant #1', () => {
  84. const domainsString: string = ['example.com', '.example.com'].join(';');
  85. const currentDomain: string = 'example.com';
  86. let testFunc: () => void;
  87. before(() => {
  88. const [
  89. hiddenDomainsString,
  90. diff
  91. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  92. testFunc = () => getFunctionFromTemplate({
  93. domainLockFunctionName: 'domainLockFunction',
  94. diff: diff,
  95. domains: hiddenDomainsString,
  96. globalVariableTemplate: GlobalVariableTemplate1(),
  97. singleNodeCallControllerFunctionName
  98. }, singleNodeCallControllerFunctionName, currentDomain);
  99. });
  100. it('should correctly run code inside template', () => {
  101. assert.doesNotThrow(testFunc);
  102. });
  103. });
  104. describe('Variant #2', () => {
  105. const domainsString: string = ['example.com', '.example.com'].join(';');
  106. const currentDomain: string = 'subdomain.example.com';
  107. let testFunc: () => void;
  108. before(() => {
  109. const [
  110. hiddenDomainsString,
  111. diff
  112. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  113. testFunc = () => getFunctionFromTemplate({
  114. domainLockFunctionName: 'domainLockFunction',
  115. diff: diff,
  116. domains: hiddenDomainsString,
  117. globalVariableTemplate: GlobalVariableTemplate1(),
  118. singleNodeCallControllerFunctionName
  119. }, singleNodeCallControllerFunctionName, currentDomain);
  120. });
  121. it('should correctly run code inside template', () => {
  122. assert.doesNotThrow(testFunc);
  123. });
  124. });
  125. describe('Variant #3', () => {
  126. const domainsString: string = ['.example.com', 'example.com'].join(';');
  127. const currentDomain: string = 'subdomain.example.com';
  128. let testFunc: () => void;
  129. before(() => {
  130. const [
  131. hiddenDomainsString,
  132. diff
  133. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  134. testFunc = () => getFunctionFromTemplate({
  135. domainLockFunctionName: 'domainLockFunction',
  136. diff: diff,
  137. domains: hiddenDomainsString,
  138. globalVariableTemplate: GlobalVariableTemplate1(),
  139. singleNodeCallControllerFunctionName
  140. }, singleNodeCallControllerFunctionName, currentDomain);
  141. });
  142. it('should correctly run code inside template', () => {
  143. assert.doesNotThrow(testFunc);
  144. });
  145. });
  146. describe('Variant #4', () => {
  147. const domainsString: string = ['sub1.example.com', 'sub2.example.com'].join(';');
  148. const currentDomain: string = 'sub1.example.com';
  149. let testFunc: () => void;
  150. before(() => {
  151. const [
  152. hiddenDomainsString,
  153. diff
  154. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  155. testFunc = () => getFunctionFromTemplate({
  156. domainLockFunctionName: 'domainLockFunction',
  157. diff: diff,
  158. domains: hiddenDomainsString,
  159. globalVariableTemplate: GlobalVariableTemplate1(),
  160. singleNodeCallControllerFunctionName
  161. }, singleNodeCallControllerFunctionName, currentDomain);
  162. });
  163. it('should correctly run code inside template', () => {
  164. assert.doesNotThrow(testFunc);
  165. });
  166. });
  167. });
  168. describe('Variant #4: current domain matches with base domain of `domainsString` item', () => {
  169. const domainsString: string = ['www.test.com', '.example.com'].join(';');
  170. const currentDomain: string = 'subdomain.example.com';
  171. let testFunc: () => void;
  172. before(() => {
  173. const [
  174. hiddenDomainsString,
  175. diff
  176. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  177. testFunc = () => getFunctionFromTemplate({
  178. domainLockFunctionName: 'domainLockFunction',
  179. diff: diff,
  180. domains: hiddenDomainsString,
  181. globalVariableTemplate: GlobalVariableTemplate1(),
  182. singleNodeCallControllerFunctionName
  183. }, singleNodeCallControllerFunctionName, currentDomain);
  184. });
  185. it('should correctly run code inside template', () => {
  186. assert.doesNotThrow(testFunc);
  187. });
  188. });
  189. describe('Variant #5: current domain doesn\'t match with `domainsString`', () => {
  190. describe('Variant #1', () => {
  191. const domainsString: string = ['www.example.com'].join(';');
  192. const currentDomain: string = 'www.test.com';
  193. let testFunc: () => void;
  194. before(() => {
  195. const [
  196. hiddenDomainsString,
  197. diff
  198. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  199. testFunc = () => getFunctionFromTemplate({
  200. domainLockFunctionName: 'domainLockFunction',
  201. diff: diff,
  202. domains: hiddenDomainsString,
  203. globalVariableTemplate: GlobalVariableTemplate1(),
  204. singleNodeCallControllerFunctionName
  205. }, singleNodeCallControllerFunctionName, currentDomain);
  206. });
  207. it('should throw an error', () => {
  208. assert.throws(testFunc);
  209. });
  210. });
  211. describe('Variant #2', () => {
  212. const domainsString: string = ['sub1.test.com', 'sub2.test.com'].join(';');
  213. const currentDomain: string = 'sub3.test.com';
  214. let testFunc: () => void;
  215. before(() => {
  216. const [
  217. hiddenDomainsString,
  218. diff
  219. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  220. testFunc = () => getFunctionFromTemplate({
  221. domainLockFunctionName: 'domainLockFunction',
  222. diff: diff,
  223. domains: hiddenDomainsString,
  224. globalVariableTemplate: GlobalVariableTemplate1(),
  225. singleNodeCallControllerFunctionName
  226. }, singleNodeCallControllerFunctionName, currentDomain);
  227. });
  228. it('should throw an error', () => {
  229. assert.throws(testFunc);
  230. });
  231. });
  232. describe('Variant #3', () => {
  233. const domainsString: string = ['www.example.com', '.example.com', 'sub.test.com'].join(';');
  234. const currentDomain: string = 'www.test.com';
  235. let testFunc: () => void;
  236. before(() => {
  237. const [
  238. hiddenDomainsString,
  239. diff
  240. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  241. testFunc = () => getFunctionFromTemplate({
  242. domainLockFunctionName: 'domainLockFunction',
  243. diff: diff,
  244. domains: hiddenDomainsString,
  245. globalVariableTemplate: GlobalVariableTemplate1(),
  246. singleNodeCallControllerFunctionName
  247. }, singleNodeCallControllerFunctionName, currentDomain);
  248. });
  249. it('should throw an error', () => {
  250. assert.throws(testFunc);
  251. });
  252. });
  253. });
  254. });