UNPKG

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
"use strict"; 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, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\//g, '&#x2F;').replace(/\\/g, '&#x5C;').replace(/`/g, '&#96;'); } 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); }); }