SelfDefendingUnicodeNode.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { injectable, inject } from 'inversify';
  2. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  3. import * as format from 'string-template';
  4. import { IOptions } from '../../interfaces/options/IOptions';
  5. import { initializable } from '../../decorators/Initializable';
  6. import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset';
  7. import { SelfDefendingTemplate } from '../../templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate';
  8. import { AbstractCustomNode } from '../AbstractCustomNode';
  9. import { JavaScriptObfuscator } from '../../JavaScriptObfuscator';
  10. import { Utils } from '../../Utils';
  11. @injectable()
  12. export class SelfDefendingUnicodeNode extends AbstractCustomNode {
  13. /**
  14. * @type {string}
  15. */
  16. @initializable()
  17. protected callsControllerFunctionName: string;
  18. /**
  19. * @param options
  20. */
  21. constructor (
  22. @inject(ServiceIdentifiers.IOptions) options: IOptions
  23. ) {
  24. super(options);
  25. }
  26. /**
  27. * @param callsControllerFunctionName
  28. */
  29. public initialize (callsControllerFunctionName: string): void {
  30. this.callsControllerFunctionName = callsControllerFunctionName;
  31. }
  32. /**
  33. * @returns {string}
  34. */
  35. public getCode (): string {
  36. return JavaScriptObfuscator.obfuscate(
  37. format(SelfDefendingTemplate(), {
  38. selfDefendingFunctionName: Utils.getRandomVariableName(),
  39. singleNodeCallControllerFunctionName: this.callsControllerFunctionName
  40. }),
  41. Object.assign({}, NO_CUSTOM_NODES_PRESET, {
  42. seed: this.options.seed
  43. })
  44. ).getObfuscatedCode();
  45. }
  46. }