cryptpad/lib/commands/moderators.js
2024-02-27 18:01:48 +01:00

54 lines
1.6 KiB
JavaScript

// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
//
// SPDX-License-Identifier: AGPL-3.0-or-later
/*jshint esversion: 6 */
const Moderators = module.exports;
const Moderator = require('../storage/moderator');
const Util = require("../common-util");
Moderators.getAll = (Env, cb) => {
Moderator.getAll(Env, (err, data) => {
if (err) { return void cb(err); }
let res = {};
Object.keys(data).forEach(safeKey => {
const unsafeKey = Util.unescapeKeyCharacters(safeKey);
res[unsafeKey] = data[safeKey];
});
cb(null, res);
});
};
Moderators.getKeysSync = (Env) => {
return Moderator.getAllKeys(Env);
};
Moderators.add = (Env, edPublic, data, adminKey, _cb) => {
const cb = Util.once(Util.mkAsync(_cb));
data.createdBy = adminKey;
data.time = +new Date();
const safeKey = Util.escapeKeyCharacters(edPublic);
Moderator.write(Env, safeKey, data, (err) => {
if (err) { return void cb(err); }
if (!Env.moderators.includes(edPublic)) {
Env.moderators.push(edPublic);
}
Env.envUpdated.fire();
cb();
});
};
Moderators.delete = (Env, id, _cb) => {
const cb = Util.once(Util.mkAsync(_cb));
const safeKey = Util.escapeKeyCharacters(id);
Moderator.delete(Env, safeKey, (err) => {
if (err && err !== 'ENOENT') { return void cb(err); }
let idx = Env.moderators.indexOf(id);
if (idx !== -1) {
Env.moderators.splice(idx, 1);
Env.envUpdated.fire();
}
cb(void 0, true);
});
};