mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Validate user-provided language parameter before passing to i18n
This commit is contained in:
56
packages/node_modules/@node-red/util/lib/i18n.js
vendored
56
packages/node_modules/@node-red/util/lib/i18n.js
vendored
@@ -24,7 +24,7 @@ var i18n = require("i18next");
|
||||
|
||||
var when = require("when");
|
||||
var path = require("path");
|
||||
var fs = require("fs");
|
||||
var fs = require("fs-extra");
|
||||
|
||||
var defaultLang = "en-US";
|
||||
|
||||
@@ -82,36 +82,28 @@ function mergeCatalog(fallback,catalog) {
|
||||
}
|
||||
|
||||
|
||||
function readFile(lng, ns) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (resourceCache[ns] && resourceCache[ns][lng]) {
|
||||
resolve(resourceCache[ns][lng]);
|
||||
} else if (resourceMap[ns]) {
|
||||
var file = path.join(resourceMap[ns].basedir, lng, resourceMap[ns].file);
|
||||
fs.readFile(file, "utf8", function (err, content) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
try {
|
||||
resourceCache[ns] = resourceCache[ns] || {};
|
||||
resourceCache[ns][lng] = JSON.parse(content.replace(/^\uFEFF/, ''));
|
||||
var baseLng = lng.split('-')[0];
|
||||
if (baseLng !== lng && resourceCache[ns][baseLng]) {
|
||||
mergeCatalog(resourceCache[ns][baseLng], resourceCache[ns][lng]);
|
||||
}
|
||||
if (lng !== defaultLang) {
|
||||
mergeCatalog(resourceCache[ns][defaultLang], resourceCache[ns][lng]);
|
||||
}
|
||||
resolve(resourceCache[ns][lng]);
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
reject(new Error("Unrecognised namespace"));
|
||||
async function readFile(lng, ns) {
|
||||
if (/[^a-z\-]/i.test(lng)) {
|
||||
throw new Error("Invalid language: "+lng)
|
||||
}
|
||||
if (resourceCache[ns] && resourceCache[ns][lng]) {
|
||||
return resourceCache[ns][lng];
|
||||
} else if (resourceMap[ns]) {
|
||||
const file = path.join(resourceMap[ns].basedir, lng, resourceMap[ns].file);
|
||||
const content = await fs.readFile(file, "utf8");
|
||||
resourceCache[ns] = resourceCache[ns] || {};
|
||||
resourceCache[ns][lng] = JSON.parse(content.replace(/^\uFEFF/, ''));
|
||||
var baseLng = lng.split('-')[0];
|
||||
if (baseLng !== lng && resourceCache[ns][baseLng]) {
|
||||
mergeCatalog(resourceCache[ns][baseLng], resourceCache[ns][lng]);
|
||||
}
|
||||
});
|
||||
if (lng !== defaultLang) {
|
||||
mergeCatalog(resourceCache[ns][defaultLang], resourceCache[ns][lng]);
|
||||
}
|
||||
return resourceCache[ns][lng];
|
||||
} else {
|
||||
throw new Error("Unrecognised namespace");
|
||||
}
|
||||
}
|
||||
|
||||
var MessageFileLoader = {
|
||||
@@ -182,6 +174,10 @@ function init() {
|
||||
function getCatalog(namespace,lang) {
|
||||
var result = null;
|
||||
lang = lang || defaultLang;
|
||||
if (/[^a-z\-]/i.test(lang)) {
|
||||
throw new Error("Invalid language: "+lng)
|
||||
}
|
||||
|
||||
if (resourceCache.hasOwnProperty(namespace)) {
|
||||
result = resourceCache[namespace][lang];
|
||||
if (!result) {
|
||||
|
Reference in New Issue
Block a user