more improvements
This commit is contained in:
@@ -16,14 +16,35 @@ const logger = winston.createLogger({
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
exports.RuleEngine = class RuleEngine {
|
||||
constructor(ruleSetFileMask) {
|
||||
this.ruleSet = JSON.parse(fs.readFileSync('./rules/' + ruleSetFileMask + '.rule.json', 'utf8'));
|
||||
constructor(ruleSetFiles) {
|
||||
logger.log("info", "Instanciated RulesEngine - RuleSetFiles: " + ruleSetFiles);
|
||||
this.ruleSet = {};
|
||||
if (ruleSetFiles === "*") {
|
||||
fs.readdirSync("./rules/").forEach(file => {
|
||||
if (this.reTest("/.*\.rule\.json$/", file)) {
|
||||
logger.log("info", "Loading ruleset file " + file);
|
||||
let newRuleSet = JSON.parse(fs.readFileSync('./rules/' + file, 'utf8'));
|
||||
logger.log("info", "Adding ruleset " + Object.keys(newRuleSet)[0]);
|
||||
this.ruleSet[Object.keys(newRuleSet)[0]] = newRuleSet[Object.keys(newRuleSet)[0]]
|
||||
}
|
||||
});
|
||||
} else if (ruleSetFiles.indexOf(",") > 1) {
|
||||
ruleSetFiles.split(",").forEach(file => {
|
||||
logger.log("info", "Loading ruleset file " + file);
|
||||
let newRuleSet = JSON.parse(fs.readFileSync('./rules/' + file + '.rule.json', 'utf8'));
|
||||
logger.log("info", "Adding ruleset " + Object.keys(newRuleSet)[0]);
|
||||
this.ruleSet[Object.keys(newRuleSet)[0]] = newRuleSet[Object.keys(newRuleSet)[0]]
|
||||
});
|
||||
} else {
|
||||
logger.log("info", "Loading ruleset file " + ruleSetFiles);
|
||||
this.ruleSet = JSON.parse(fs.readFileSync('./rules/' + ruleSetFiles + '.rule.json', 'utf8'));
|
||||
logger.log("info", "Adding Ruleset " + Object.keys(this.ruleSet)[0]);
|
||||
}
|
||||
}
|
||||
processData(inputLine) {
|
||||
let inputData = inputLine.data;
|
||||
logger.log("debug", "ProcessingType " + inputLine.processingType + " RuleSet: " + this.ruleSet);
|
||||
logger.log("debug", "ProcessingType " + inputLine.processingType);
|
||||
let allWhiteFilterRules = this.ruleSet[inputLine.processingType].rules;
|
||||
if (this.processLogicOr(allWhiteFilterRules, inputData)) { return (true); }
|
||||
logger.log("debug", "No whitelisting matched; returning false");
|
||||
@@ -46,9 +67,9 @@ exports.RuleEngine = class RuleEngine {
|
||||
retVal = false;
|
||||
};
|
||||
} else if (theWhiteFilterRule.Logic === "&") {
|
||||
if (!this.processLogicAnd(theWhiteFilterRule.rules, inputData) && retVal === true) {
|
||||
if (!this.processLogicAnd(theWhiteFilterRule.rules, inputData) && retVal === true) {
|
||||
logger.log("debug", " Logic AND - AND - Changing Result to false");
|
||||
retVal = false;
|
||||
retVal = false;
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -59,45 +80,61 @@ exports.RuleEngine = class RuleEngine {
|
||||
logger.log("debug", "Logic OR - start");
|
||||
for (let i = 0; i < allWhiteFilterRules.length; i++) {
|
||||
let theWhiteFilterRule = allWhiteFilterRules[i];
|
||||
logger.log("debug", " Logic OR - whiteFilterRule: "+JSON.stringify(theWhiteFilterRule));
|
||||
logger.log("debug", " Logic OR - whiteFilterRule: " + JSON.stringify(theWhiteFilterRule));
|
||||
if (theWhiteFilterRule.Logic === "-") {
|
||||
if (this.processLogicFlat(theWhiteFilterRule, inputData)) {
|
||||
logger.log("debug", " Logic OR - FLAT - RETURNING OUT");
|
||||
return (true);
|
||||
};
|
||||
return (true);
|
||||
};
|
||||
} else if (theWhiteFilterRule.Logic === "|") {
|
||||
if (this.processLogicOr(theWhiteFilterRule.rules, inputData)) {
|
||||
if (this.processLogicOr(theWhiteFilterRule.rules, inputData)) {
|
||||
logger.log("debug", " Logic OR - OR - RETURNING OUT");
|
||||
return (true)
|
||||
return (true)
|
||||
};
|
||||
} else if (theWhiteFilterRule.Logic === "&") {
|
||||
if (this.processLogicAnd(theWhiteFilterRule.rules, inputData)) {
|
||||
if (this.processLogicAnd(theWhiteFilterRule.rules, inputData)) {
|
||||
logger.log("debug", " Logic OR - AND - RETURNING OUT");
|
||||
return (true)
|
||||
return (true)
|
||||
};
|
||||
}
|
||||
};
|
||||
logger.log("debug", "Logic OR - end");
|
||||
return(false);
|
||||
return (false);
|
||||
}
|
||||
processLogicFlat(theWhiteFilterRule, inputData) {
|
||||
logger.log("debug", "Logic FLAT start - whiteFilterRule: "+JSON.stringify(theWhiteFilterRule));
|
||||
logger.log("debug", "Logic FLAT start - whiteFilterRule: " + JSON.stringify(theWhiteFilterRule));
|
||||
let isKnownComp = false;
|
||||
let retVal = false;
|
||||
if (theWhiteFilterRule.Comp === "===") {
|
||||
if (inputData[theWhiteFilterRule.Field] === theWhiteFilterRule.Value) {
|
||||
logger.log("debug", "Logic FLAT - Exiting out");
|
||||
return (true);
|
||||
}
|
||||
isKnownComp = true;
|
||||
if (inputData[theWhiteFilterRule.Field] === theWhiteFilterRule.Value) {retVal = true;}
|
||||
} else if (theWhiteFilterRule.Comp === "<") {
|
||||
isKnownComp = true;
|
||||
if (inputData[theWhiteFilterRule.Field] < theWhiteFilterRule.Value) {retVal = true;}
|
||||
} else if (theWhiteFilterRule.Comp === ">") {
|
||||
isKnownComp = true;
|
||||
if (inputData[theWhiteFilterRule.Field] > theWhiteFilterRule.Value) {retVal = true;}
|
||||
} else if (theWhiteFilterRule.Comp === "<=") {
|
||||
isKnownComp = true;
|
||||
if (inputData[theWhiteFilterRule.Field] <= theWhiteFilterRule.Value) {retVal = true;}
|
||||
} else if (theWhiteFilterRule.Comp === ">=") {
|
||||
isKnownComp = true;
|
||||
if (inputData[theWhiteFilterRule.Field] >= theWhiteFilterRule.Value) {retVal = true;}
|
||||
} else if (theWhiteFilterRule.Comp === "~") {
|
||||
logger.log("debug","RegexFilter: " + theWhiteFilterRule.Value + " || " + inputData[theWhiteFilterRule.Field]);
|
||||
isKnownComp = true;
|
||||
logger.log("debug", "RegexFilter: " + theWhiteFilterRule.Value + " || " + inputData[theWhiteFilterRule.Field].replace(/\r/g, "\\r").replace(/\n/g, "\\n"));
|
||||
retVal = this.reTest(theWhiteFilterRule.Value, inputData[theWhiteFilterRule.Field]);
|
||||
}
|
||||
|
||||
let result = this.reTest(theWhiteFilterRule.Value, inputData[theWhiteFilterRule.Field]);
|
||||
|
||||
if (result) {
|
||||
logger.log("debug", "Logic FLAT - Exiting out");
|
||||
return (true);
|
||||
}
|
||||
if (!isKnownComp) {
|
||||
logger.log("error", "The configured Comp '" + theWhiteFilterRule.Comp + "' is unknown.")
|
||||
}
|
||||
|
||||
if (retVal === true) {
|
||||
logger.log("debug", "Logic FLAT - Exiting out");
|
||||
}
|
||||
logger.log("debug", "Logic FLAT - end");
|
||||
return (retVal);
|
||||
}
|
||||
|
||||
reTest(regex, data) {
|
||||
|
||||
Reference in New Issue
Block a user