diff --git a/src/routes/settings.js b/src/routes/settings.js index f93efbefa..9c4503047 100644 --- a/src/routes/settings.js +++ b/src/routes/settings.js @@ -15,12 +15,26 @@ var assert = require('assert'), HttpError = require('connect-lastmile').HttpError, HttpSuccess = require('connect-lastmile').HttpSuccess, safe = require('safetydance'), - settings = require('../settings.js'), - SettingsError = settings.SettingsError; + settings = require('../settings.js'); + +function toHttpError(appError) { + switch (appError.reason) { + case BoxError.NOT_FOUND: + return new HttpError(404, appError); + case BoxError.BAD_FIELD: + return new HttpError(400, appError); + case BoxError.EXTERNAL_ERROR: + return new HttpError(424, appError); + case BoxError.INTERNAL_ERROR: + case BoxError.DATABASE_ERROR: + default: + return new HttpError(500, appError); + } +} function getAppAutoupdatePattern(req, res, next) { settings.getAppAutoupdatePattern(function (error, pattern) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { pattern: pattern })); }); @@ -32,8 +46,7 @@ function setAppAutoupdatePattern(req, res, next) { if (typeof req.body.pattern !== 'string') return next(new HttpError(400, 'pattern is required')); settings.setAppAutoupdatePattern(req.body.pattern, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -41,7 +54,7 @@ function setAppAutoupdatePattern(req, res, next) { function getBoxAutoupdatePattern(req, res, next) { settings.getBoxAutoupdatePattern(function (error, pattern) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { pattern: pattern })); }); @@ -53,8 +66,7 @@ function setBoxAutoupdatePattern(req, res, next) { if (typeof req.body.pattern !== 'string') return next(new HttpError(400, 'pattern is required')); settings.setBoxAutoupdatePattern(req.body.pattern, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -66,8 +78,7 @@ function setCloudronName(req, res, next) { if (typeof req.body.name !== 'string') return next(new HttpError(400, 'name is required')); settings.setCloudronName(req.body.name, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(202, {})); }); @@ -75,7 +86,7 @@ function setCloudronName(req, res, next) { function getCloudronName(req, res, next) { settings.getCloudronName(function (error, name) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { name: name })); }); @@ -83,7 +94,7 @@ function getCloudronName(req, res, next) { function getTimeZone(req, res, next) { settings.getTimeZone(function (error, tz) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { timeZone: tz })); }); @@ -95,8 +106,7 @@ function setTimeZone(req, res, next) { if (typeof req.body.timeZone !== 'string') return next(new HttpError(400, 'timeZone is required')); settings.setTimeZone(req.body.timeZone, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -109,7 +119,7 @@ function setCloudronAvatar(req, res, next) { var avatar = safe.fs.readFileSync(req.files.avatar.path); settings.setCloudronAvatar(avatar, function (error) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(202, {})); }); @@ -117,7 +127,7 @@ function setCloudronAvatar(req, res, next) { function getCloudronAvatar(req, res, next) { settings.getCloudronAvatar(function (error, avatar) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); // avoid caching the avatar on the client to see avatar changes immediately res.set('Cache-Control', 'no-cache'); @@ -129,7 +139,7 @@ function getCloudronAvatar(req, res, next) { function getBackupConfig(req, res, next) { settings.getBackupConfig(function (error, backupConfig) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); // always send provider as it is used by the UI to figure if backups are disabled ('noop' backend) if (!custom.spec().backups.configurable) { @@ -160,9 +170,7 @@ function setBackupConfig(req, res, next) { req.clearTimeout(); settings.setBackupConfig(req.body, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error && error.reason === SettingsError.EXTERNAL_ERROR) return next(new HttpError(424, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -170,7 +178,7 @@ function setBackupConfig(req, res, next) { function getPlatformConfig(req, res, next) { settings.getPlatformConfig(function (error, config) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, config)); }); @@ -188,9 +196,7 @@ function setPlatformConfig(req, res, next) { } settings.setPlatformConfig(req.body, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error && error.reason === SettingsError.EXTERNAL_ERROR) return next(new HttpError(424, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -198,7 +204,7 @@ function setPlatformConfig(req, res, next) { function getExternalLdapConfig(req, res, next) { settings.getExternalLdapConfig(function (error, config) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, config)); }); @@ -215,9 +221,7 @@ function setExternalLdapConfig(req, res, next) { if ('bindPassword' in req.body && typeof req.body.bindPassword !== 'string') return next(new HttpError(400, 'bindPassword must be a string')); settings.setExternalLdapConfig(req.body, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error && error.reason === SettingsError.EXTERNAL_ERROR) return next(new HttpError(424, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -225,7 +229,7 @@ function setExternalLdapConfig(req, res, next) { function getDynamicDnsConfig(req, res, next) { settings.getDynamicDnsConfig(function (error, enabled) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { enabled: enabled })); }); @@ -239,8 +243,7 @@ function setDynamicDnsConfig(req, res, next) { if (typeof req.body.enabled !== 'boolean') return next(new HttpError(400, 'enabled boolean is required')); settings.setDynamicDnsConfig(req.body.enabled, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -248,7 +251,7 @@ function setDynamicDnsConfig(req, res, next) { function getUnstableAppsConfig(req, res, next) { settings.getUnstableAppsConfig(function (error, enabled) { - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, { enabled: enabled })); }); @@ -260,8 +263,7 @@ function setUnstableAppsConfig(req, res, next) { if (typeof req.body.enabled !== 'boolean') return next(new HttpError(400, 'enabled boolean is required')); settings.setUnstableAppsConfig(req.body.enabled, function (error) { - if (error && error.reason === SettingsError.BAD_FIELD) return next(new HttpError(400, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200, {})); }); @@ -275,8 +277,7 @@ function setRegistryConfig(req, res, next) { if ('password' in req.body && typeof req.body.password !== 'string') return next(new HttpError(400, 'password is required')); docker.setRegistryConfig(req.body, function (error) { - if (error && error.reason === BoxError.ACCESS_DENIED) return next(new HttpError(424, error.message)); - if (error) return next(new HttpError(500, error)); + if (error) return next(toHttpError(error)); next(new HttpSuccess(200)); }); diff --git a/src/settings.js b/src/settings.js index 2f2ff483f..4efd1a379 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,8 +1,6 @@ 'use strict'; exports = module.exports = { - SettingsError: SettingsError, - getAppAutoupdatePattern: getAppAutoupdatePattern, setAppAutoupdatePattern: setAppAutoupdatePattern, @@ -94,6 +92,7 @@ var addons = require('./addons.js'), assert = require('assert'), backups = require('./backups.js'), BackupsError = backups.BackupsError, + BoxError = require('./boxerror.js'), constants = require('./constants.js'), cron = require('./cron.js'), CronJob = require('cron').CronJob, @@ -140,31 +139,6 @@ let gDefaults = (function () { let gCache = {}; -function SettingsError(reason, errorOrMessage) { - assert.strictEqual(typeof reason, 'string'); - assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined'); - - Error.call(this); - Error.captureStackTrace(this, this.constructor); - - this.name = this.constructor.name; - this.reason = reason; - if (typeof errorOrMessage === 'undefined') { - this.message = reason; - } else if (typeof errorOrMessage === 'string') { - this.message = errorOrMessage; - } else { - this.message = 'Internal error'; - this.nestedError = errorOrMessage; - } -} -util.inherits(SettingsError, Error); -SettingsError.INTERNAL_ERROR = 'Internal Error'; -SettingsError.EXTERNAL_ERROR = 'External Error'; -SettingsError.NOT_FOUND = 'Not Found'; -SettingsError.BAD_FIELD = 'Bad Field'; - - function notifyChange(key, value) { assert.strictEqual(typeof key, 'string'); // value is a variant @@ -177,11 +151,11 @@ function setAppAutoupdatePattern(pattern, callback) { if (pattern !== constants.AUTOUPDATE_PATTERN_NEVER) { // check if pattern is valid var job = safe.safeCall(function () { return new CronJob(pattern); }); - if (!job) return callback(new SettingsError(SettingsError.BAD_FIELD, 'Invalid pattern')); + if (!job) return callback(new BoxError(BoxError.BAD_FIELD, 'Invalid pattern', { field: 'pattern' })); } settingsdb.set(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern); @@ -194,7 +168,7 @@ function getAppAutoupdatePattern(callback) { settingsdb.get(exports.APP_AUTOUPDATE_PATTERN_KEY, function (error, pattern) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.APP_AUTOUPDATE_PATTERN_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, pattern); }); @@ -206,11 +180,11 @@ function setBoxAutoupdatePattern(pattern, callback) { if (pattern !== constants.AUTOUPDATE_PATTERN_NEVER) { // check if pattern is valid var job = safe.safeCall(function () { return new CronJob(pattern); }); - if (!job) return callback(new SettingsError(SettingsError.BAD_FIELD, 'Invalid pattern')); + if (!job) return callback(new BoxError(BoxError.BAD_FIELD, 'Invalid pattern', { field: 'pattern' })); } settingsdb.set(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); @@ -223,7 +197,7 @@ function getBoxAutoupdatePattern(callback) { settingsdb.get(exports.BOX_AUTOUPDATE_PATTERN_KEY, function (error, pattern) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.BOX_AUTOUPDATE_PATTERN_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, pattern); }); @@ -233,10 +207,10 @@ function setTimeZone(tz, callback) { assert.strictEqual(typeof tz, 'string'); assert.strictEqual(typeof callback, 'function'); - if (moment.tz.names().indexOf(tz) === -1) return callback(new SettingsError(SettingsError.BAD_FIELD, 'Bad timeZone')); + if (moment.tz.names().indexOf(tz) === -1) return callback(new BoxError(BoxError.BAD_FIELD, 'Bad timeZone', { field: 'timezone' })); settingsdb.set(exports.TIME_ZONE_KEY, tz, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.TIME_ZONE_KEY, tz); @@ -249,7 +223,7 @@ function getTimeZone(callback) { settingsdb.get(exports.TIME_ZONE_KEY, function (error, tz) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.TIME_ZONE_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, tz); }); @@ -260,7 +234,7 @@ function getCloudronName(callback) { settingsdb.get(exports.CLOUDRON_NAME_KEY, function (error, name) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_NAME_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, name); }); } @@ -269,13 +243,13 @@ function setCloudronName(name, callback) { assert.strictEqual(typeof name, 'string'); assert.strictEqual(typeof callback, 'function'); - if (!name) return callback(new SettingsError(SettingsError.BAD_FIELD, 'name is empty')); + if (!name) return callback(new BoxError(BoxError.BAD_FIELD, 'name is empty', { field: 'name' })); // some arbitrary restrictions (for sake of ui layout) - if (name.length > 32) return callback(new SettingsError(SettingsError.BAD_FIELD, 'name cannot exceed 32 characters')); + if (name.length > 32) return callback(new BoxError(BoxError.BAD_FIELD, 'name cannot exceed 32 characters', { field: 'name' })); settingsdb.set(exports.CLOUDRON_NAME_KEY, name, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.CLOUDRON_NAME_KEY, name); @@ -293,7 +267,7 @@ function getCloudronAvatar(callback) { avatar = safe.fs.readFileSync(paths.CLOUDRON_DEFAULT_AVATAR_FILE); if (avatar) return callback(null, avatar); - callback(new SettingsError(SettingsError.INTERNAL_ERROR, safe.error)); + callback(new BoxError(BoxError.DATABASE_ERROR, safe.error)); } function setCloudronAvatar(avatar, callback) { @@ -301,7 +275,7 @@ function setCloudronAvatar(avatar, callback) { assert.strictEqual(typeof callback, 'function'); if (!safe.fs.writeFileSync(paths.CLOUDRON_AVATAR_FILE, avatar)) { - return callback(new SettingsError(SettingsError.INTERNAL_ERROR, safe.error)); + return callback(new BoxError(BoxError.DATABASE_ERROR, safe.error)); } return callback(null); @@ -312,7 +286,7 @@ function getDynamicDnsConfig(callback) { settingsdb.get(exports.DYNAMIC_DNS_KEY, function (error, enabled) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.DYNAMIC_DNS_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, !!enabled); // settingsdb holds string values only }); @@ -324,7 +298,7 @@ function setDynamicDnsConfig(enabled, callback) { // settingsdb takes string values only settingsdb.set(exports.DYNAMIC_DNS_KEY, enabled ? 'enabled' : '', function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.DYNAMIC_DNS_KEY, enabled); @@ -337,7 +311,7 @@ function getUnstableAppsConfig(callback) { settingsdb.get(exports.UNSTABLE_APPS_KEY, function (error, enabled) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.UNSTABLE_APPS_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, !!enabled); // settingsdb holds string values only }); @@ -349,7 +323,7 @@ function setUnstableAppsConfig(enabled, callback) { // settingsdb takes string values only settingsdb.set(exports.UNSTABLE_APPS_KEY, enabled ? 'enabled' : '', function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.UNSTABLE_APPS_KEY, enabled); @@ -362,7 +336,7 @@ function getBackupConfig(callback) { settingsdb.get(exports.BACKUP_CONFIG_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.BACKUP_CONFIG_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, JSON.parse(value)); // provider, token, key, region, prefix, bucket }); @@ -378,14 +352,14 @@ function setBackupConfig(backupConfig, callback) { backups.injectPrivateFields(backupConfig, curentConfig); backups.testConfig(backupConfig, function (error) { - if (error && error.reason === BackupsError.BAD_FIELD) return callback(new SettingsError(SettingsError.BAD_FIELD, error.message)); - if (error && error.reason === BackupsError.EXTERNAL_ERROR) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, error.message)); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error && error.reason === BackupsError.BAD_FIELD) return callback(new BoxError(BoxError.BAD_FIELD, error.message)); + if (error && error.reason === BackupsError.EXTERNAL_ERROR) return callback(new BoxError(BoxError.EXTERNAL_ERROR, error.message)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); backups.cleanupCacheFilesSync(); settingsdb.set(exports.BACKUP_CONFIG_KEY, JSON.stringify(backupConfig), function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.BACKUP_CONFIG_KEY, backupConfig); @@ -400,7 +374,7 @@ function getPlatformConfig(callback) { settingsdb.get(exports.PLATFORM_CONFIG_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.PLATFORM_CONFIG_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, JSON.parse(value)); }); @@ -411,11 +385,11 @@ function setPlatformConfig(platformConfig, callback) { for (let addon of [ 'mysql', 'postgresql', 'mail', 'mongodb' ]) { if (!platformConfig[addon]) continue; - if (platformConfig[addon].memorySwap < platformConfig[addon].memory) return callback(new SettingsError(SettingsError.BAD_FIELD, 'memorySwap must be larger than memory')); + if (platformConfig[addon].memorySwap < platformConfig[addon].memory) return callback(new BoxError(BoxError.BAD_FIELD, 'memorySwap must be larger than memory', { field: 'memory', addon })); } settingsdb.set(exports.PLATFORM_CONFIG_KEY, JSON.stringify(platformConfig), function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); addons.updateServiceConfig(platformConfig, callback); }); @@ -426,7 +400,7 @@ function getExternalLdapConfig(callback) { settingsdb.get(exports.EXTERNAL_LDAP_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.EXTERNAL_LDAP_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, JSON.parse(value)); }); @@ -437,13 +411,13 @@ function setExternalLdapConfig(externalLdapConfig, callback) { assert.strictEqual(typeof callback, 'function'); externalldap.testConfig(externalLdapConfig, function (error) { - if (error && error.reason === ExternalLdapError.BAD_FIELD) return callback(new SettingsError(SettingsError.BAD_FIELD, error.message)); - if (error && error.reason === ExternalLdapError.EXTERNAL_ERROR) return callback(new SettingsError(SettingsError.EXTERNAL_ERROR, error.message)); - if (error && error.reason === ExternalLdapError.INVALID_CREDENTIALS) return callback(new SettingsError(SettingsError.BAD_FIELD, 'invalid bind credentials')); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error && error.reason === ExternalLdapError.BAD_FIELD) return callback(new BoxError(BoxError.BAD_FIELD, error.message)); + if (error && error.reason === ExternalLdapError.EXTERNAL_ERROR) return callback(new BoxError(BoxError.EXTERNAL_ERROR, error.message)); + if (error && error.reason === ExternalLdapError.INVALID_CREDENTIALS) return callback(new BoxError(BoxError.BAD_FIELD, 'invalid bind credentials')); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); settingsdb.set(exports.EXTERNAL_LDAP_KEY, JSON.stringify(externalLdapConfig), function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.EXTERNAL_LDAP_KEY, externalLdapConfig); @@ -457,7 +431,7 @@ function getLicenseKey(callback) { settingsdb.get(exports.LICENSE_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.LICENSE_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, value); }); @@ -468,7 +442,7 @@ function setLicenseKey(licenseKey, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.LICENSE_KEY, licenseKey, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.LICENSE_KEY, licenseKey); @@ -481,7 +455,7 @@ function getCloudronId(callback) { settingsdb.get(exports.CLOUDRON_ID_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_ID_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, value); }); @@ -492,7 +466,7 @@ function setCloudronId(cid, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.CLOUDRON_ID_KEY, cid, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.CLOUDRON_ID_KEY, cid); @@ -505,7 +479,7 @@ function getCloudronToken(callback) { settingsdb.get(exports.CLOUDRON_TOKEN_KEY, function (error, value) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_TOKEN_KEY]); - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, value); }); @@ -516,7 +490,7 @@ function setCloudronToken(token, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.CLOUDRON_TOKEN_KEY, token, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); notifyChange(exports.CLOUDRON_TOKEN_KEY, token); @@ -528,7 +502,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.getAll(function (error, settings) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); var result = _.extend({ }, gDefaults); settings.forEach(function (setting) { result[setting.name] = setting.value; }); @@ -572,10 +546,10 @@ function setAdmin(adminDomain, adminFqdn, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.ADMIN_DOMAIN_KEY, adminDomain, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); settingsdb.set(exports.ADMIN_FQDN_KEY, adminFqdn, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); gCache.adminDomain = adminDomain; gCache.adminFqdn = adminFqdn; @@ -590,7 +564,7 @@ function setApiServerOrigin(origin, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.API_SERVER_ORIGIN_KEY, origin, function (error) { - if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); gCache.apiServerOrigin = origin; notifyChange(exports.API_SERVER_ORIGIN_KEY, origin); diff --git a/src/test/backups-test.js b/src/test/backups-test.js index 69f71a3c8..3e518f29d 100644 --- a/src/test/backups-test.js +++ b/src/test/backups-test.js @@ -9,6 +9,7 @@ var async = require('async'), backupdb = require('../backupdb.js'), backups = require('../backups.js'), + BoxError = require('../boxerror.js'), createTree = require('./common.js').createTree, database = require('../database'), DatabaseError = require('../databaseerror.js'), @@ -20,7 +21,6 @@ var async = require('async'), path = require('path'), rimraf = require('rimraf'), settings = require('../settings.js'), - SettingsError = require('../settings.js').SettingsError, tasks = require('../tasks.js'); function createBackup(callback) { @@ -291,8 +291,8 @@ describe('backups', function () { it('fails to set backup config for non-existing folder', function (done) { settings.setBackupConfig(gBackupConfig, function (error) { - expect(error).to.be.a(SettingsError); - expect(error.reason).to.equal(SettingsError.BAD_FIELD); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.BAD_FIELD); done(); }); @@ -313,7 +313,6 @@ describe('backups', function () { if (require('child_process').execSync('/usr/bin/mysqldump --version').toString().indexOf('MariaDB') !== -1) return done(); createBackup(function (error, result) { -console.dir(error); expect(error).to.be(null); expect(fs.statSync(path.join(gBackupConfig.backupFolder, 'snapshot/box.tar.gz')).nlink).to.be(2); // hard linked to a rotated backup expect(fs.statSync(path.join(gBackupConfig.backupFolder, `${result.id}.tar.gz`)).nlink).to.be(2);