src/api/admin.js
'use strict';
const meta = require('../meta');
const analytics = require('../analytics');
const privileges = require('../privileges');
const groups = require('../groups');
const adminApi = module.exports;
adminApi.updateSetting = async (caller, { setting, value }) => {
const ok = await privileges.admin.can('admin:settings', caller.uid);
if (!ok) {
throw new Error('[[error:no-privileges]]');
}
await meta.configs.set(setting, value);
};
adminApi.getAnalyticsKeys = async () => {
const keys = await analytics.getKeys();
// Sort keys alphabetically
return keys.sort((a, b) => (a < b ? -1 : 1));
};
adminApi.getAnalyticsData = async (caller, { set, until, amount, units }) => {
// Default returns views from past 24 hours, by hour
if (!amount) {
if (units === 'days') {
amount = 30;
} else {
amount = 24;
}
}
const getStats = units === 'days' ? analytics.getDailyStatsForSet : analytics.getHourlyStatsForSet;
return await getStats(`analytics:${set}`, parseInt(until, 10) || Date.now(), amount);
};
adminApi.listGroups = async () => {
// N.B. Returns all groups, even hidden. Beware of leakage.
// Access control handled at controller level
const payload = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1, { ephemeral: false });
return { groups: payload };
};