Use nested config structure
This commit is contained in:
1 parent
581a510960
commit
30dbf0cf40
15 files changed
+366
-251
No files matched your search
@@ -92,7 +92,7 @@ function count(resource, filter, limit) {
|
||||
if (limit) qs.limit = limit;
|
||||
|
||||
let options = url.parse(
|
||||
`${config.get("server.nbi")}${resource}?${querystring.stringify(qs)}`
|
||||
`${config.server.nbi}${resource}?${querystring.stringify(qs)}`
|
||||
);
|
||||
|
||||
options.method = "HEAD";
|
||||
@@ -133,7 +133,7 @@ function query(resource, filter, limit, skip, projection, callback) {
|
||||
qs.sort = JSON.stringify({ _id: 1 });
|
||||
|
||||
let options = url.parse(
|
||||
`${config.get("server.nbi")}${resource}?${querystring.stringify(qs)}`
|
||||
`${config.server.nbi}${resource}?${querystring.stringify(qs)}`
|
||||
);
|
||||
|
||||
let _http = options.protocol === "https:" ? https : http;
|
||||
@@ -209,7 +209,7 @@ function query(resource, filter, limit, skip, projection, callback) {
|
||||
function deleteResource(resource, id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let options = url.parse(
|
||||
`${config.get("server.nbi")}${resource}/${encodeURIComponent(id)}`
|
||||
`${config.server.nbi}${resource}/${encodeURIComponent(id)}`
|
||||
);
|
||||
|
||||
options.method = "DELETE";
|
||||
@@ -229,7 +229,7 @@ function deleteResource(resource, id) {
|
||||
|
||||
function postTask(task, connectionRequest, callback) {
|
||||
let options = url.parse(
|
||||
`${config.get("server.nbi")}devices/${task.device}/tasks${
|
||||
`${config.server.nbi}devices/${task.device}/tasks${
|
||||
connectionRequest ? "?connection_request" : ""
|
||||
}`
|
||||
);
|
||||
@@ -346,9 +346,9 @@ function updateTags(deviceId, tags) {
|
||||
([tag, onOff]) =>
|
||||
new Promise((resolve, reject) => {
|
||||
const options = url.parse(
|
||||
`${config.get(
|
||||
"server.nbi"
|
||||
)}devices/${deviceId}/tags/${encodeURIComponent(tag)}`
|
||||
`${config.server.nbi}devices/${deviceId}/tags/${encodeURIComponent(
|
||||
tag
|
||||
)}`
|
||||
);
|
||||
if (onOff) options.method = "POST";
|
||||
else options.method = "DELETE";
|
||||
@@ -370,7 +370,7 @@ function updateTags(deviceId, tags) {
|
||||
function ping(host) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = url.parse(
|
||||
`${config.get("server.nbi")}ping/${encodeURIComponent(host)}`
|
||||
`${config.server.nbi}ping/${encodeURIComponent(host)}`
|
||||
);
|
||||
|
||||
let _http = options.protocol === "https:" ? https : http;
|
||||
|
||||
+29
-64
@@ -1,72 +1,37 @@
|
||||
"use strict";
|
||||
|
||||
const filterParser = require("../common/filter-parser.js");
|
||||
const Filter = require("../common/filter.js");
|
||||
|
||||
const configFile = require("../config.json");
|
||||
|
||||
const cache = {};
|
||||
|
||||
function parse(name, value) {
|
||||
if (/^ui\.overview\.charts\.[^.]+\.slices\.[^.]+\.filter$/.test(name))
|
||||
return new Filter(value);
|
||||
else if (/^permissions\.[^.]+\.[^.]+\.devices\.filter$/.test(name))
|
||||
return new Filter(value);
|
||||
else if (/^auth\.[^.]+\.users\.[^.]+\.roles$/.test(name))
|
||||
return value
|
||||
.split(",")
|
||||
.map(x => x.trim())
|
||||
.sort();
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function get(name) {
|
||||
let v = cache[name];
|
||||
if (v === undefined) {
|
||||
v = configFile[name];
|
||||
if (v != null) {
|
||||
v = parse(name, v);
|
||||
} else {
|
||||
const prefix = `${name}.`;
|
||||
for (let k of Object.keys(configFile))
|
||||
if (k.startsWith(prefix)) {
|
||||
v = v || {};
|
||||
let ar = k.slice(prefix.length).split(".");
|
||||
let ref = v;
|
||||
for (let a of ar.slice(0, -1)) ref = ref[a] = ref[a] || {};
|
||||
ref[ar[ar.length - 1]] = parse(k, configFile[k]);
|
||||
}
|
||||
}
|
||||
if (v) cache[name] = v;
|
||||
else cache[name] = null;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
let config;
|
||||
|
||||
function getClientConfig() {
|
||||
const regex = [
|
||||
/^ui\.pageSize$/,
|
||||
/^ui\.filters\.[^.]+\.label$/,
|
||||
/^ui\.filters\.[^.]+\.parameter$/,
|
||||
/^ui\.filters\.[^.]+\.type$/,
|
||||
/^ui\.index\./,
|
||||
/^ui\.overview\.groups\./,
|
||||
/^ui\.overview\.charts\./,
|
||||
/^ui\.device/
|
||||
];
|
||||
|
||||
const clientConfig = {};
|
||||
for (let [k, v] of Object.entries(configFile))
|
||||
for (let r of regex)
|
||||
if (r.test(k)) {
|
||||
clientConfig[k] = v;
|
||||
break;
|
||||
}
|
||||
|
||||
return clientConfig;
|
||||
return Object.assign({}, config, {
|
||||
server: null,
|
||||
auth: null,
|
||||
permissions: null
|
||||
});
|
||||
}
|
||||
|
||||
exports.get = get;
|
||||
exports.getClientConfig = getClientConfig;
|
||||
function loadConfig(conf, root = {}) {
|
||||
for (const [key, value] of Object.entries(conf)) {
|
||||
const keys = key.split(".");
|
||||
let ref = root;
|
||||
while (keys.length > 1) {
|
||||
const k = keys.shift();
|
||||
if (typeof ref[k] !== "object") ref[k] = {};
|
||||
ref = ref[k];
|
||||
}
|
||||
|
||||
if (typeof value === "object") {
|
||||
if (typeof ref[keys[0]] !== "object") ref[keys[0]] = {};
|
||||
loadConfig(value, ref[keys[0]]);
|
||||
} else {
|
||||
ref[keys[0]] = value;
|
||||
}
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
config = loadConfig(configFile);
|
||||
|
||||
module.exports = Object.assign({}, config, { getClientConfig });
|
||||
+1
-1
@@ -10,7 +10,7 @@ function getClient() {
|
||||
if (_client) return Promise.resolve(_client);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const CONNECTION_URL = config.get("server.mongodbConnectionUrl");
|
||||
const CONNECTION_URL = config.server.mongodbConnectionUrl;
|
||||
MongoClient.connect(CONNECTION_URL, (err, client) => {
|
||||
if (err) return reject(err);
|
||||
resolve((_client = client.db("genieacs-ui")));
|
||||
|
||||
+9
-6
@@ -15,11 +15,11 @@ const Authorizer = require("../common/authorizer");
|
||||
const koa = new Koa();
|
||||
const router = new Router();
|
||||
|
||||
const JWT_SECRET = config.get("server.jwtSecret");
|
||||
const JWT_SECRET = config.server.jwtSecret;
|
||||
const JWT_COOKIE = "genieacs-ui-jwt";
|
||||
|
||||
function getPermissionSets(roles) {
|
||||
const allPermissions = config.get("permissions");
|
||||
const allPermissions = config.permissions;
|
||||
const permissionSets = roles.map(r => Object.values(allPermissions[r] || {}));
|
||||
return permissionSets;
|
||||
}
|
||||
@@ -46,7 +46,7 @@ router.post("/login", async ctx => {
|
||||
const username = ctx.request.body.username;
|
||||
const password = ctx.request.body.password;
|
||||
|
||||
const user = config.get(`auth.simple.users.${username}`);
|
||||
const user = config.auth.simple.users[username];
|
||||
|
||||
if (!user || user.password !== password) {
|
||||
ctx.status = 400;
|
||||
@@ -54,7 +54,10 @@ router.post("/login", async ctx => {
|
||||
return;
|
||||
}
|
||||
|
||||
let token = jwt.sign({ username: username, roles: user.roles }, JWT_SECRET);
|
||||
let token = jwt.sign(
|
||||
{ username: username, roles: user.roles.split(",") },
|
||||
JWT_SECRET
|
||||
);
|
||||
ctx.cookies.set(JWT_COOKIE, token);
|
||||
ctx.body = JSON.stringify(token);
|
||||
});
|
||||
@@ -101,7 +104,7 @@ koa.use(
|
||||
koa.use(router.routes());
|
||||
koa.use(koaStatic("./public"));
|
||||
|
||||
koa.listen(config.get("server.port"), () => {
|
||||
koa.listen(config.server.port, () => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(`Server listening on port ${config.get("server.port")}`);
|
||||
console.log(`Server listening on port ${config.server.port}`);
|
||||
});
|
||||
Reference in new issue
Block a user