2017-07-08 13:48:34 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const knex = require('../lib/knex');
|
2018-04-22 07:00:04 +00:00
|
|
|
const shares = require('./shares');
|
|
|
|
|
|
|
|
const allowedKeys = new Set(['adminEmail', 'uaCode', 'pgpPassphrase', 'pgpPrivateKey', 'defaultHomepage']);
|
|
|
|
// defaultHomepage is used as a default to list.homepage - if the list.homepage is not filled in
|
|
|
|
|
|
|
|
async function get(context, keyOrKeys) {
|
|
|
|
shares.enforceGlobalPermission(context, 'manageSettings');
|
2017-07-08 13:48:34 +00:00
|
|
|
|
|
|
|
let keys;
|
2018-04-22 07:00:04 +00:00
|
|
|
if (!keyOrKeys) {
|
|
|
|
keys = allowedKeys.values();
|
|
|
|
} else if (!Array.isArray(keyOrKeys)) {
|
2017-07-08 13:48:34 +00:00
|
|
|
keys = [ keys ];
|
|
|
|
} else {
|
|
|
|
keys = keyOrKeys;
|
|
|
|
}
|
|
|
|
|
2017-07-08 16:57:41 +00:00
|
|
|
const rows = await knex('settings').select(['key', 'value']).whereIn('key', keys);
|
2017-07-08 13:48:34 +00:00
|
|
|
|
|
|
|
const settings = {};
|
2017-07-08 16:57:41 +00:00
|
|
|
for (const row of rows) {
|
2017-12-30 16:27:24 +00:00
|
|
|
settings[row.key] = row.value;
|
2017-07-08 13:48:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!Array.isArray(keyOrKeys)) {
|
|
|
|
return settings[keyOrKeys];
|
|
|
|
} else {
|
|
|
|
return settings;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-22 07:00:04 +00:00
|
|
|
async function set(context, data) {
|
|
|
|
shares.enforceGlobalPermission(context, 'manageSettings');
|
|
|
|
|
|
|
|
for (const key in data) {
|
|
|
|
if (allowedKeys.has(key)) {
|
|
|
|
const value = data[key];
|
|
|
|
try {
|
|
|
|
await knex('settings').insert({key, value});
|
|
|
|
} catch (err) {
|
|
|
|
await knex('settings').where('key', key).update('value', value);
|
|
|
|
}
|
|
|
|
}
|
2017-07-08 13:48:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
get,
|
|
|
|
set
|
|
|
|
};
|
|
|
|
|