NodeBB/NodeBB

View on GitHub
src/api/admin.js

Summary

Maintainability
A
0 mins
Test Coverage
'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 };
};