i18next-http-middleware
Version:
i18next-http-middleware is a middleware to be used with Node.js web frameworks like express or Fastify and also for Deno.
71 lines (70 loc) • 2.21 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.defaults = defaults;
exports.escape = escape;
exports.extend = extend;
exports.hasXSS = hasXSS;
exports.removeLngFromUrl = removeLngFromUrl;
exports.setPath = setPath;
function setPath(object, path, newValue) {
var stack;
if (typeof path !== 'string') stack = [].concat(path);
if (typeof path === 'string') stack = path.split('.');
while (stack.length > 1) {
var _key = stack.shift();
if (_key.indexOf('###') > -1) _key = _key.replace(/###/g, '.');
if (!object[_key]) object[_key] = {};
object = object[_key];
}
var key = stack.shift();
if (key.indexOf('###') > -1) key = key.replace(/###/g, '.');
object[key] = newValue;
}
var arr = [];
var each = arr.forEach;
var slice = arr.slice;
function defaults(obj) {
each.call(slice.call(arguments, 1), function (source) {
if (source) {
for (var prop in source) {
if (obj[prop] === undefined) obj[prop] = source[prop];
}
}
});
return obj;
}
function extend(obj) {
each.call(slice.call(arguments, 1), function (source) {
if (source) {
for (var prop in source) {
obj[prop] = source[prop];
}
}
});
return obj;
}
function removeLngFromUrl(url, lookupFromPathIndex) {
var first = '';
var pos = lookupFromPathIndex;
if (url[0] === '/') {
pos++;
first = '/';
}
var parts = url.split('/');
parts.splice(pos, 1);
url = parts.join('/');
if (url[0] !== '/') url = first + url;
return url;
}
function escape(str) {
return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`');
}
function hasXSS(input) {
if (typeof input !== 'string') return false;
var xssPatterns = [/<\s*script.*?>/i, /<\s*\/\s*script\s*>/i, /<\s*img.*?on\w+\s*=/i, /<\s*\w+\s*on\w+\s*=.*?>/i, /javascript\s*:/i, /vbscript\s*:/i, /expression\s*\(/i, /eval\s*\(/i, /alert\s*\(/i, /document\.cookie/i, /document\.write\s*\(/i, /window\.location/i, /innerHTML/i];
return xssPatterns.some(function (pattern) {
return pattern.test(input);
});
}
;