You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
815 B
JavaScript
35 lines
815 B
JavaScript
'use strict';
|
|
|
|
const nconf = require('nconf');
|
|
const validator = require('validator');
|
|
const admin = require('./admin');
|
|
const groups = require('../groups');
|
|
|
|
const navigation = module.exports;
|
|
|
|
const relative_path = nconf.get('relative_path');
|
|
|
|
navigation.get = async function (uid) {
|
|
let data = await admin.get();
|
|
|
|
data = data.filter(item => item && item.enabled).map((item) => {
|
|
item.originalRoute = validator.unescape(item.route);
|
|
|
|
if (!item.route.startsWith('http')) {
|
|
item.route = relative_path + item.route;
|
|
}
|
|
|
|
return item;
|
|
});
|
|
|
|
const pass = await Promise.all(data.map(async (navItem) => {
|
|
if (!navItem.groups.length) {
|
|
return true;
|
|
}
|
|
return await groups.isMemberOfAny(uid, navItem.groups);
|
|
}));
|
|
return data.filter((navItem, i) => pass[i]);
|
|
};
|
|
|
|
require('../promisify')(navigation);
|