easywaf-integration/index.js

59 lines
2 KiB
JavaScript
Raw Normal View History

2023-07-29 23:58:48 +02:00
var EasyWaf = require('easy-waf');
if(EasyWaf.default) {
EasyWaf = EasyWaf.default;
}
var fs = require("fs");
var os = require("os");
var url = require("url");
var easywafconfig = {};
var logm = {};
if (fs.existsSync("easywaf-config.json")) easywafconfig = JSON.parse(fs.readFileSync("easywaf-config.json").toString())
easywafconfig.preBlockHook = function(req, moduleInfo, ip) {
try {
logm[ip]("Request blocked by EasyWAF. Module: " + moduleInfo.name);
} catch (ex) {
}
return true;
}
easywafconfig.disableLogging = true;
const easyWaf = EasyWaf(easywafconfig);
function Mod() {}
Mod.prototype.callback = function callback(req, res, serverconsole, responseEnd, href, ext, uobject, search, defaultpage, users, page404, head, foot, fd, elseCallback, configJSON, callServerError) {
return function() {
logm[req.socket.remoteAddress] = serverconsole.errmessage;
//REQ.BODY
function readableHandler() {
try {
req.body = req._readableState.buffer._getString();
if (req.headers["content-type"] == "application/x-www-form-urlencoded") req.body = url.parse("?" + req.body.strip(), true).query;
if (req.headers["content-type"] == "application/json") req.body = JSON.parse(req.body.strip());
} catch (ex) {
}
//EASYWAF
easyWaf(req, res, function() {
if (href == "/easywaf-config.json" || (os.platform() == "win32" && href.toLowerCase() == "/easywaf-config.json")) {
if (callServerError) {
callServerError(403, "easy-waf-integration/1.0.0");
} else {
res.writeHead(403, "Forbidden", {
"Server": "SVR.JS"
});
res.end("403 Forbidden!");
}
} else {
elseCallback();
}
});
}
if(req._readableState.length > 0 || req._readableState.ended) {
readableHandler();
} else {
req.once("readable", readableHandler);
}
}
}
module.exports = Mod;