129 lines
4.0 KiB
JavaScript
129 lines
4.0 KiB
JavaScript
import assert from 'node:assert';
|
|
import database from './database.js';
|
|
import safe from '@cloudron/safetydance';
|
|
|
|
const APPSTORE_API_TOKEN_KEY = 'appstore_api_token';
|
|
const API_SERVER_ORIGIN_KEY = 'api_server_origin';
|
|
const AUTOUPDATE_SCHEDULE_KEY = 'autoupdate_schedule';
|
|
const AUTOUPDATE_POLICY_KEY = 'autoupdate_policy';
|
|
const CLOUDRON_AVATAR_KEY = 'cloudron_avatar';
|
|
const CLOUDRON_BACKGROUND_KEY = 'cloudron_background';
|
|
const CLOUDRON_ID_KEY = 'cloudron_id';
|
|
const CLOUDRON_NAME_KEY = 'cloudron_name';
|
|
const CONSOLE_SERVER_ORIGIN_KEY = 'console_server_origin';
|
|
const DASHBOARD_DOMAIN_KEY = 'dashboard_domain';
|
|
const DASHBOARD_SUBDOMAIN_KEY = 'dashboard_subdomain';
|
|
const DIRECTORY_SERVER_KEY = 'directory_server_config';
|
|
const DYNAMIC_DNS_KEY = 'dynamic_dns';
|
|
const EXTERNAL_LDAP_KEY = 'external_ldap_config';
|
|
const FOOTER_KEY = 'footer';
|
|
const FIREWALL_BLOCKLIST_KEY = 'firewall_blocklist';
|
|
const GHOSTS_CONFIG_KEY = 'ghosts_config';
|
|
const IPV4_CONFIG_KEY = 'ipv4_config';
|
|
const IPV6_CONFIG_KEY = 'ipv6_config';
|
|
const LANGUAGE_KEY = 'language';
|
|
const MAIL_DOMAIN_KEY = 'mail_domain';
|
|
const MAIL_SUBDOMAIN_KEY = 'mail_subdomain';
|
|
const OIDC_COOKIE_SECRET_KEY = 'cookie_secret';
|
|
const PROFILE_CONFIG_KEY = 'profile_config';
|
|
const REVERSE_PROXY_CONFIG_KEY = 'reverseproxy_config';
|
|
const SERVICES_CONFIG_KEY = 'services_config';
|
|
const TIME_ZONE_KEY = 'time_zone';
|
|
const TRUSTED_IPS_KEY = 'trusted_ips_key';
|
|
|
|
const SETTINGS_FIELDS = [ 'name', 'value' ].join(',');
|
|
const SETTINGS_BLOB_FIELDS = [ 'name', 'valueBlob' ].join(',');
|
|
|
|
async function get(key) {
|
|
assert.strictEqual(typeof key, 'string');
|
|
|
|
const result = await database.query(`SELECT ${SETTINGS_FIELDS} FROM settings WHERE name = ?`, [ key ]);
|
|
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');
|
|
}
|
|
|
|
const WEB_SERVER_ORIGIN_KEY = 'web_server_origin';
|
|
|
|
const _clear = clear;
|
|
|
|
export default {
|
|
get,
|
|
set,
|
|
getJson,
|
|
setJson,
|
|
getBlob,
|
|
setBlob,
|
|
APPSTORE_API_TOKEN_KEY,
|
|
API_SERVER_ORIGIN_KEY,
|
|
AUTOUPDATE_SCHEDULE_KEY,
|
|
AUTOUPDATE_POLICY_KEY,
|
|
CLOUDRON_AVATAR_KEY,
|
|
CLOUDRON_BACKGROUND_KEY,
|
|
CLOUDRON_ID_KEY,
|
|
CLOUDRON_NAME_KEY,
|
|
CONSOLE_SERVER_ORIGIN_KEY,
|
|
DASHBOARD_DOMAIN_KEY,
|
|
DASHBOARD_SUBDOMAIN_KEY,
|
|
DIRECTORY_SERVER_KEY,
|
|
DYNAMIC_DNS_KEY,
|
|
EXTERNAL_LDAP_KEY,
|
|
FOOTER_KEY,
|
|
FIREWALL_BLOCKLIST_KEY,
|
|
GHOSTS_CONFIG_KEY,
|
|
IPV4_CONFIG_KEY,
|
|
IPV6_CONFIG_KEY,
|
|
LANGUAGE_KEY,
|
|
MAIL_DOMAIN_KEY,
|
|
MAIL_SUBDOMAIN_KEY,
|
|
OIDC_COOKIE_SECRET_KEY,
|
|
PROFILE_CONFIG_KEY,
|
|
REVERSE_PROXY_CONFIG_KEY,
|
|
SERVICES_CONFIG_KEY,
|
|
TIME_ZONE_KEY,
|
|
TRUSTED_IPS_KEY,
|
|
WEB_SERVER_ORIGIN_KEY,
|
|
_clear,
|
|
_set: set,
|
|
};
|