StringArrayCallsWrapperNodeTemplate.spec.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import * as format from 'string-template';
  2. import { assert } from 'chai';
  3. import { ServiceIdentifiers } from '../../../../../src/container/ServiceIdentifiers';
  4. import { ICryptUtils } from '../../../../../src/interfaces/utils/ICryptUtils';
  5. import { IInversifyContainerFacade } from '../../../../../src/interfaces/container/IInversifyContainerFacade';
  6. import { AtobTemplate } from '../../../../../src/templates/AtobTemplate';
  7. import { GlobalVariableTemplate1 } from '../../../../../src/templates/GlobalVariableTemplate1';
  8. import { Rc4Template } from '../../../../../src/templates/Rc4Template';
  9. import { StringArrayBase64DecodeNodeTemplate } from '../../../../../src/templates/string-array-nodes/string-array-calls-wrapper/StringArrayBase64DecodeNodeTemplate';
  10. import { StringArrayCallsWrapperTemplate } from '../../../../../src/templates/string-array-nodes/string-array-calls-wrapper/StringArrayCallsWrapperTemplate';
  11. import { StringArrayRc4DecodeNodeTemplate } from '../../../../../src/templates/string-array-nodes/string-array-calls-wrapper/StringArrayRC4DecodeNodeTemplate';
  12. import { InversifyContainerFacade } from '../../../../../src/container/InversifyContainerFacade';
  13. describe('StringArrayCallsWrapperNodeTemplate (): string', () => {
  14. const stringArrayName: string = 'stringArrayName';
  15. const stringArrayCallsWrapperName: string = 'stringArrayCallsWrapperName';
  16. let cryptUtils: ICryptUtils;
  17. before(() => {
  18. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  19. inversifyContainerFacade.load('', {});
  20. cryptUtils = inversifyContainerFacade.get<ICryptUtils>(ServiceIdentifiers.ICryptUtils);
  21. });
  22. describe('variant #1: `base64` encoding', () => {
  23. const atobPolyfill = format(AtobTemplate(), {
  24. globalVariableTemplate: GlobalVariableTemplate1()
  25. });
  26. const atobDecodeNodeTemplate: string = format(StringArrayBase64DecodeNodeTemplate(), {
  27. atobPolyfill,
  28. selfDefendingCode: '',
  29. stringArrayCallsWrapperName
  30. });
  31. const index: string = '0x0';
  32. const expectedDecodedValue: string = 'test1';
  33. let decodedValue: string;
  34. before(() => {
  35. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), {
  36. decodeNodeTemplate: atobDecodeNodeTemplate,
  37. stringArrayCallsWrapperName,
  38. stringArrayName
  39. });
  40. decodedValue = Function(`
  41. var ${stringArrayName} = ['${cryptUtils.btoa('test1')}'];
  42. ${stringArrayCallsWrapperTemplate}
  43. return ${stringArrayCallsWrapperName}(${index});
  44. `)();
  45. });
  46. it('should correctly return decoded value', () => {
  47. assert.deepEqual(decodedValue, expectedDecodedValue);
  48. });
  49. });
  50. describe('variant #2: `rc4` encoding', () => {
  51. const atobPolyfill = format(AtobTemplate(), {
  52. globalVariableTemplate: GlobalVariableTemplate1()
  53. });
  54. const rc4DecodeNodeTemplate: string = format(StringArrayRc4DecodeNodeTemplate(), {
  55. atobPolyfill,
  56. rc4Polyfill: Rc4Template(),
  57. selfDefendingCode: '',
  58. stringArrayCallsWrapperName
  59. });
  60. const index: string = '0x0';
  61. const key: string = 'key';
  62. const expectedDecodedValue: string = 'test1';
  63. let decodedValue: string;
  64. before(() => {
  65. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), {
  66. decodeNodeTemplate: rc4DecodeNodeTemplate,
  67. stringArrayCallsWrapperName,
  68. stringArrayName
  69. });
  70. decodedValue = Function(`
  71. var ${stringArrayName} = ['${cryptUtils.btoa(cryptUtils.rc4('test1', key))}'];
  72. ${stringArrayCallsWrapperTemplate}
  73. return ${stringArrayCallsWrapperName}('${index}', '${key}');
  74. `)();
  75. });
  76. it('should correctly return decoded value', () => {
  77. assert.deepEqual(decodedValue, expectedDecodedValue);
  78. });
  79. });
  80. });