diff --git a/dashboard/src/js/client.js b/dashboard/src/js/client.js index 21c130926..5d50e92e2 100644 --- a/dashboard/src/js/client.js +++ b/dashboard/src/js/client.js @@ -1094,8 +1094,8 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }; // network - Client.prototype.setSysinfoConfig = function (config, callback) { - post('/api/v1/settings/sysinfo_config', config, null, function (error, data, status) { + Client.prototype.setIPv4Config = function (config, callback) { + post('/api/v1/network/ipv4_config', config, null, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); @@ -1103,8 +1103,8 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }); }; - Client.prototype.getSysinfoConfig = function (callback) { - get('/api/v1/settings/sysinfo_config', null, function (error, data, status) { + Client.prototype.getIPv4Config = function (callback) { + get('/api/v1/network/ipv4_config', null, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); @@ -1182,7 +1182,7 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }; Client.prototype.setIPv6Config = function (config, callback) { - post('/api/v1/settings/ipv6_config', config, null, function (error, data, status) { + post('/api/v1/network/ipv6_config', config, null, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); callback(null); @@ -1190,7 +1190,7 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }; Client.prototype.getIPv6Config = function (callback) { - get('/api/v1/settings/ipv6_config', null, function (error, data, status) { + get('/api/v1/network/ipv6_config', null, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); @@ -1427,12 +1427,12 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }); }; - Client.prototype.restore = function (backupConfig, remotePath, version, sysinfoConfig, skipDnsSetup, setupToken, callback) { + Client.prototype.restore = function (backupConfig, remotePath, version, ipv4Config, skipDnsSetup, setupToken, callback) { var data = { backupConfig: backupConfig, remotePath: remotePath, version: version, - sysinfoConfig: sysinfoConfig, + ipv4Config: ipv4Config, skipDnsSetup: skipDnsSetup, setupToken: setupToken }; diff --git a/dashboard/src/js/setupdns.js b/dashboard/src/js/setupdns.js index 8dfacc0b9..ec79248b4 100644 --- a/dashboard/src/js/setupdns.js +++ b/dashboard/src/js/setupdns.js @@ -249,7 +249,7 @@ app.controller('SetupDNSController', ['$scope', '$http', '$timeout', 'Client', f config: config, tlsConfig: tlsConfig }, - sysinfoConfig: sysinfoConfig, + ipv4Config: sysinfoConfig, providerToken: $scope.instanceId, setupToken: $scope.setupToken }; diff --git a/dashboard/src/views/network.js b/dashboard/src/views/network.js index 10a856816..00fffec32 100644 --- a/dashboard/src/views/network.js +++ b/dashboard/src/views/network.js @@ -265,7 +265,7 @@ angular.module('Application').controller('NetworkController', ['$scope', '$locat newIfname: '', refresh: function () { - Client.getSysinfoConfig(function (error, result) { + Client.getIPv4Config(function (error, result) { if (error) return console.error(error); $scope.sysinfo.provider = result.provider; @@ -303,7 +303,7 @@ angular.module('Application').controller('NetworkController', ['$scope', '$locat config.ifname = $scope.sysinfo.newIfname; } - Client.setSysinfoConfig(config, function (error) { + Client.setIPv4Config(config, function (error) { $scope.sysinfo.busy = false; if (error && error.message.indexOf('ipv') !== -1) { $scope.sysinfo.error.ipv4 = error.message; diff --git a/migrations/20230803004839-settings-rename-sysinfo-to-ipv4-config.js b/migrations/20230803004839-settings-rename-sysinfo-to-ipv4-config.js new file mode 100644 index 000000000..d061d1d30 --- /dev/null +++ b/migrations/20230803004839-settings-rename-sysinfo-to-ipv4-config.js @@ -0,0 +1,8 @@ +'use strict'; + +exports.up = async function(db) { + await db.runSql('UPDATE settings SET name=? WHERE name=?', [ 'ipv4_config', 'sysinfo_config']); +}; + +exports.down = async function(/* db */) { +}; diff --git a/src/network.js b/src/network.js index a20033478..f2815e8e7 100644 --- a/src/network.js +++ b/src/network.js @@ -6,6 +6,12 @@ exports = module.exports = { getDynamicDns, setDynamicDns, + + getIPv4Config, + setIPv4Config, + + getIPv6Config, + setIPv6Config, }; const assert = require('assert'), @@ -17,6 +23,7 @@ const assert = require('assert'), safe = require('safetydance'), settings = require('./settings.js'), shell = require('./shell.js'), + sysinfo = require('./sysinfo.js'), validator = require('validator'); const SET_BLOCKLIST_CMD = path.join(__dirname, 'scripts/setblocklist.sh'); @@ -69,3 +76,35 @@ async function setDynamicDns(enabled) { await settings.set(settings.DYNAMIC_DNS_KEY, enabled ? 'enabled' : ''); // db holds string values only cron.dynamicDnsChanged(enabled); } + +async function getIPv4Config() { + const value = await settings.get(settings.IPV4_CONFIG_KEY); + return value ? JSON.parse(value) : { provider: 'generic' }; +} + +async function setIPv4Config(ipv4Config) { + assert.strictEqual(typeof ipv4Config, 'object'); + + if (settings.isDemo()) throw new BoxError(BoxError.BAD_FIELD, 'Not allowed in demo mode'); + + const error = await sysinfo.testIPv4Config(ipv4Config); + if (error) throw error; + + await settings.set(settings.IPV4_CONFIG_KEY, JSON.stringify(ipv4Config)); +} + +async function getIPv6Config() { + const value = await settings.get(settings.IPV6_CONFIG_KEY); + return value ? JSON.parse(value) : { provider: 'noop' }; +} + +async function setIPv6Config(ipv6Config) { + assert.strictEqual(typeof ipv6Config, 'object'); + + if (settings.isDemo()) throw new BoxError(BoxError.BAD_FIELD, 'Not allowed in demo mode'); + + const error = await sysinfo.testIPv6Config(ipv6Config); + if (error) throw error; + + await settings.set(settings.IPV6_CONFIG_KEY, JSON.stringify(ipv6Config)); +} diff --git a/src/provision.js b/src/provision.js index 7fc1feaf4..e7e89b413 100644 --- a/src/provision.js +++ b/src/provision.js @@ -20,6 +20,7 @@ const assert = require('assert'), fs = require('fs'), mail = require('./mail.js'), mounts = require('./mounts.js'), + network = require('./network.js'), reverseProxy = require('./reverseproxy.js'), safe = require('safetydance'), semver = require('semver'), @@ -81,9 +82,9 @@ async function setupTask(domain, auditSource) { gProvisionStatus.setup.active = false; } -async function setup(domainConfig, sysinfoConfig, auditSource) { +async function setup(domainConfig, ipv4Config, auditSource) { assert.strictEqual(typeof domainConfig, 'object'); - assert.strictEqual(typeof sysinfoConfig, 'object'); + assert.strictEqual(typeof ipv4Config, 'object'); assert.strictEqual(typeof auditSource, 'object'); if (gProvisionStatus.setup.active || gProvisionStatus.restore.active) throw new BoxError(BoxError.BAD_STATE, 'Already setting up or restoring'); @@ -112,7 +113,7 @@ async function setup(domainConfig, sysinfoConfig, auditSource) { await settings.setMailLocation(domain, `${constants.DASHBOARD_SUBDOMAIN}.${domain}`); // default mail location. do this before we add the domain for upserting mail DNS await domains.add(domain, data, auditSource); - await settings.setSysinfoConfig(sysinfoConfig); + await network.setIPv4Config(ipv4Config); safe(setupTask(domain, auditSource), { debug }); // now that args are validated run the task in the background } catch (error) { @@ -151,10 +152,10 @@ async function activate(username, password, email, displayName, ip, auditSource) }; } -async function restoreTask(backupConfig, remotePath, sysinfoConfig, options, auditSource) { +async function restoreTask(backupConfig, remotePath, ipv4Config, options, auditSource) { assert.strictEqual(typeof backupConfig, 'object'); assert.strictEqual(typeof remotePath, 'string'); - assert.strictEqual(typeof sysinfoConfig, 'object'); + assert.strictEqual(typeof ipv4Config, 'object'); assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof auditSource, 'object'); @@ -169,7 +170,7 @@ async function restoreTask(backupConfig, remotePath, sysinfoConfig, options, aud await backuptask.downloadMail(mailRestoreConfig, (progress) => setProgress('restore', progress.message)); await ensureDhparams(); - await settings.setSysinfoConfig(sysinfoConfig); + await network.setIPv4Config(ipv4Config); await reverseProxy.restoreFallbackCertificates(); const dashboardDomain = settings.dashboardDomain(); // load this fresh from after the backup.restore @@ -186,11 +187,11 @@ async function restoreTask(backupConfig, remotePath, sysinfoConfig, options, aud gProvisionStatus.restore.active = false; } -async function restore(backupConfig, remotePath, version, sysinfoConfig, options, auditSource) { +async function restore(backupConfig, remotePath, version, ipv4Config, options, auditSource) { assert.strictEqual(typeof backupConfig, 'object'); assert.strictEqual(typeof remotePath, 'string'); assert.strictEqual(typeof version, 'string'); - assert.strictEqual(typeof sysinfoConfig, 'object'); + assert.strictEqual(typeof ipv4Config, 'object'); assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof auditSource, 'object'); @@ -229,10 +230,10 @@ async function restore(backupConfig, remotePath, version, sysinfoConfig, options backupConfig.encryption = null; } - error = await sysinfo.testIPv4Config(sysinfoConfig); + error = await sysinfo.testIPv4Config(ipv4Config); if (error) throw error; - safe(restoreTask(backupConfig, remotePath, sysinfoConfig, options, auditSource), { debug }); // now that args are validated run the task in the background + safe(restoreTask(backupConfig, remotePath, ipv4Config, options, auditSource), { debug }); // now that args are validated run the task in the background } catch (error) { gProvisionStatus.restore.active = false; gProvisionStatus.restore.errorMessage = error ? error.message : ''; diff --git a/src/routes/network.js b/src/routes/network.js index 02695e09e..854bb1e28 100644 --- a/src/routes/network.js +++ b/src/routes/network.js @@ -8,7 +8,13 @@ exports = module.exports = { setTrustedIps, getDynamicDns, - setDynamicDns + setDynamicDns, + + getIPv4Config, + setIPv4Config, + + getIPv6Config, + setIPv6Config }; const assert = require('assert'), @@ -75,3 +81,39 @@ async function setDynamicDns(req, res, next) { next(new HttpSuccess(200, {})); } + +async function getIPv4Config(req, res, next) { + const [error, ipv4Config] = await safe(network.getIPv4Config()); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, ipv4Config)); +} + +async function setIPv4Config(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + if (!req.body.provider || typeof req.body.provider !== 'string') return next(new HttpError(400, 'provider is required')); + + const [error] = await safe(network.setIPv4Config(req.body)); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, {})); +} + +async function getIPv6Config(req, res, next) { + const [error, ipv6Config] = await safe(network.getIPv6Config()); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, ipv6Config)); +} + +async function setIPv6Config(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + + if (!req.body.provider || typeof req.body.provider !== 'string') return next(new HttpError(400, 'provider is required')); + + const [error] = await safe(network.setIPv6Config(req.body)); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, {})); +} diff --git a/src/routes/provision.js b/src/routes/provision.js index a13430069..c2b78ba1c 100644 --- a/src/routes/provision.js +++ b/src/routes/provision.js @@ -65,12 +65,12 @@ async function setup(req, res, next) { if ('tlsConfig' in domainConfig && typeof domainConfig.tlsConfig !== 'object') return next(new HttpError(400, 'tlsConfig must be an object')); if (domainConfig.tlsConfig && (!domainConfig.tlsConfig.provider || typeof domainConfig.tlsConfig.provider !== 'string')) return next(new HttpError(400, 'tlsConfig.provider must be a string')); - if ('sysinfoConfig' in req.body && typeof req.body.sysinfoConfig !== 'object') return next(new HttpError(400, 'sysinfoConfig must be an object')); + if ('ipv4Config' in req.body && typeof req.body.ipv4Config !== 'object') return next(new HttpError(400, 'ipv4Config must be an object')); // it can take sometime to setup DNS, register cloudron req.clearTimeout(); - const [error] = await safe(provision.setup(domainConfig, req.body.sysinfoConfig || { provider: 'generic' }, AuditSource.fromRequest(req))); + const [error] = await safe(provision.setup(domainConfig, req.body.ipv4Config || { provider: 'generic' }, AuditSource.fromRequest(req))); if (error) return next(BoxError.toHttpError(error)); next(new HttpSuccess(200, {})); @@ -111,14 +111,14 @@ async function restore(req, res, next) { if (typeof req.body.remotePath !== 'string') return next(new HttpError(400, 'remotePath must be a string')); if (typeof req.body.version !== 'string') return next(new HttpError(400, 'version must be a string')); - if ('sysinfoConfig' in req.body && typeof req.body.sysinfoConfig !== 'object') return next(new HttpError(400, 'sysinfoConfig must be an object')); + if ('ipv4Config' in req.body && typeof req.body.ipv4Config !== 'object') return next(new HttpError(400, 'ipv4Config must be an object')); if ('skipDnsSetup' in req.body && typeof req.body.skipDnsSetup !== 'boolean') return next(new HttpError(400, 'skipDnsSetup must be a boolean')); const options = { skipDnsSetup: req.body.skipDnsSetup || false }; - const [error] = await safe(provision.restore(backupConfig, req.body.remotePath, req.body.version, req.body.sysinfoConfig || { provider: 'generic' }, options, AuditSource.fromRequest(req))); + const [error] = await safe(provision.restore(backupConfig, req.body.remotePath, req.body.version, req.body.ipv4Config || { provider: 'generic' }, options, AuditSource.fromRequest(req))); if (error) return next(BoxError.toHttpError(error)); next(new HttpSuccess(200, {})); diff --git a/src/routes/settings.js b/src/routes/settings.js index 940a95de3..81cd0ccc6 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -128,24 +128,6 @@ async function setBackupPolicy(req, res, next) { next(new HttpSuccess(200, {})); } -async function getIPv6Config(req, res, next) { - const [error, ipv6Config] = await safe(settings.getIPv6Config()); - if (error) return next(BoxError.toHttpError(error)); - - next(new HttpSuccess(200, ipv6Config)); -} - -async function setIPv6Config(req, res, next) { - assert.strictEqual(typeof req.body, 'object'); - - if (!req.body.provider || typeof req.body.provider !== 'string') return next(new HttpError(400, 'provider is required')); - - const [error] = await safe(settings.setIPv6Config(req.body)); - if (error) return next(BoxError.toHttpError(error)); - - next(new HttpSuccess(200, {})); -} - async function getRegistryConfig(req, res, next) { const [error, registryConfig] = await safe(settings.getRegistryConfig()); if (error) return next(BoxError.toHttpError(error)); @@ -189,24 +171,6 @@ async function setProfileConfig(req, res, next) { next(new HttpSuccess(200, {})); } -async function getSysinfoConfig(req, res, next) { - const [error, sysinfoConfig] = await safe(settings.getSysinfoConfig()); - if (error) return next(BoxError.toHttpError(error)); - - next(new HttpSuccess(200, sysinfoConfig)); -} - -async function setSysinfoConfig(req, res, next) { - assert.strictEqual(typeof req.body, 'object'); - - if (!req.body.provider || typeof req.body.provider !== 'string') return next(new HttpError(400, 'provider is required')); - - const [error] = await safe(settings.setSysinfoConfig(req.body)); - if (error) return next(BoxError.toHttpError(error)); - - next(new HttpSuccess(200, {})); -} - async function getLanguage(req, res, next) { const [error, language] = await safe(settings.getLanguage()); if (error) return next(BoxError.toHttpError(error)); @@ -230,10 +194,8 @@ function get(req, res, next) { switch (req.params.setting) { case settings.BACKUP_POLICY_KEY: return getBackupPolicy(req, res, next); - case settings.IPV6_CONFIG_KEY: return getIPv6Config(req, res, next); case settings.BACKUP_CONFIG_KEY: return getBackupConfig(req, res, next); case settings.REGISTRY_CONFIG_KEY: return getRegistryConfig(req, res, next); - case settings.SYSINFO_CONFIG_KEY: return getSysinfoConfig(req, res, next); case settings.LANGUAGE_KEY: return getLanguage(req, res, next); case settings.AUTOUPDATE_PATTERN_KEY: return getAutoupdatePattern(req, res, next); @@ -250,9 +212,7 @@ function set(req, res, next) { switch (req.params.setting) { case settings.BACKUP_POLICY_KEY: return setBackupPolicy(req, res, next); - case settings.IPV6_CONFIG_KEY: return setIPv6Config(req, res, next); case settings.REGISTRY_CONFIG_KEY: return setRegistryConfig(req, res, next); - case settings.SYSINFO_CONFIG_KEY: return setSysinfoConfig(req, res, next); case settings.LANGUAGE_KEY: return setLanguage(req, res, next); case settings.AUTOUPDATE_PATTERN_KEY: return setAutoupdatePattern(req, res, next); diff --git a/src/server.js b/src/server.js index ea38ae3d2..d4e63dc19 100644 --- a/src/server.js +++ b/src/server.js @@ -296,10 +296,14 @@ async function initializeExpressSync() { // network routes router.get ('/api/v1/network/blocklist', token, authorizeOwner, routes.network.getBlocklist); router.post('/api/v1/network/blocklist', json, token, authorizeOwner, routes.network.setBlocklist); - router.get ('/api/v1/network/trusted_ips', token, authorizeOwner, routes.network.getTrustedIps); - router.post('/api/v1/network/trusted_ips', json, token, authorizeOwner, routes.network.setTrustedIps); - router.get ('/api/v1/network/dynamic_dns', token, authorizeOwner, routes.network.getDynamicDns); - router.post('/api/v1/network/dynamic_dns', json, token, authorizeOwner, routes.network.setDynamicDns); + router.get ('/api/v1/network/trusted_ips', token, authorizeAdmin, routes.network.getTrustedIps); + router.post('/api/v1/network/trusted_ips', json, token, authorizeAdmin, routes.network.setTrustedIps); + router.get ('/api/v1/network/dynamic_dns', token, authorizeAdmin, routes.network.getDynamicDns); + router.post('/api/v1/network/dynamic_dns', json, token, authorizeAdmin, routes.network.setDynamicDns); + router.get ('/api/v1/network/ipv4_config', token, authorizeAdmin, routes.network.getIPv4Config); + router.post('/api/v1/network/ipv4_config', json, token, authorizeAdmin, routes.network.setIPv4Config); + router.get ('/api/v1/network/ipv6_config', token, authorizeAdmin, routes.network.getIPv6Config); + router.post('/api/v1/network/ipv6_config', json, token, authorizeAdmin, routes.network.setIPv6Config); // settings routes (these are for the settings tab - avatar & name have public routes for normal users. see above) router.get ('/api/v1/settings/:setting', token, authorizeAdmin, routes.settings.get); diff --git a/src/settings.js b/src/settings.js index ff6705d90..63e36edb2 100644 --- a/src/settings.js +++ b/src/settings.js @@ -7,9 +7,6 @@ exports = module.exports = { getTimeZone, setTimeZone, - getIPv6Config, - setIPv6Config, - getBackupPolicy, setBackupPolicy, @@ -25,9 +22,6 @@ exports = module.exports = { getLanguage, setLanguage, - getSysinfoConfig, - setSysinfoConfig, - getProfileConfig, setProfileConfig, @@ -71,7 +65,7 @@ exports = module.exports = { EXTERNAL_LDAP_KEY: 'external_ldap_config', DIRECTORY_SERVER_KEY: 'user_directory_config', REGISTRY_CONFIG_KEY: 'registry_config', - SYSINFO_CONFIG_KEY: 'sysinfo_config', // misnomer: ipv4 config + IPV4_CONFIG_KEY: 'ipv4_config', SUPPORT_CONFIG_KEY: 'support_config', PROFILE_CONFIG_KEY: 'profile_config', GHOSTS_CONFIG_KEY: 'ghosts_config', @@ -123,7 +117,6 @@ const assert = require('assert'), mounts = require('./mounts.js'), paths = require('./paths.js'), safe = require('safetydance'), - sysinfo = require('./sysinfo.js'), tokens = require('./tokens.js'), translation = require('./translation.js'), users = require('./users.js'), @@ -136,9 +129,6 @@ const gDefaults = (function () { const result = { }; result[exports.AUTOUPDATE_PATTERN_KEY] = cron.DEFAULT_AUTOUPDATE_PATTERN; result[exports.TIME_ZONE_KEY] = 'UTC'; - result[exports.IPV6_CONFIG_KEY] = { - provider: 'noop' - }; result[exports.LANGUAGE_KEY] = 'en'; result[exports.BACKUP_CONFIG_KEY] = { provider: 'filesystem', @@ -154,9 +144,6 @@ const gDefaults = (function () { result[exports.REGISTRY_CONFIG_KEY] = { provider: 'noop' }; - result[exports.SYSINFO_CONFIG_KEY] = { - provider: 'generic' - }; result[exports.PROFILE_CONFIG_KEY] = { lockUserProfiles: false, mandatory2FA: false @@ -254,24 +241,6 @@ async function getTimeZone() { return tz; } -async function getIPv6Config() { - const value = await get(exports.IPV6_CONFIG_KEY); - if (value === null) return gDefaults[exports.IPV6_CONFIG_KEY]; - return JSON.parse(value); -} - -async function setIPv6Config(ipv6Config) { - assert.strictEqual(typeof ipv6Config, 'object'); - - if (isDemo()) throw new BoxError(BoxError.BAD_FIELD, 'Not allowed in demo mode'); - - const error = await sysinfo.testIPv6Config(ipv6Config); - if (error) throw error; - - await set(exports.IPV6_CONFIG_KEY, JSON.stringify(ipv6Config)); - notifyChange(exports.IPV6_CONFIG_KEY, ipv6Config); -} - async function getBackupPolicy() { const result = await get(exports.BACKUP_POLICY_KEY); if (result === null) return gDefaults[exports.BACKUP_POLICY_KEY]; @@ -378,25 +347,6 @@ async function setRegistryConfig(registryConfig) { notifyChange(exports.REGISTRY_CONFIG_KEY, registryConfig); } -async function getSysinfoConfig() { - const value = await get(exports.SYSINFO_CONFIG_KEY); - if (value === null) return gDefaults[exports.SYSINFO_CONFIG_KEY]; - return JSON.parse(value); -} - -async function setSysinfoConfig(sysinfoConfig) { - assert.strictEqual(typeof sysinfoConfig, 'object'); - - if (isDemo()) throw new BoxError(BoxError.BAD_FIELD, 'Not allowed in demo mode'); - - const error = await sysinfo.testIPv4Config(sysinfoConfig); - if (error) throw error; - - await set(exports.SYSINFO_CONFIG_KEY, JSON.stringify(sysinfoConfig)); - - notifyChange(exports.SYSINFO_CONFIG_KEY, sysinfoConfig); -} - async function getProfileConfig() { const value = await get(exports.PROFILE_CONFIG_KEY); if (value === null) return gDefaults[exports.PROFILE_CONFIG_KEY]; @@ -464,8 +414,8 @@ async function list() { result[exports.DEMO_KEY] = !!result[exports.DEMO_KEY]; // convert JSON objects - [exports.BACKUP_POLICY_KEY, exports.BACKUP_CONFIG_KEY, exports.IPV6_CONFIG_KEY, exports.PROFILE_CONFIG_KEY, exports.SERVICES_CONFIG_KEY, - exports.REGISTRY_CONFIG_KEY, exports.SYSINFO_CONFIG_KEY, exports.REVERSE_PROXY_CONFIG_KEY ].forEach(function (key) { + [exports.BACKUP_POLICY_KEY, exports.BACKUP_CONFIG_KEY, exports.PROFILE_CONFIG_KEY, exports.SERVICES_CONFIG_KEY, + exports.REGISTRY_CONFIG_KEY ].forEach(function (key) { result[key] = typeof result[key] === 'object' ? result[key] : safe.JSON.parse(result[key]); }); diff --git a/src/sysinfo.js b/src/sysinfo.js index fd4bdeb4b..fcc0fd2c8 100644 --- a/src/sysinfo.js +++ b/src/sysinfo.js @@ -12,7 +12,7 @@ exports = module.exports = { const assert = require('assert'), fs = require('fs'), ipaddr = require('ipaddr.js'), - settings = require('./settings.js'); + network = require('./network.js'); function api(provider) { assert.strictEqual(typeof provider, 'string'); @@ -26,14 +26,14 @@ function api(provider) { } async function getServerIPv4() { - const config = await settings.getSysinfoConfig(); + const config = await network.getIPv4Config(); return await api(config.provider).getServerIPv4(config); } // returns RFC 5952 formatted address (https://datatracker.ietf.org/doc/html/rfc5952) async function getServerIPv6() { - const config = await settings.getIPv6Config(); + const config = await network.getIPv6Config(); const result = await api(config.provider).getServerIPv6(config); if (!result) return null; return ipaddr.parse(result).toRFC5952String(); diff --git a/src/test/network-test.js b/src/test/network-test.js index d94eeb3f5..4027b125d 100644 --- a/src/test/network-test.js +++ b/src/test/network-test.js @@ -110,6 +110,20 @@ describe('Network', function () { }); }); + describe('IPv6 config', function () { + it('can get default IPv6 setting', async function () { + const config = await network.getIPv6Config(); + expect(config.provider).to.be('noop'); + }); + + it('can set IPv6 setting', async function () { + await network.setIPv6Config({ provider: 'generic' }); + + const config = await network.getIPv6Config(); + expect(config.provider).to.be('generic'); + }); + }); + describe('Dynamic DNS', function () { it('can get default dyndns', async function () { expect(await network.getDynamicDns()).to.be(false); diff --git a/src/test/settings-test.js b/src/test/settings-test.js index 0ca477988..3f39679a7 100644 --- a/src/test/settings-test.js +++ b/src/test/settings-test.js @@ -62,18 +62,6 @@ describe('Settings', function () { await settings.setBackupPolicy({ schedule: '00 00 2,23 * * 0,1,2', retention: { keepWithinSecs: 1 }}); }); - it('can get default IPv6 setting', async function () { - const config = await settings.getIPv6Config(); - expect(config.provider).to.be('noop'); - }); - - it('can set IPv6 setting', async function () { - await settings.setIPv6Config({ provider: 'generic' }); - - const config = await settings.getIPv6Config(); - expect(config.provider).to.be('generic'); - }); - it('can get default profile config', async function () { const profileConfig = await settings.getProfileConfig(); expect(profileConfig.lockUserProfiles).to.be(false); @@ -94,6 +82,5 @@ describe('Settings', function () { const allSettings = await settings.list(); expect(allSettings[settings.TIME_ZONE_KEY]).to.be.a('string'); expect(allSettings[settings.AUTOUPDATE_PATTERN_KEY]).to.be.a('string'); - expect(allSettings[settings.IPV6_CONFIG_KEY]).to.be.an('object'); }); });