Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / active-x-obfuscator / index.js
1 var ZeParser = require('zeparser').ZeParser;
2 var Util     = require('util');
3
4 module.exports = ActiveXObfuscator;
5 function ActiveXObfuscator(code) {
6   if (!(this instanceof ActiveXObfuscator)) {
7     var obfuscator = new ActiveXObfuscator(code);
8     obfuscator.execute();
9     return obfuscator.toString();
10   }
11
12   this._parser = ZeParser.createParser(code);
13 }
14
15 var OBFUSCATED_ACTIVE_X_OBJECT = ActiveXObfuscator.OBFUSCATED_ACTIVE_X_OBJECT =
16   "(['Active'].concat('Object').join('X'))";
17 var OBFUSCATED_ACTIVE_X = ActiveXObfuscator.OBFUSCATED_ACTIVE_X =
18   "(['Active'].concat('').join('X'))";
19
20 ActiveXObfuscator.prototype.execute = function() {
21   this._parser.tokenizer.fixValues();
22   this._obfuscate(this.getAst());
23 };
24
25 ActiveXObfuscator.prototype.getAst = function() {
26   return this._parser.stack;
27 };
28
29 ActiveXObfuscator.prototype.getWhiteTokens = function() {
30   return this._parser.tokenizer.wtree;
31 };
32
33 ActiveXObfuscator.prototype._obfuscate = function(ast) {
34   var self = this;
35
36   ast.forEach(function(node, index) {
37     if (Array.isArray(node)) {
38       self._obfuscate(node);
39       return;
40     }
41
42     switch (node.value) {
43       case 'ActiveXObject':
44         if (!node.isPropertyName) {
45           node.value = 'window[' + OBFUSCATED_ACTIVE_X_OBJECT + ']';
46           break;
47         }
48
49         var dot = ast[index - 1]
50         var whiteTokens = self.getWhiteTokens();
51         whiteTokens[dot.tokposw].value = '';
52
53         node.value = '[' + OBFUSCATED_ACTIVE_X_OBJECT + ']';
54         break;
55       case "'ActiveXObject'":
56       case '"ActiveXObject"':
57         node.value = OBFUSCATED_ACTIVE_X_OBJECT;
58         break;
59       case "'ActiveX'":
60       case '"ActiveX"':
61         node.value = OBFUSCATED_ACTIVE_X;
62         break;
63       default:
64         if (!/ActiveX/i.test(node.value)) {
65           break;
66         }
67
68         if (!node.isComment) {
69           throw new Error('Unknown ActiveX occurence in: ' + Util.inspect(node));
70         }
71
72         node.value = node.value.replace(/ActiveX/i, 'Ac...eX');
73     }
74
75   });
76 };
77
78 ActiveXObfuscator.prototype.toString = function() {
79   var whiteTokens = this.getWhiteTokens();
80   return whiteTokens.reduce(function(output, node) {
81     return output += node.value;
82   }, '');
83 };