Files
cloudron-box/src/settings.js
T

102 lines
3.2 KiB
JavaScript
Raw Normal View History

'use strict';
exports = module.exports = {
get,
set,
getJson,
setJson,
2023-08-02 19:17:22 +05:30
getBlob,
setBlob,
2023-08-04 15:34:38 +05:30
APPSTORE_API_TOKEN_KEY: 'appstore_api_token',
API_SERVER_ORIGIN_KEY: 'api_server_origin',
AUTOUPDATE_PATTERN_KEY: 'autoupdate_pattern',
CLOUDRON_AVATAR_KEY: 'cloudron_avatar',
2024-04-03 17:27:22 +02:00
CLOUDRON_BACKGROUND_KEY: 'cloudron_background',
2023-08-04 15:34:38 +05:30
CLOUDRON_ID_KEY: 'cloudron_id',
CLOUDRON_NAME_KEY: 'cloudron_name',
CONSOLE_SERVER_ORIGIN_KEY: 'console_server_origin',
2023-08-16 19:28:04 +05:30
DASHBOARD_DOMAIN_KEY: 'dashboard_domain',
DASHBOARD_SUBDOMAIN_KEY: 'dashboard_subdomain',
2023-08-03 07:35:14 +05:30
DIRECTORY_SERVER_KEY: 'directory_server_config',
2023-08-04 15:34:38 +05:30
DYNAMIC_DNS_KEY: 'dynamic_dns',
EXTERNAL_LDAP_KEY: 'external_ldap_config',
FOOTER_KEY: 'footer',
FIREWALL_BLOCKLIST_KEY: 'firewall_blocklist',
GHOSTS_CONFIG_KEY: 'ghosts_config',
IPV4_CONFIG_KEY: 'ipv4_config',
2023-08-04 15:34:38 +05:30
IPV6_CONFIG_KEY: 'ipv6_config',
LANGUAGE_KEY: 'language',
MAIL_DOMAIN_KEY: 'mail_domain',
2023-08-16 19:28:04 +05:30
MAIL_SUBDOMAIN_KEY: 'mail_subdomain',
2023-08-04 15:34:38 +05:30
OIDC_COOKIE_SECRET_KEY: 'cookie_secret',
2022-01-13 14:34:02 -08:00
PROFILE_CONFIG_KEY: 'profile_config',
2021-09-22 09:13:16 -07:00
REVERSE_PROXY_CONFIG_KEY: 'reverseproxy_config',
2023-08-04 15:34:38 +05:30
SERVICES_CONFIG_KEY: 'services_config',
2017-07-18 13:31:43 -07:00
TIME_ZONE_KEY: 'time_zone',
2023-05-13 14:59:57 +02:00
TRUSTED_IPS_KEY: 'trusted_ips_key',
2019-07-25 11:16:52 -07:00
WEB_SERVER_ORIGIN_KEY: 'web_server_origin',
2019-07-26 10:49:29 -07:00
// testing
2021-08-19 13:24:38 -07:00
_clear: clear,
_set: set
};
2021-01-20 11:10:17 -08:00
const assert = require('assert'),
2021-08-18 13:25:42 -07:00
database = require('./database.js'),
2023-08-04 11:24:28 +05:30
safe = require('safetydance');
2021-08-18 13:25:42 -07:00
const SETTINGS_FIELDS = [ 'name', 'value' ].join(',');
const SETTINGS_BLOB_FIELDS = [ 'name', 'valueBlob' ].join(',');
2021-08-18 13:25:42 -07:00
async function get(key) {
assert.strictEqual(typeof key, 'string');
const result = await database.query(`SELECT ${SETTINGS_FIELDS} FROM settings WHERE name = ?`, [ key ]);
2021-08-18 15:40:28 -07:00
if (result.length === 0) return null; // can't return the default value here because we might need to massage/json parse the result
return result[0].value;
}
async function set(key, value) {
assert.strictEqual(typeof key, 'string');
assert(value === null || typeof value === 'string');
await database.query('INSERT INTO settings (name, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value=VALUES(value)', [ key, value ]); // don't rely on affectedRows here since it gives 2
}
async function getJson(key) {
assert.strictEqual(typeof key, 'string');
return safe.JSON.parse(await get(key));
}
async function setJson(key, value) {
assert.strictEqual(typeof key, 'string');
assert.strictEqual(typeof value, 'object'); // can be null
await set(key, value ? JSON.stringify(value) : null);
}
async function getBlob(key) {
assert.strictEqual(typeof key, 'string');
const result = await database.query(`SELECT ${SETTINGS_BLOB_FIELDS} FROM settings WHERE name = ?`, [ key ]);
if (result.length === 0) return null;
return result[0].valueBlob;
}
async function setBlob(key, value) {
assert.strictEqual(typeof key, 'string');
assert(value === null || Buffer.isBuffer(value));
await database.query('INSERT INTO settings (name, valueBlob) VALUES (?, ?) ON DUPLICATE KEY UPDATE valueBlob=VALUES(valueBlob)', [ key, value ]); // don't rely on affectedRows here since it gives 2
}
async function clear() {
await database.query('DELETE FROM settings');
}