diff --git a/src/accesscontrol.js b/src/accesscontrol.js index 428a9e778..e5a5431c1 100644 --- a/src/accesscontrol.js +++ b/src/accesscontrol.js @@ -28,7 +28,6 @@ exports = module.exports = { var assert = require('assert'), BoxError = require('./boxerror.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:accesscontrol'), tokendb = require('./tokendb.js'), users = require('./users.js'), @@ -122,7 +121,7 @@ function validateToken(accessToken, callback) { assert.strictEqual(typeof callback, 'function'); tokendb.getByAccessToken(accessToken, function (error, token) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, null /* user */, 'Invalid Token'); // will end up as a 401 + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, null /* user */, 'Invalid Token'); // will end up as a 401 if (error) return callback(error); // this triggers 'internal error' in passport users.get(token.identifier, function (error, user) { diff --git a/src/addons.js b/src/addons.js index 5469736e6..38d2bd4a2 100644 --- a/src/addons.js +++ b/src/addons.js @@ -904,7 +904,7 @@ function setupSendMail(app, options, callback) { debugApp(app, 'Setting up SendMail'); appdb.getAddonConfigByName(app.id, 'sendmail', '%MAIL_SMTP_PASSWORD', function (error, existingPassword) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(error); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); var password = error ? hat(4 * 48) : existingPassword; // see box#565 for password length @@ -1038,7 +1038,7 @@ function setupMySql(app, options, callback) { debugApp(app, 'Setting up mysql'); appdb.getAddonConfigByName(app.id, 'mysql', '%MYSQL_PASSWORD', function (error, existingPassword) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(error); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); const tmp = mysqlDatabaseName(app.id); @@ -1254,7 +1254,7 @@ function setupPostgreSql(app, options, callback) { const { database, username } = postgreSqlNames(app.id); appdb.getAddonConfigByName(app.id, 'postgresql', '%POSTGRESQL_PASSWORD', function (error, existingPassword) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(error); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); const data = { database: database, @@ -1429,7 +1429,7 @@ function setupMongoDb(app, options, callback) { debugApp(app, 'Setting up mongodb'); appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_PASSWORD', function (error, existingPassword) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(error); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); const data = { database: app.id, @@ -1567,7 +1567,7 @@ function setupRedis(app, options, callback) { const redisName = 'redis-' + app.id; appdb.getAddonConfigByName(app.id, 'redis', '%REDIS_PASSWORD', function (error, existingPassword) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(error); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); const redisPassword = error ? hat(4 * 48) : existingPassword; // see box#362 for password length const redisServiceToken = hat(4 * 48); diff --git a/src/appdb.js b/src/appdb.js index b27d36c47..4779a1fc0 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -33,8 +33,8 @@ exports = module.exports = { var assert = require('assert'), async = require('async'), + BoxError = require('./boxerror.js'), database = require('./database.js'), - DatabaseError = require('./databaseerror'), safe = require('safetydance'), util = require('util'); @@ -126,11 +126,11 @@ function get(id, callback) { + ' LEFT OUTER JOIN appEnvVars ON apps.id = appEnvVars.appId' + ' LEFT OUTER JOIN subdomains ON apps.id = subdomains.appId AND subdomains.type = ?' + ' WHERE apps.id = ? GROUP BY apps.id', [ exports.SUBDOMAIN_TYPE_PRIMARY, id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); database.query('SELECT ' + SUBDOMAIN_FIELDS + ' FROM subdomains WHERE appId = ? AND type = ?', [ id, exports.SUBDOMAIN_TYPE_REDIRECT ], function (error, alternateDomains) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); result[0].alternateDomains = alternateDomains; @@ -153,11 +153,11 @@ function getByHttpPort(httpPort, callback) { + ' LEFT OUTER JOIN appEnvVars ON apps.id = appEnvVars.appId' + ' LEFT OUTER JOIN subdomains ON apps.id = subdomains.appId AND subdomains.type = ?' + ' WHERE httpPort = ? GROUP BY apps.id', [ exports.SUBDOMAIN_TYPE_PRIMARY, httpPort ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); database.query('SELECT ' + SUBDOMAIN_FIELDS + ' FROM subdomains WHERE appId = ? AND type = ?', [ result[0].id, exports.SUBDOMAIN_TYPE_REDIRECT ], function (error, alternateDomains) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); result[0].alternateDomains = alternateDomains; postProcess(result[0]); @@ -179,11 +179,11 @@ function getByContainerId(containerId, callback) { + ' LEFT OUTER JOIN appEnvVars ON apps.id = appEnvVars.appId' + ' LEFT OUTER JOIN subdomains ON apps.id = subdomains.appId AND subdomains.type = ?' + ' WHERE containerId = ? GROUP BY apps.id', [ exports.SUBDOMAIN_TYPE_PRIMARY, containerId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); database.query('SELECT ' + SUBDOMAIN_FIELDS + ' FROM subdomains WHERE appId = ? AND type = ?', [ result[0].id, exports.SUBDOMAIN_TYPE_REDIRECT ], function (error, alternateDomains) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); result[0].alternateDomains = alternateDomains; postProcess(result[0]); @@ -204,10 +204,10 @@ function getAll(callback) { + ' LEFT OUTER JOIN appEnvVars ON apps.id = appEnvVars.appId' + ' LEFT OUTER JOIN subdomains ON apps.id = subdomains.appId AND subdomains.type = ?' + ' GROUP BY apps.id ORDER BY apps.id', [ exports.SUBDOMAIN_TYPE_PRIMARY ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); database.query('SELECT ' + SUBDOMAIN_FIELDS + ' FROM subdomains WHERE type = ?', [ exports.SUBDOMAIN_TYPE_REDIRECT ], function (error, alternateDomains) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); alternateDomains.forEach(function (d) { var domain = results.find(function (a) { return d.appId === a.id; }); @@ -290,9 +290,9 @@ function add(id, appStoreId, manifest, location, domain, portBindings, data, cal } database.transaction(queries, function (error) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error.message)); - if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND, 'no such domain')); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error.message)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.NOT_FOUND, 'no such domain')); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -303,7 +303,7 @@ function exists(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT 1 FROM apps WHERE id=?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null, result.length !== 0); }); @@ -314,7 +314,7 @@ function getPortBindings(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + PORT_BINDINGS_FIELDS + ' FROM appPortBindings WHERE appId = ?', [ id ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); var portBindings = { }; for (var i = 0; i < results.length; i++) { @@ -331,8 +331,8 @@ function delPortBinding(hostPort, type, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM appPortBindings WHERE hostPort=? AND type=?', [ hostPort, type ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -350,8 +350,8 @@ function del(id, callback) { ]; database.transaction(queries, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results[3].affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results[3].affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -367,7 +367,7 @@ function clear(callback) { database.query.bind(null, 'DELETE FROM appEnvVars'), database.query.bind(null, 'DELETE FROM apps') ], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null); }); } @@ -438,9 +438,9 @@ function updateWithConstraints(id, app, constraints, callback) { } database.transaction(queries, function (error, results) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error.message)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results[results.length - 1].affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error.message)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results[results.length - 1].affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -476,7 +476,7 @@ function getAppStoreIds(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT id, appStoreId FROM apps', function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -501,7 +501,7 @@ function setAddonConfig(appId, addonId, env, callback) { } database.query(query + queryArgs.join(','), args, function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null); }); @@ -514,7 +514,7 @@ function unsetAddonConfig(appId, addonId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM appAddonConfigs WHERE appId = ? AND addonId = ?', [ appId, addonId ], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -525,7 +525,7 @@ function unsetAddonConfigByAppId(appId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM appAddonConfigs WHERE appId = ?', [ appId ], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -537,7 +537,7 @@ function getAddonConfig(appId, addonId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT name, value FROM appAddonConfigs WHERE appId = ? AND addonId = ?', [ appId, addonId ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -548,7 +548,7 @@ function getAddonConfigByAppId(appId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT name, value FROM appAddonConfigs WHERE appId = ?', [ appId ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -561,8 +561,8 @@ function getAppIdByAddonConfigValue(addonId, namePattern, value, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT appId FROM appAddonConfigs WHERE addonId = ? AND name LIKE ? AND value = ?', [ addonId, namePattern, value ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, results[0].appId); }); @@ -575,8 +575,8 @@ function getAddonConfigByName(appId, addonId, namePattern, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT value FROM appAddonConfigs WHERE appId = ? AND addonId = ? AND name LIKE ?', [ appId, addonId, namePattern ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, results[0].value); }); diff --git a/src/apphealthmonitor.js b/src/apphealthmonitor.js index 5b0519812..5db8dc720 100644 --- a/src/apphealthmonitor.js +++ b/src/apphealthmonitor.js @@ -5,7 +5,7 @@ var appdb = require('./appdb.js'), assert = require('assert'), async = require('async'), auditSource = require('./auditsource.js'), - DatabaseError = require('./databaseerror.js'), + BoxError = require('./boxerror.js'), debug = require('debug')('box:apphealthmonitor'), docker = require('./docker.js'), eventlog = require('./eventlog.js'), @@ -57,7 +57,7 @@ function setHealth(app, health, callback) { } appdb.setHealth(app.id, health, healthTime, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null); // app uninstalled? + if (error && error.reason === BoxError.NOT_FOUND) return callback(null); // app uninstalled? if (error) return callback(error); app.health = health; diff --git a/src/apps.js b/src/apps.js index 7d7cd4934..ba3a67184 100644 --- a/src/apps.js +++ b/src/apps.js @@ -108,7 +108,6 @@ var appdb = require('./appdb.js'), backups = require('./backups.js'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:apps'), docker = require('./docker.js'), domaindb = require('./domaindb.js'), @@ -475,8 +474,8 @@ function get(appId, callback) { if (error) return callback(error); appdb.get(appId, function (error, app) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); + if (error) return callback(error); postProcess(app, domainObjectMap); @@ -493,8 +492,8 @@ function getByContainerId(containerId, callback) { if (error) return callback(error); appdb.getByContainerId(containerId, function (error, app) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); + if (error) return callback(error); postProcess(app, domainObjectMap); @@ -546,7 +545,7 @@ function getAll(callback) { if (error) return callback(error); appdb.getAll(function (error, apps) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); apps.forEach((app) => postProcess(app, domainObjectMap)); @@ -631,9 +630,8 @@ function addTask(appId, installationState, task, callback) { if (error) return callback(error); appdb.setTask(appId, _.extend({ installationState, taskId, error: null }, values), { requiredState, requireNullTaskId }, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new BoxError(BoxError.ALREADY_EXISTS, error.message)); - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.BAD_STATE, 'Another task is scheduled for this app')); // could be because app went away OR a taskId exists - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.BAD_STATE, 'Another task is scheduled for this app')); // could be because app went away OR a taskId exists + if (error) return callback(error); if (scheduleNow) scheduleTask(appId, installationState, taskId, NOOP_CALLBACK); @@ -779,9 +777,8 @@ function install(data, user, auditSource, callback) { }; appdb.add(appId, appStoreId, manifest, location, domain, translatePortBindings(portBindings, manifest), data, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(error.message, locations, domainObjectMap, portBindings)); - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, error.message)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(error.message, locations, domainObjectMap, portBindings)); + if (error) return callback(error); purchaseApp({ appId: appId, appstoreId: appStoreId, manifestId: manifest.id }, function (error) { if (error) return callback(error); @@ -828,8 +825,7 @@ function setAccessRestriction(appId, accessRestriction, auditSource, callback) { if (error) return callback(error); appdb.update(appId, { accessRestriction: accessRestriction }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: app, accessRestriction: accessRestriction }); @@ -851,8 +847,7 @@ function setLabel(appId, label, auditSource, callback) { if (error) return callback(error); appdb.update(appId, { label: label }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: app, label: label }); @@ -874,8 +869,7 @@ function setTags(appId, tags, auditSource, callback) { if (error) return callback(error); appdb.update(appId, { tags: tags }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: app, tags: tags }); @@ -1039,8 +1033,7 @@ function setAutomaticBackup(appId, enable, auditSource, callback) { if (error) return callback(error); appdb.update(appId, { enableBackup: enable }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: app, enableBackup: enable }); @@ -1059,8 +1052,7 @@ function setAutomaticUpdate(appId, enable, auditSource, callback) { if (error) return callback(error); appdb.update(appId, { enableAutomaticUpdate: enable }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: app, enableAutomaticUpdate: enable }); @@ -1090,8 +1082,7 @@ function setReverseProxyConfig(appId, reverseProxyConfig, auditSource, callback) if (error) return callback(error); appdb.update(appId, { reverseProxyConfig }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such app')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, reverseProxyConfig }); @@ -1575,8 +1566,8 @@ function clone(appId, data, user, auditSource, callback) { }; appdb.add(newAppId, appStoreId, manifest, location, domain, translatePortBindings(portBindings, manifest), data, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(error.message, locations, domainObjectMap, portBindings)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.ALREADY_EXISTS) return callback(getDuplicateErrorDetails(error.message, locations, domainObjectMap, portBindings)); + if (error) return callback(error); purchaseApp({ appId: newAppId, appstoreId: app.appStoreId, manifestId: manifest.id }, function (error) { if (error) return callback(error); @@ -1622,7 +1613,7 @@ function uninstall(appId, auditSource, callback) { if (error && error.reason === AppstoreError.INVALID_TOKEN) return callback(new BoxError(BoxError.EXTERNAL_ERROR, error.message)); if (error && error.reason === AppstoreError.LICENSE_ERROR) return callback(new BoxError(BoxError.EXTERNAL_ERROR, error.message)); if (error && error.reason === AppstoreError.EXTERNAL_ERROR) return callback(new BoxError(BoxError.EXTERNAL_ERROR, error.message)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); const task = { args: {}, diff --git a/src/apptask.js b/src/apptask.js index 0781d4111..daa6fd585 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -28,7 +28,6 @@ var addons = require('./addons.js'), backups = require('./backups.js'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:apptask'), df = require('@sindresorhus/df'), docker = require('./docker.js'), @@ -904,7 +903,7 @@ function update(app, args, progressCallback, callback) { if (newTcpPorts[portName] || newUdpPorts[portName]) return callback(null); // port still in use appdb.delPortBinding(currentPorts[portName], apps.PORT_TYPE_TCP, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) console.error('Portbinding does not exist in database.'); + if (error && error.reason === BoxError.NOT_FOUND) console.error('Portbinding does not exist in database.'); else if (error) return next(error); // also delete from app object for further processing (the db is updated in the next step) diff --git a/src/authcodedb.js b/src/authcodedb.js index 836417b40..d4dc1c8cf 100644 --- a/src/authcodedb.js +++ b/src/authcodedb.js @@ -12,8 +12,8 @@ exports = module.exports = { }; var assert = require('assert'), - database = require('./database.js'), - DatabaseError = require('./databaseerror'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); var AUTHCODES_FIELDS = [ 'authCode', 'userId', 'clientId', 'expiresAt' ].join(','); @@ -22,8 +22,8 @@ function get(authCode, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + AUTHCODES_FIELDS + ' FROM authcodes WHERE authCode = ? AND expiresAt > ?', [ authCode, Date.now() ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -37,12 +37,12 @@ function add(authCode, clientId, userId, expiresAt, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO authcodes (authCode, clientId, userId, expiresAt) VALUES (?, ?, ?, ?)', - [ authCode, clientId, userId, expiresAt ], function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); - if (error || result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + [ authCode, clientId, userId, expiresAt ], function (error, result) { + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS)); + if (error || result.affectedRows !== 1) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); - callback(null); - }); + callback(null); + }); } function del(authCode, callback) { @@ -50,8 +50,8 @@ function del(authCode, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM authcodes WHERE authCode = ?', [ authCode ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -61,7 +61,7 @@ function delExpired(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM authcodes WHERE expiresAt <= ?', [ Date.now() ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null, result.affectedRows); }); } @@ -70,7 +70,7 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM authcodes', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); diff --git a/src/backupdb.js b/src/backupdb.js index 146659b48..74b6d74b3 100644 --- a/src/backupdb.js +++ b/src/backupdb.js @@ -1,8 +1,8 @@ 'use strict'; var assert = require('assert'), + BoxError = require('./boxerror.js'), database = require('./database.js'), - DatabaseError = require('./databaseerror.js'), safe = require('safetydance'), util = require('util'); @@ -47,7 +47,7 @@ function getByTypeAndStatePaged(type, state, page, perPage, callback) { database.query('SELECT ' + BACKUPS_FIELDS + ' FROM backups WHERE type = ? AND state = ? ORDER BY creationTime DESC LIMIT ?,?', [ type, state, (page-1)*perPage, perPage ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(function (result) { postProcess(result); }); @@ -63,7 +63,7 @@ function getByTypePaged(type, page, perPage, callback) { database.query('SELECT ' + BACKUPS_FIELDS + ' FROM backups WHERE type = ? ORDER BY creationTime DESC LIMIT ?,?', [ type, (page-1)*perPage, perPage ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(function (result) { postProcess(result); }); @@ -80,7 +80,7 @@ function getByAppIdPaged(page, perPage, appId, callback) { // box versions (0.93.x and below) used to use appbackup_ prefix database.query('SELECT ' + BACKUPS_FIELDS + ' FROM backups WHERE type = ? AND state = ? AND id LIKE ? ORDER BY creationTime DESC LIMIT ?,?', [ exports.BACKUP_TYPE_APP, exports.BACKUP_STATE_NORMAL, '%app%\\_' + appId + '\\_%', (page-1)*perPage, perPage ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(function (result) { postProcess(result); }); @@ -94,8 +94,8 @@ function get(id, callback) { database.query('SELECT ' + BACKUPS_FIELDS + ' FROM backups WHERE id = ? ORDER BY creationTime DESC', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); postProcess(result[0]); @@ -119,8 +119,8 @@ function add(id, data, callback) { database.query('INSERT INTO backups (id, version, type, creationTime, state, dependsOn, manifestJson, format) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [ id, data.version, data.type, creationTime, exports.BACKUP_STATE_NORMAL, data.dependsOn.join(','), manifestJson, data.format ], function (error) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -139,8 +139,8 @@ function update(id, backup, callback) { values.push(id); database.query('UPDATE backups SET ' + fields.join(', ') + ' WHERE id = ?', values, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -150,7 +150,7 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); database.query('TRUNCATE TABLE backups', [], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); } @@ -160,7 +160,7 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM backups WHERE id=?', [ id ], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); } diff --git a/src/backups.js b/src/backups.js index c1365989a..d2d606735 100644 --- a/src/backups.js +++ b/src/backups.js @@ -46,7 +46,6 @@ var addons = require('./addons.js'), constants = require('./constants.js'), crypto = require('crypto'), database = require('./database.js'), - DatabaseError = require('./databaseerror.js'), DataLayout = require('./datalayout.js'), debug = require('debug')('box:backups'), df = require('@sindresorhus/df'), @@ -126,7 +125,7 @@ function getByStatePaged(state, page, perPage, callback) { assert.strictEqual(typeof callback, 'function'); backupdb.getByTypeAndStatePaged(backupdb.BACKUP_TYPE_BOX, state, page, perPage, function (error, results) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, results); }); @@ -139,7 +138,7 @@ function getByAppIdPaged(page, perPage, appId, callback) { assert.strictEqual(typeof callback, 'function'); backupdb.getByAppIdPaged(page, perPage, appId, function (error, results) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, results); }); @@ -150,8 +149,7 @@ function get(backupId, callback) { assert.strictEqual(typeof callback, 'function'); backupdb.get(backupId, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -782,7 +780,7 @@ function rotateBoxBackup(backupConfig, tag, appBackupIds, progressCallback, call debug(`Rotating box backup to id ${backupId}`); backupdb.add(backupId, { version: constants.VERSION, type: backupdb.BACKUP_TYPE_BOX, dependsOn: appBackupIds, manifest: null, format: format }, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); var copy = api(backupConfig.provider).copy(backupConfig, getBackupFilePath(backupConfig, 'snapshot/box', format), getBackupFilePath(backupConfig, backupId, format)); copy.on('progress', (message) => progressCallback({ message })); @@ -791,7 +789,7 @@ function rotateBoxBackup(backupConfig, tag, appBackupIds, progressCallback, call backupdb.update(backupId, { state: state }, function (error) { if (copyBackupError) return callback(copyBackupError); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); debug(`Rotated box backup successfully as id ${backupId}`); @@ -873,7 +871,7 @@ function rotateAppBackup(backupConfig, app, tag, options, progressCallback, call backupdb.update(backupId, { preserveSecs: options.preserveSecs || 0, state: state }, function (error) { if (copyBackupError) return callback(copyBackupError); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); debug(`Rotated app backup of ${app.id} successfully to id ${backupId}`); @@ -1081,7 +1079,7 @@ function cleanupAppBackups(backupConfig, referencedAppBackups, callback) { // we clean app backups of any state because the ones to keep are determined by the box cleanup code backupdb.getByTypePaged(backupdb.BACKUP_TYPE_APP, 1, 1000, function (error, appBackups) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); async.eachSeries(appBackups, function iterator(appBackup, iteratorDone) { if (referencedAppBackups.indexOf(appBackup.id) !== -1) return iteratorDone(); diff --git a/src/clientdb.js b/src/clientdb.js index 53ca1754f..e38155705 100644 --- a/src/clientdb.js +++ b/src/clientdb.js @@ -21,8 +21,8 @@ exports = module.exports = { var assert = require('assert'), async = require('async'), - database = require('./database.js'), - DatabaseError = require('./databaseerror.js'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); var CLIENTS_FIELDS = [ 'id', 'appId', 'type', 'clientSecret', 'redirectURI', 'scope' ].join(','); var CLIENTS_FIELDS_PREFIXED = [ 'clients.id', 'clients.appId', 'clients.type', 'clients.clientSecret', 'clients.redirectURI', 'clients.scope' ].join(','); @@ -32,8 +32,8 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS + ' FROM clients WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -43,7 +43,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS + ' FROM clients ORDER BY appId', function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -53,7 +53,7 @@ function getAllWithTokenCount(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS_PREFIXED + ',COUNT(tokens.clientId) AS tokenCount FROM clients LEFT OUTER JOIN tokens ON clients.id=tokens.clientId GROUP BY clients.id', [], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -64,7 +64,7 @@ function getAllWithTokenCountByIdentifier(identifier, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS_PREFIXED + ',COUNT(tokens.clientId) AS tokenCount FROM clients LEFT OUTER JOIN tokens ON clients.id=tokens.clientId WHERE tokens.identifier=? GROUP BY clients.id', [ identifier ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -75,8 +75,8 @@ function getByAppId(appId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS + ' FROM clients WHERE appId = ? LIMIT 1', [ appId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -88,8 +88,8 @@ function getByAppIdAndType(appId, type, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + CLIENTS_FIELDS + ' FROM clients WHERE appId = ? AND type = ? LIMIT 1', [ appId, type ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -107,8 +107,8 @@ function add(id, appId, type, clientSecret, redirectURI, scope, callback) { var data = [ id, appId, type, clientSecret, redirectURI, scope ]; database.query('INSERT INTO clients (id, appId, type, clientSecret, redirectURI, scope) VALUES (?, ?, ?, ?, ?, ?)', data, function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); - if (error || result.affectedRows === 0) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS)); + if (error || result.affectedRows === 0) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -126,8 +126,8 @@ function upsert(id, appId, type, clientSecret, redirectURI, scope, callback) { var data = [ id, appId, type, clientSecret, redirectURI, scope ]; database.query('REPLACE INTO clients (id, appId, type, clientSecret, redirectURI, scope) VALUES (?, ?, ?, ?, ?, ?)', data, function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); - if (error || result.affectedRows === 0) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS)); + if (error || result.affectedRows === 0) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -138,8 +138,8 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM clients WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -150,8 +150,8 @@ function delByAppId(appId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM clients WHERE appId=?', [ appId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -163,8 +163,8 @@ function delByAppIdAndType(appId, type, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM clients WHERE appId=? AND type=?', [ appId, type ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -174,7 +174,7 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM clients WHERE id!="cid-webadmin" AND id!="cid-sdk" AND id!="cid-cli"', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); diff --git a/src/clients.js b/src/clients.js index 03922d0f2..b6a810b52 100644 --- a/src/clients.js +++ b/src/clients.js @@ -31,7 +31,6 @@ var apps = require('./apps.js'), BoxError = require('./boxerror.js'), clientdb = require('./clientdb.js'), constants = require('./constants.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:clients'), eventlog = require('./eventlog.js'), hat = require('./hat.js'), @@ -98,8 +97,7 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); clientdb.get(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such client')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -110,8 +108,7 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); clientdb.del(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such client')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -121,8 +118,8 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); clientdb.getAll(function (error, results) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, []); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, []); + if (error) return callback(error); var tmp = []; async.each(results, function (record, callback) { @@ -163,8 +160,7 @@ function getByAppIdAndType(appId, type, callback) { assert.strictEqual(typeof callback, 'function'); clientdb.getByAppIdAndType(appId, type, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such client')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -176,7 +172,7 @@ function getTokensByUserId(clientId, userId, callback) { assert.strictEqual(typeof callback, 'function'); tokendb.getByIdentifierAndClientId(userId, clientId, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) { + if (error && error.reason === BoxError.NOT_FOUND) { // this can mean either that there are no tokens or the clientId is actually unknown get(clientId, function (error/*, result*/) { if (error) return callback(error); @@ -195,7 +191,7 @@ function delTokensByUserId(clientId, userId, callback) { assert.strictEqual(typeof callback, 'function'); tokendb.delByIdentifierAndClientId(userId, clientId, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) { + if (error && error.reason === BoxError.NOT_FOUND) { // this can mean either that there are no tokens or the clientId is actually unknown get(clientId, function (error/*, result*/) { if (error) return callback(error); @@ -217,10 +213,9 @@ function delByAppIdAndType(appId, type, callback) { if (error) return callback(error); tokendb.delByClientId(result.id, function (error) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); clientdb.delByAppIdAndType(appId, type, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such client')); if (error) return callback(error); callback(null); @@ -264,7 +259,7 @@ function addTokenByUserId(clientId, userId, expiresAt, options, callback) { }; tokendb.add(token, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, { accessToken: token.accessToken, @@ -305,8 +300,7 @@ function delToken(clientId, tokenId, callback) { if (error) return callback(error); tokendb.del(tokenId, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'Invalid token')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); diff --git a/src/domaindb.js b/src/domaindb.js index d766dc1ef..5c0c17f31 100644 --- a/src/domaindb.js +++ b/src/domaindb.js @@ -12,8 +12,8 @@ exports = module.exports = { }; var assert = require('assert'), + BoxError = require('./boxerror.js'), database = require('./database.js'), - DatabaseError = require('./databaseerror'), safe = require('safetydance'); var DOMAINS_FIELDS = [ 'domain', 'zoneName', 'provider', 'configJson', 'tlsConfigJson', 'locked' ].join(','); @@ -34,8 +34,8 @@ function get(domain, callback) { assert.strictEqual(typeof callback, 'function'); database.query(`SELECT ${DOMAINS_FIELDS} FROM domains WHERE domain=?`, [ domain ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); postProcess(result[0]); @@ -45,7 +45,7 @@ function get(domain, callback) { function getAll(callback) { database.query(`SELECT ${DOMAINS_FIELDS} FROM domains ORDER BY domain`, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); @@ -63,8 +63,8 @@ function add(name, domain, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO domains (domain, zoneName, provider, configJson, tlsConfigJson) VALUES (?, ?, ?, ?, ?)', [ name, domain.zoneName, domain.provider, JSON.stringify(domain.config), JSON.stringify(domain.tlsConfig) ], function (error) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -91,8 +91,8 @@ function update(name, domain, callback) { args.push(name); database.query('UPDATE domains SET ' + fields.join(', ') + ' WHERE domain=?', args, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -103,9 +103,9 @@ function del(domain, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM domains WHERE domain=?', [ domain ], function (error, result) { - if (error && error.code === 'ER_ROW_IS_REFERENCED_2') return callback(new DatabaseError(DatabaseError.IN_USE)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error && error.code === 'ER_ROW_IS_REFERENCED_2') return callback(new BoxError(BoxError.CONFLICT)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -113,7 +113,7 @@ function del(domain, callback) { function clear(callback) { database.query('DELETE FROM domains', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(error); }); diff --git a/src/domains.js b/src/domains.js index eb2a6ce81..a0dbdc47d 100644 --- a/src/domains.js +++ b/src/domains.js @@ -37,7 +37,6 @@ var assert = require('assert'), async = require('async'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:domains'), domaindb = require('./domaindb.js'), eventlog = require('./eventlog.js'), @@ -198,8 +197,7 @@ function add(domain, data, auditSource, callback) { if (error) return callback(error); domaindb.add(domain, { zoneName: zoneName, provider: provider, config: sanitizedConfig, tlsConfig: tlsConfig }, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new BoxError(BoxError.ALREADY_EXISTS)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); reverseProxy.setFallbackCertificate(domain, fallbackCertificate, function (error) { if (error) return callback(error); @@ -218,8 +216,7 @@ function get(domain, callback) { domaindb.get(domain, function (error, result) { // TODO try to find subdomain entries maybe based on zoneNames or so - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); reverseProxy.getFallbackCertificate(domain, function (_, bundle) { // never returns an error var cert = safe.fs.readFileSync(bundle.certFilePath, 'utf-8'); @@ -238,7 +235,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); domaindb.getAll(function (error, result) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -257,8 +254,7 @@ function update(domain, data, auditSource, callback) { let { zoneName, provider, config, fallbackCertificate, tlsConfig } = data; domaindb.get(domain, function (error, domainObject) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); if (zoneName) { if (!tld.isValid(zoneName)) return callback(new BoxError(BoxError.BAD_FIELD, 'Invalid zoneName', { field: 'zoneName' })); @@ -287,8 +283,7 @@ function update(domain, data, auditSource, callback) { }; domaindb.update(domain, newData, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); if (!fallbackCertificate) return callback(); @@ -312,9 +307,7 @@ function del(domain, auditSource, callback) { if (domain === settings.adminDomain()) return callback(new BoxError(BoxError.CONFLICT, 'Cannot remove admin domain')); domaindb.del(domain, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error && error.reason === DatabaseError.IN_USE) return callback(new BoxError(BoxError.CONFLICT, 'Domain is still in use. Remove all apps and mailboxes using this domain')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); eventlog.add(eventlog.ACTION_DOMAIN_REMOVE, auditSource, { domain }); @@ -326,7 +319,7 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); domaindb.clear(function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null); }); diff --git a/src/eventlog.js b/src/eventlog.js index 7ff800231..4f185bb4b 100644 --- a/src/eventlog.js +++ b/src/eventlog.js @@ -62,7 +62,6 @@ exports = module.exports = { var assert = require('assert'), BoxError = require('./boxerror.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:eventlog'), eventlogdb = require('./eventlogdb.js'), notifications = require('./notifications.js'), @@ -97,8 +96,7 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); eventlogdb.get(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'No such event')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -112,7 +110,7 @@ function getAllPaged(actions, search, page, perPage, callback) { assert.strictEqual(typeof callback, 'function'); eventlogdb.getAllPaged(actions, search, page, perPage, function (error, events) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, events); }); @@ -123,7 +121,7 @@ function getByCreationTime(creationTime, callback) { assert.strictEqual(typeof callback, 'function'); eventlogdb.getByCreationTime(creationTime, function (error, events) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, events); }); @@ -136,7 +134,7 @@ function cleanup(callback) { d.setDate(d.getDate() - 10); // 10 days ago eventlogdb.delByCreationTime(d, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); diff --git a/src/eventlogdb.js b/src/eventlogdb.js index 3fa5ef3d5..98ea4ae66 100644 --- a/src/eventlogdb.js +++ b/src/eventlogdb.js @@ -14,8 +14,8 @@ exports = module.exports = { var assert = require('assert'), async = require('async'), + BoxError = require('./boxerror.js'), database = require('./database.js'), - DatabaseError = require('./databaseerror'), mysql = require('mysql'), safe = require('safetydance'), util = require('util'); @@ -35,8 +35,8 @@ function get(eventId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + EVENTLOG_FIELDS + ' FROM eventlog WHERE id = ?', [ eventId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, postProcess(result[0])); }); @@ -68,7 +68,7 @@ function getAllPaged(actions, search, page, perPage, callback) { data.push(perPage); database.query(query, data, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); @@ -82,7 +82,7 @@ function getByCreationTime(creationTime, callback) { var query = 'SELECT ' + EVENTLOG_FIELDS + ' FROM eventlog WHERE creationTime >= ? ORDER BY creationTime DESC'; database.query(query, [ creationTime ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); @@ -98,8 +98,8 @@ function add(id, action, source, data, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO eventlog (id, action, source, data) VALUES (?, ?, ?, ?)', [ id, action, JSON.stringify(source), JSON.stringify(data) ], function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error)); - if (error || result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error)); + if (error || result.affectedRows !== 1) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, id); }); @@ -123,7 +123,7 @@ function upsert(id, action, source, data, callback) { }]; database.transaction(queries, function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); if (result[0].affectedRows >= 1) return callback(null, result[1][0].id); // no existing eventlog found, create one @@ -135,7 +135,7 @@ function count(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT COUNT(*) AS total FROM eventlog', function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null, result[0].total); }); @@ -143,7 +143,7 @@ function count(callback) { function clear(callback) { database.query('DELETE FROM eventlog', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -155,7 +155,7 @@ function delByCreationTime(creationTime, callback) { // remove notifications that reference the events as well database.query('SELECT * FROM eventlog WHERE creationTime <= ?', [ creationTime ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); async.eachSeries(result, function (item, iteratorCallback) { async.series([ @@ -163,7 +163,7 @@ function delByCreationTime(creationTime, callback) { database.query.bind(null, 'DELETE FROM eventlog WHERE id=?', [ item.id ]) ], iteratorCallback); }, function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); diff --git a/src/groupdb.js b/src/groupdb.js index 3d7c261ae..5997fc95d 100644 --- a/src/groupdb.js +++ b/src/groupdb.js @@ -25,8 +25,8 @@ exports = module.exports = { }; var assert = require('assert'), - database = require('./database.js'), - DatabaseError = require('./databaseerror'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); var GROUPS_FIELDS = [ 'id', 'name' ].join(','); @@ -35,8 +35,8 @@ function get(groupId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + GROUPS_FIELDS + ' FROM userGroups WHERE id = ? ORDER BY name', [ groupId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -50,8 +50,8 @@ function getWithMembers(groupId, callback) { ' FROM userGroups LEFT OUTER JOIN groupMembers ON userGroups.id = groupMembers.groupId ' + ' WHERE userGroups.id = ? ' + ' GROUP BY userGroups.id', [ groupId ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); var result = results[0]; result.userIds = result.userIds ? result.userIds.split(',') : [ ]; @@ -64,7 +64,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + GROUPS_FIELDS + ' FROM userGroups', function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -74,8 +74,8 @@ function getAllWithMembers(callback) { database.query('SELECT ' + GROUPS_FIELDS + ',GROUP_CONCAT(groupMembers.userId) AS userIds ' + ' FROM userGroups LEFT OUTER JOIN groupMembers ON userGroups.id = groupMembers.groupId ' + ' GROUP BY userGroups.id', function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); results.forEach(function (result) { result.userIds = result.userIds ? result.userIds.split(',') : [ ]; }); @@ -89,8 +89,8 @@ function add(id, name, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO userGroups (id, name) VALUES (?, ?)', [ id, name ], function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error)); - if (error || result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error)); + if (error || result.affectedRows !== 1) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -113,9 +113,9 @@ function update(id, data, callback) { args.push(id); database.query('UPDATE userGroups SET ' + fields.join(', ') + ' WHERE id = ?', args, function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY' && error.sqlMessage.indexOf('userGroups_name') !== -1) return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, 'name already exists')); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error && error.code === 'ER_DUP_ENTRY' && error.sqlMessage.indexOf('userGroups_name') !== -1) return callback(new BoxError(BoxError.ALREADY_EXISTS, 'name already exists')); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -131,8 +131,8 @@ function del(id, callback) { queries.push({ query: 'DELETE FROM userGroups WHERE id = ?', args: [ id ] }); database.transaction(queries, function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result[1].affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result[1].affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(error); }); @@ -142,7 +142,7 @@ function count(callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT COUNT(*) AS total FROM userGroups', function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null, result[0].total); }); @@ -150,10 +150,10 @@ function count(callback) { function clear(callback) { database.query('DELETE FROM groupMembers', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); database.query('DELETE FROM userGroups', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(error); }); @@ -165,8 +165,8 @@ function getMembers(groupId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT userId FROM groupMembers WHERE groupId=?', [ groupId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - // if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); // need to differentiate group with no members and invalid groupId + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + // if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); // need to differentiate group with no members and invalid groupId callback(error, result.map(function (r) { return r.userId; })); }); @@ -184,8 +184,8 @@ function setMembers(groupId, userIds, callback) { } database.transaction(queries, function (error) { - if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(error); }); @@ -196,8 +196,8 @@ function getMembership(userId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT groupId FROM groupMembers WHERE userId=? ORDER BY groupId', [ userId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - // if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); // need to differentiate group with no members and invalid groupId + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + // if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); // need to differentiate group with no members and invalid groupId callback(error, result.map(function (r) { return r.groupId; })); }); @@ -215,8 +215,8 @@ function setMembership(userId, groupIds, callback) { }); database.transaction(queries, function (error) { - if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND, error.message)); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.NOT_FOUND, error.message)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -228,9 +228,9 @@ function addMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO groupMembers (groupId, userId) VALUES (?, ?)', [ groupId, userId ], function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error)); - if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND)); - if (error || result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.NOT_FOUND)); + if (error || result.affectedRows !== 1) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -242,8 +242,8 @@ function removeMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM groupMembers WHERE groupId = ? AND userId = ?', [ groupId, userId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -255,7 +255,7 @@ function isMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT 1 FROM groupMembers WHERE groupId=? AND userId=?', [ groupId, userId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, result.length !== 0); }); @@ -267,7 +267,7 @@ function getGroups(userId, callback) { database.query('SELECT ' + GROUPS_FIELDS + ' ' + ' FROM userGroups INNER JOIN groupMembers ON userGroups.id = groupMembers.groupId AND groupMembers.userId = ?', [ userId ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); diff --git a/src/groups.js b/src/groups.js index 1c359e43b..6f8aa69b5 100644 --- a/src/groups.js +++ b/src/groups.js @@ -26,7 +26,6 @@ exports = module.exports = { var assert = require('assert'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), - DatabaseError = require('./databaseerror.js'), groupdb = require('./groupdb.js'), uuid = require('uuid'), _ = require('underscore'); @@ -58,8 +57,7 @@ function create(name, callback) { var id = 'gid-' + uuid.v4(); groupdb.add(id, name, function (error) { - if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new BoxError(BoxError.ALREADY_EXISTS)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, { id: id, name: name }); }); @@ -70,8 +68,7 @@ function remove(id, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.del(id, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); @@ -82,8 +79,7 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.get(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -94,8 +90,7 @@ function getWithMembers(id, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getWithMembers(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -105,7 +100,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getAll(function (error, result) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -115,7 +110,7 @@ function getAllWithMembers(callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getAllWithMembers(function (error, result) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -126,8 +121,7 @@ function getMembers(groupId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getMembers(groupId, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -138,8 +132,7 @@ function getMembership(userId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getMembership(userId, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -151,8 +144,7 @@ function setMembership(userId, groupIds, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.setMembership(userId, groupIds, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null); }); @@ -164,8 +156,7 @@ function addMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.addMember(groupId, userId, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null); }); @@ -177,8 +168,7 @@ function setMembers(groupId, userIds, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.setMembers(groupId, userIds, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, 'Invalid group or user id')); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null); }); @@ -190,8 +180,7 @@ function removeMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.removeMember(groupId, userId, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null); }); @@ -203,8 +192,7 @@ function isMember(groupId, userId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.isMember(groupId, userId, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); return callback(null, result); }); @@ -223,8 +211,7 @@ function update(groupId, data, callback) { } groupdb.update(groupId, _.pick(data, 'name'), function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); @@ -235,7 +222,7 @@ function getGroups(userId, callback) { assert.strictEqual(typeof callback, 'function'); groupdb.getGroups(userId, function (error, results) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, results); }); @@ -245,7 +232,7 @@ function count(callback) { assert.strictEqual(typeof callback, 'function'); groupdb.count(function (error, count) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, count); }); diff --git a/src/ldap.js b/src/ldap.js index 7d8e8f2ca..c03ee4667 100644 --- a/src/ldap.js +++ b/src/ldap.js @@ -10,6 +10,7 @@ var assert = require('assert'), apps = require('./apps.js'), async = require('async'), constants = require('./constants.js'), + BoxError = require('./boxerror.js'), DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:ldap'), eventlog = require('./eventlog.js'), @@ -567,7 +568,7 @@ function authenticateMailAddon(req, res, next) { // note: with sendmail addon, apps can send mail without a mailbox (unlike users) appdb.getAppIdByAddonConfigValue(addonId, namePattern, req.credentials || '', function (error, appId) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return next(new ldap.OperationsError(error.message)); + if (error && error.reason !== BoxError.NOT_FOUND) return next(new ldap.OperationsError(error.message)); if (appId) { // matched app password eventlog.add(eventlog.ACTION_APP_LOGIN, { authType: 'ldap', mailboxId: email }, { appId: appId, addonId: addonId }); return res.end(); diff --git a/src/notificationdb.js b/src/notificationdb.js index 18732c39d..4a7638bc4 100644 --- a/src/notificationdb.js +++ b/src/notificationdb.js @@ -13,8 +13,8 @@ exports = module.exports = { }; let assert = require('assert'), - database = require('./database.js'), - DatabaseError = require('./databaseerror'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); const NOTIFICATION_FIELDS = [ 'id', 'userId', 'eventId', 'title', 'message', 'creationTime', 'acknowledged' ]; @@ -34,8 +34,8 @@ function add(notification, callback) { const args = [ notification.userId, notification.eventId, notification.title, notification.message, notification.acknowledged ]; database.query(query, args, function (error, result) { - if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND, 'no such eventlog entry')); - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.NOT_FOUND, 'no such eventlog entry')); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, String(result.insertId)); }); @@ -47,8 +47,8 @@ function getByUserIdAndTitle(userId, title, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + NOTIFICATION_FIELDS + ' from notifications WHERE userId = ? AND title = ? ORDER BY creationTime LIMIT 1', [ userId, title ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); postProcess(results[0]); @@ -70,8 +70,8 @@ function update(id, data, callback) { args.push(id); database.query('UPDATE notifications SET ' + fields.join(', ') + ' WHERE id = ?', args, function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -82,8 +82,8 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + NOTIFICATION_FIELDS + ' FROM notifications WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); postProcess(result[0]); @@ -96,8 +96,8 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM notifications WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -118,7 +118,7 @@ function listByUserIdPaged(userId, page, perPage, callback) { data.push(perPage); database.query(query, data, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); @@ -130,7 +130,7 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM notifications', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); diff --git a/src/notifications.js b/src/notifications.js index f479e2ba9..b9a8cf50f 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -26,7 +26,6 @@ let assert = require('assert'), BoxError = require('./boxerror.js'), changelog = require('./changelog.js'), custom = require('./custom.js'), - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:notifications'), eventlog = require('./eventlog.js'), mailer = require('./mailer.js'), @@ -50,8 +49,7 @@ function add(userId, eventId, title, message, callback) { message: message, acknowledged: false }, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, error.message)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, { id: result }); }); @@ -62,8 +60,7 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); notificationdb.get(id, function (error, result) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, result); }); @@ -74,8 +71,7 @@ function ack(id, callback) { assert.strictEqual(typeof callback, 'function'); notificationdb.update(id, { acknowledged: true }, function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); @@ -310,15 +306,14 @@ function alert(id, title, message, callback) { }; notificationdb.getByUserIdAndTitle(admin.id, title, function (error, result) { - if (error && error.reason !== DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason !== BoxError.NOT_FOUND) return callback(error); if (!result && acknowledged) return callback(); // do not add acked alerts let updateFunc = !result ? notificationdb.add.bind(null, data) : notificationdb.update.bind(null, result.id, data); updateFunc(function (error) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND, error.message)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null); }); diff --git a/src/routes/oauth2.js b/src/routes/oauth2.js index 65cd51c9c..760c6ea77 100644 --- a/src/routes/oauth2.js +++ b/src/routes/oauth2.js @@ -25,7 +25,6 @@ var apps = require('../apps.js'), BoxError = require('../boxerror.js'), clients = require('../clients'), constants = require('../constants.js'), - DatabaseError = require('../databaseerror.js'), debug = require('debug')('box:routes/oauth2'), eventlog = require('../eventlog.js'), hat = require('../hat.js'), @@ -89,7 +88,7 @@ function initialize() { // exchange authorization codes for access tokens. this is used by external oauth clients gServer.exchange(oauth2orize.exchange.code(function (client, code, redirectURI, callback) { authcodedb.get(code, function (error, authCode) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, false); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, false); if (error) return callback(error); if (client.id !== authCode.clientId) return callback(null, false); diff --git a/src/settings.js b/src/settings.js index a9c4289b1..2c574ceaa 100644 --- a/src/settings.js +++ b/src/settings.js @@ -99,7 +99,6 @@ var addons = require('./addons.js'), constants = require('./constants.js'), cron = require('./cron.js'), CronJob = require('cron').CronJob, - DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:settings'), docker = require('./docker.js'), externalldap = require('./externalldap.js'), @@ -172,8 +171,8 @@ function getAppAutoupdatePattern(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.APP_AUTOUPDATE_PATTERN_KEY]); + if (error) return callback(error); callback(null, pattern); }); @@ -189,7 +188,7 @@ function setBoxAutoupdatePattern(pattern, callback) { } settingsdb.set(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); @@ -201,8 +200,8 @@ function getBoxAutoupdatePattern(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.BOX_AUTOUPDATE_PATTERN_KEY]); + if (error) return callback(error); callback(null, pattern); }); @@ -215,7 +214,7 @@ function setTimeZone(tz, callback) { 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.TIME_ZONE_KEY, tz); @@ -227,8 +226,8 @@ function getTimeZone(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.TIME_ZONE_KEY]); + if (error) return callback(error); callback(null, tz); }); @@ -238,8 +237,9 @@ function getCloudronName(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_NAME_KEY]); + if (error) return callback(error); + callback(null, name); }); } @@ -254,7 +254,7 @@ function setCloudronName(name, callback) { 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.CLOUDRON_NAME_KEY, name); @@ -272,7 +272,7 @@ function getCloudronAvatar(callback) { avatar = safe.fs.readFileSync(paths.CLOUDRON_DEFAULT_AVATAR_FILE); if (avatar) return callback(null, avatar); - callback(new BoxError(BoxError.DATABASE_ERROR, safe.error)); + callback(new BoxError(BoxError.FS_ERROR, safe.error)); } function setCloudronAvatar(avatar, callback) { @@ -280,7 +280,7 @@ function setCloudronAvatar(avatar, callback) { assert.strictEqual(typeof callback, 'function'); if (!safe.fs.writeFileSync(paths.CLOUDRON_AVATAR_FILE, avatar)) { - return callback(new BoxError(BoxError.DATABASE_ERROR, safe.error)); + return callback(new BoxError(BoxError.FS_ERROR, safe.error)); } return callback(null); @@ -290,8 +290,8 @@ function getDynamicDnsConfig(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.DYNAMIC_DNS_KEY]); + if (error) return callback(error); callback(null, !!enabled); // settingsdb holds string values only }); @@ -303,7 +303,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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.DYNAMIC_DNS_KEY, enabled); @@ -315,8 +315,8 @@ function getUnstableAppsConfig(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.UNSTABLE_APPS_KEY]); + if (error) return callback(error); callback(null, !!enabled); // settingsdb holds string values only }); @@ -328,7 +328,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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.UNSTABLE_APPS_KEY, enabled); @@ -340,8 +340,8 @@ function getBackupConfig(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.BACKUP_CONFIG_KEY]); + if (error) return callback(error); callback(null, JSON.parse(value)); // provider, token, key, region, prefix, bucket }); @@ -362,7 +362,7 @@ function setBackupConfig(backupConfig, callback) { backups.cleanupCacheFilesSync(); settingsdb.set(exports.BACKUP_CONFIG_KEY, JSON.stringify(backupConfig), function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.BACKUP_CONFIG_KEY, backupConfig); @@ -376,8 +376,8 @@ function getPlatformConfig(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.PLATFORM_CONFIG_KEY]); + if (error) return callback(error); callback(null, JSON.parse(value)); }); @@ -392,7 +392,7 @@ function setPlatformConfig(platformConfig, callback) { } settingsdb.set(exports.PLATFORM_CONFIG_KEY, JSON.stringify(platformConfig), function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); addons.updateServiceConfig(platformConfig, callback); }); @@ -402,8 +402,8 @@ function getExternalLdapConfig(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.EXTERNAL_LDAP_KEY]); + if (error) return callback(error); callback(null, JSON.parse(value)); }); @@ -420,7 +420,7 @@ function setExternalLdapConfig(externalLdapConfig, callback) { 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.EXTERNAL_LDAP_KEY, externalLdapConfig); @@ -433,8 +433,8 @@ function getRegistryConfig(callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.get(exports.REGISTRY_CONFIG_KEY, function (error, value) { - if (error && error.reason === DatabaseError.NOT_FOUND) return callback(null, gDefaults[exports.REGISTRY_CONFIG_KEY]); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.REGISTRY_CONFIG_KEY]); + if (error) return callback(error); callback(null, JSON.parse(value)); }); @@ -453,7 +453,7 @@ function setRegistryConfig(registryConfig, callback) { if (error) return callback(error); settingsdb.set(exports.REGISTRY_CONFIG_KEY, JSON.stringify(registryConfig), function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.REGISTRY_CONFIG_KEY, registryConfig); @@ -467,8 +467,8 @@ function getLicenseKey(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.LICENSE_KEY]); + if (error) return callback(error); callback(null, value); }); @@ -479,7 +479,7 @@ function setLicenseKey(licenseKey, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.LICENSE_KEY, licenseKey, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.LICENSE_KEY, licenseKey); @@ -491,8 +491,8 @@ function getCloudronId(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_ID_KEY]); + if (error) return callback(error); callback(null, value); }); @@ -503,7 +503,7 @@ function setCloudronId(cid, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.CLOUDRON_ID_KEY, cid, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.CLOUDRON_ID_KEY, cid); @@ -515,8 +515,8 @@ function getCloudronToken(callback) { assert.strictEqual(typeof callback, 'function'); 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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error && error.reason === BoxError.NOT_FOUND) return callback(null, gDefaults[exports.CLOUDRON_TOKEN_KEY]); + if (error) return callback(error); callback(null, value); }); @@ -527,7 +527,7 @@ function setCloudronToken(token, callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.set(exports.CLOUDRON_TOKEN_KEY, token, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); notifyChange(exports.CLOUDRON_TOKEN_KEY, token); @@ -539,7 +539,7 @@ function getAll(callback) { assert.strictEqual(typeof callback, 'function'); settingsdb.getAll(function (error, settings) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); var result = _.extend({ }, gDefaults); settings.forEach(function (setting) { result[setting.name] = setting.value; }); @@ -583,10 +583,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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); settingsdb.set(exports.ADMIN_FQDN_KEY, adminFqdn, function (error) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); gCache.adminDomain = adminDomain; gCache.adminFqdn = adminFqdn; @@ -601,7 +601,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 BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); gCache.apiServerOrigin = origin; notifyChange(exports.API_SERVER_ORIGIN_KEY, origin); diff --git a/src/settingsdb.js b/src/settingsdb.js index 136ec0959..0d5a99a34 100644 --- a/src/settingsdb.js +++ b/src/settingsdb.js @@ -10,8 +10,8 @@ exports = module.exports = { }; var assert = require('assert'), - database = require('./database.js'), - DatabaseError = require('./databaseerror'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); const SETTINGS_FIELDS = [ 'name', 'value' ].join(','); @@ -20,8 +20,8 @@ function get(key, callback) { assert.strictEqual(typeof callback, 'function'); database.query(`SELECT ${SETTINGS_FIELDS} FROM settings WHERE name = ?`, [ key ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0].value); }); @@ -29,7 +29,7 @@ function get(key, callback) { function getAll(callback) { database.query(`SELECT ${SETTINGS_FIELDS} FROM settings ORDER BY name`, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -41,7 +41,7 @@ function set(key, value, callback) { assert.strictEqual(typeof callback, 'function'); database.query('INSERT INTO settings (name, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value=VALUES(value)', [ key, value ], function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); // don't rely on affectedRows here since it gives 2 + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); // don't rely on affectedRows here since it gives 2 callback(null); }); @@ -49,7 +49,7 @@ function set(key, value, callback) { function clear(callback) { database.query('DELETE FROM settings', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(error); }); diff --git a/src/taskdb.js b/src/taskdb.js index c9384d7ce..a4d4730b2 100644 --- a/src/taskdb.js +++ b/src/taskdb.js @@ -9,8 +9,8 @@ exports = module.exports = { }; let assert = require('assert'), + BoxError = require('./boxerror.js'), database = require('./database.js'), - DatabaseError = require('./databaseerror'), safe = require('safetydance'); const TASKS_FIELDS = [ 'id', 'type', 'argsJson', 'percent', 'message', 'errorJson', 'creationTime', 'resultJson', 'ts' ]; @@ -39,7 +39,7 @@ function add(task, callback) { const args = [ task.type, JSON.stringify(task.args), task.percent, task.message ]; database.query(query, args, function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, String(result.insertId)); }); @@ -64,8 +64,8 @@ function update(id, data, callback) { args.push(id); database.query('UPDATE tasks SET ' + fields.join(', ') + ' WHERE id = ?', args, function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -76,8 +76,8 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + TASKS_FIELDS + ' FROM tasks WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); postProcess(result[0]); @@ -90,8 +90,8 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tasks WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null); }); @@ -117,7 +117,7 @@ function listByTypePaged(type, page, perPage, callback) { data.push(perPage); database.query(query, data, function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); diff --git a/src/tasks.js b/src/tasks.js index af776af5a..de2aa0409 100644 --- a/src/tasks.js +++ b/src/tasks.js @@ -72,8 +72,7 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); taskdb.get(id, function (error, task) { - if (error && error.reason == DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); postProcess(task); @@ -89,8 +88,7 @@ function update(id, task, callback) { debug(`${id}: ${JSON.stringify(task)}`); taskdb.update(id, task, function (error) { - if (error && error.reason == DatabaseError.NOT_FOUND) return callback(new BoxError(BoxError.NOT_FOUND)); - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(); }); @@ -129,7 +127,7 @@ function add(type, args, callback) { assert.strictEqual(typeof callback, 'function'); taskdb.add({ type: type, percent: 0, message: 'Starting ...', args: args }, function (error, taskId) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); callback(null, taskId); }); @@ -217,7 +215,7 @@ function listByTypePaged(type, page, perPage, callback) { assert.strictEqual(typeof callback, 'function'); taskdb.listByTypePaged(type, page, perPage, function (error, tasks) { - if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (error) return callback(error); tasks.forEach(postProcess); diff --git a/src/test/backups-test.js b/src/test/backups-test.js index 3e518f29d..4636e2a8a 100644 --- a/src/test/backups-test.js +++ b/src/test/backups-test.js @@ -12,7 +12,6 @@ var async = require('async'), BoxError = require('../boxerror.js'), createTree = require('./common.js').createTree, database = require('../database'), - DatabaseError = require('../databaseerror.js'), DataLayout = require('../datalayout.js'), expect = require('expect.js'), fs = require('fs'), @@ -171,8 +170,8 @@ describe('backups', function () { // check that app backups are gone as well backupdb.get(BACKUP_0_APP_0.id, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); done(); }); diff --git a/src/test/database-test.js b/src/test/database-test.js index 562b3d8b0..89f158f39 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -10,6 +10,7 @@ var appdb = require('../appdb.js'), async = require('async'), authcodedb = require('../authcodedb.js'), backupdb = require('../backupdb.js'), + BoxError = require('../boxerror.js'), clientdb = require('../clientdb.js'), database = require('../database'), DatabaseError = require('../databaseerror.js'), @@ -216,8 +217,8 @@ describe('database', function () { it('cannot get by non-existing id', function (done) { notificationdb.get('nopenothere', function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -238,8 +239,8 @@ describe('database', function () { it('cannot update non-existing notification', function (done) { notificationdb.update('isnotthere', { acknowledged: true }, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); done(); }); }); @@ -265,8 +266,8 @@ describe('database', function () { expect(error).to.equal(null); notificationdb.get(NOTIFICATION_0.id, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); @@ -276,8 +277,8 @@ describe('database', function () { it('deletion for non-existing notification fails', function (done) { notificationdb.del('doesnotexts', function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); done(); }); @@ -316,7 +317,7 @@ describe('database', function () { it('cannot add same domain twice', function (done) { domaindb.add(DOMAIN_0.domain, { zoneName: DOMAIN_0.zoneName, provider: DOMAIN_0.provider, config: DOMAIN_0.config, tlsConfig: DOMAIN_0.tlsConfig }, function (error) { expect(error).to.be.ok(); - expect(error.reason).to.be(DatabaseError.ALREADY_EXISTS); + expect(error.reason).to.be(BoxError.ALREADY_EXISTS); done(); }); }); @@ -382,8 +383,8 @@ describe('database', function () { it('cannot delete non-existing domain', function (done) { domaindb.del('not.exists', function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); done(); }); @@ -423,8 +424,8 @@ describe('database', function () { expect(error).to.be(null); domaindb.del(DOMAIN_0.domain, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.IN_USE); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.CONFLICT); appdb.del(APP_0.id, done); }); @@ -436,8 +437,8 @@ describe('database', function () { expect(error).to.be(null); domaindb.get(DOMAIN_0.domain, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); done(); }); @@ -711,8 +712,8 @@ describe('database', function () { it('add of same authcode fails', function (done) { authcodedb.add(AUTHCODE_0.authCode, AUTHCODE_0.clientId, AUTHCODE_0.userId, AUTHCODE_0.expiresAt, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.ALREADY_EXISTS); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.ALREADY_EXISTS); done(); }); }); @@ -728,8 +729,8 @@ describe('database', function () { it('get of nonexisting code fails', function (done) { authcodedb.get(AUTHCODE_1.authCode, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -740,8 +741,8 @@ describe('database', function () { expect(error).to.be(null); authcodedb.get(AUTHCODE_2.authCode, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -754,8 +755,8 @@ describe('database', function () { expect(result).to.eql(1); authcodedb.get(AUTHCODE_2.authCode, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -771,8 +772,8 @@ describe('database', function () { it('cannot delete previously delete record', function (done) { authcodedb.del(AUTHCODE_0.authCode, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -816,8 +817,8 @@ describe('database', function () { it('add of same token fails', function (done) { tokendb.add(TOKEN_0, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.ALREADY_EXISTS); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.ALREADY_EXISTS); done(); }); }); @@ -842,8 +843,8 @@ describe('database', function () { it('get of nonexisting token fails', function (done) { tokendb.getByAccessToken(TOKEN_1.accessToken, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -862,8 +863,8 @@ describe('database', function () { it('delete fails', function (done) { tokendb.del(TOKEN_0.id + 'x', function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -897,8 +898,8 @@ describe('database', function () { it('cannot delete previously delete record', function (done) { tokendb.del(TOKEN_0.id, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -926,8 +927,8 @@ describe('database', function () { expect(result).to.eql(1); tokendb.getByAccessToken(TOKEN_2.accessToken, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -940,8 +941,8 @@ describe('database', function () { expect(error).to.be(null); tokendb.getByAccessToken(TOKEN_0.accessToken, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -956,8 +957,8 @@ describe('database', function () { expect(error).to.not.be.ok(); tokendb.getByAccessToken(TOKEN_0.accessToken, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1024,8 +1025,7 @@ describe('database', function () { dataDir: null, tags: [], label: null, - taskId: null, - reverseProxyConfig: {} + taskId: null }; before(function (done) { @@ -1078,8 +1078,8 @@ describe('database', function () { it('add of same app fails', function (done) { appdb.add(APP_0.id, APP_0.appStoreId, APP_0.manifest, APP_0.location, APP_0.domain, [], APP_0, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.ALREADY_EXISTS); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.ALREADY_EXISTS); done(); }); }); @@ -1095,8 +1095,8 @@ describe('database', function () { it('get of nonexisting code fails', function (done) { appdb.get(APP_1.id, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1143,8 +1143,8 @@ describe('database', function () { it('update of nonexisting app fails', function (done) { appdb.update(APP_1.id, { installationState: APP_1.installationState, location: APP_1.location }, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -1196,8 +1196,8 @@ describe('database', function () { it('cannot delete previously delete record', function (done) { appdb.del(APP_0.id, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -1264,7 +1264,7 @@ describe('database', function () { it('getAddonConfigByName of unknown value succeeds', function (done) { appdb.getAddonConfigByName(APP_1.id, 'addonid1', 'NOPE', function (error) { - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -1369,7 +1369,7 @@ describe('database', function () { taskdb.del(taskId, function (error) { expect(error).to.be(null); taskdb.get(taskId, function (error) { - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -1408,8 +1408,8 @@ describe('database', function () { it('add same client id fails', function (done) { clientdb.add(CLIENT_0.id, CLIENT_0.appId, CLIENT_0.type, CLIENT_0.clientSecret, CLIENT_0.redirectURI, CLIENT_0.scope, function (error) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.ALREADY_EXISTS); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.ALREADY_EXISTS); done(); }); }); @@ -1440,8 +1440,8 @@ describe('database', function () { it('getByAppId fails for unknown client id', function (done) { clientdb.getByAppId(CLIENT_0.appId + CLIENT_0.appId, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1463,8 +1463,8 @@ describe('database', function () { expect(error).to.be(null); clientdb.getByAppIdAndType(CLIENT_1.appId, CLIENT_1.type, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1476,8 +1476,8 @@ describe('database', function () { expect(error).to.be(null); clientdb.getByAppId(CLIENT_0.appId, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1557,8 +1557,8 @@ describe('database', function () { it('get of unknown id fails', function (done) { backupdb.get('somerandom', function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1585,8 +1585,8 @@ describe('database', function () { expect(result).to.not.be.ok(); backupdb.get('backup-box', function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1642,8 +1642,8 @@ describe('database', function () { expect(result).to.not.be.ok(); backupdb.get('app_appid_123', function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.equal(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.equal(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1678,8 +1678,8 @@ describe('database', function () { it('get of unknown id fails', function (done) { eventlogdb.get('notfoundid', function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -1868,7 +1868,7 @@ describe('database', function () { it('cannot add invalid user to group', function (done) { groupdb.addMember(GROUP_ID_1, 'random', function (error) { - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); @@ -1890,7 +1890,7 @@ describe('database', function () { it('cannot delete non-existent member', function (done) { groupdb.removeMember(GROUP_ID_1, 'random', function (error) { - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); diff --git a/src/test/groups-test.js b/src/test/groups-test.js index 3e41ace62..8e20b2717 100644 --- a/src/test/groups-test.js +++ b/src/test/groups-test.js @@ -9,7 +9,6 @@ var async = require('async'), BoxError = require('../boxerror.js'), database = require('../database.js'), - DatabaseError = require('../databaseerror.js'), expect = require('expect.js'), groups = require('../groups.js'), hat = require('../hat.js'), @@ -166,7 +165,7 @@ describe('Groups', function () { it('did delete mailbox', function (done) { mailboxdb.getList(GROUP0_NAME.toLowerCase(), DOMAIN_0.domain, function (error) { - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error.reason).to.be(BoxError.NOT_FOUND); done(); }); }); diff --git a/src/test/janitor-test.js b/src/test/janitor-test.js index 97ce8d4e7..f9970af6f 100644 --- a/src/test/janitor-test.js +++ b/src/test/janitor-test.js @@ -8,8 +8,8 @@ var async = require('async'), authcodedb = require('../authcodedb.js'), + BoxError = require('../boxerror.js'), database = require('../database'), - DatabaseError = require('../databaseerror.js'), expect = require('expect.js'), hat = require('../hat.js'), janitor = require('../janitor.js'), @@ -80,8 +80,8 @@ describe('janitor', function () { it('did remove expired authcode', function (done) { authcodedb.get(AUTHCODE_1.authCode, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); @@ -97,8 +97,8 @@ describe('janitor', function () { it('did remove the non-expired token', function (done) { tokendb.getByAccessToken(TOKEN_1.accessToken, function (error, result) { - expect(error).to.be.a(DatabaseError); - expect(error.reason).to.be(DatabaseError.NOT_FOUND); + expect(error).to.be.a(BoxError); + expect(error.reason).to.be(BoxError.NOT_FOUND); expect(result).to.not.be.ok(); done(); }); diff --git a/src/tokendb.js b/src/tokendb.js index add34bc87..0c7cb4d87 100644 --- a/src/tokendb.js +++ b/src/tokendb.js @@ -18,8 +18,8 @@ exports = module.exports = { }; var assert = require('assert'), - database = require('./database.js'), - DatabaseError = require('./databaseerror'); + BoxError = require('./boxerror.js'), + database = require('./database.js'); var TOKENS_FIELDS = [ 'id', 'accessToken', 'identifier', 'clientId', 'scope', 'expires', 'name' ].join(','); @@ -28,8 +28,8 @@ function getByAccessToken(accessToken, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + TOKENS_FIELDS + ' FROM tokens WHERE accessToken = ? AND expires > ?', [ accessToken, Date.now() ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -40,8 +40,8 @@ function get(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + TOKENS_FIELDS + ' FROM tokens WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, result[0]); }); @@ -63,8 +63,8 @@ function add(token, callback) { database.query('INSERT INTO tokens (id, accessToken, identifier, clientId, expires, scope, name) VALUES (?, ?, ?, ?, ?, ?, ?)', [ id, accessToken, identifier, clientId, expires, scope, name ], function (error, result) { - if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); - if (error || result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS)); + if (error || result.affectedRows !== 1) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null); }); @@ -75,8 +75,8 @@ function del(id, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens WHERE id = ?', [ id ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); callback(error); }); @@ -87,8 +87,8 @@ function delByClientId(clientId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens WHERE clientId = ?', [ clientId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -99,7 +99,7 @@ function getByIdentifier(identifier, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + TOKENS_FIELDS + ' FROM tokens WHERE identifier = ?', [ identifier ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); callback(null, results); }); @@ -110,8 +110,8 @@ function delByIdentifier(identifier, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens WHERE identifier = ?', [ identifier ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -123,8 +123,8 @@ function getByIdentifierAndClientId(identifier, clientId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('SELECT ' + TOKENS_FIELDS + ' FROM tokens WHERE identifier=? AND clientId=?', [ identifier, clientId ], function (error, results) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (results.length === 0) return callback(new BoxError(BoxError.NOT_FOUND)); callback(null, results); }); @@ -136,8 +136,8 @@ function delByIdentifierAndClientId(identifier, clientId, callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens WHERE identifier = ? AND clientId = ?', [ identifier, clientId ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); + if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND)); return callback(null); }); @@ -147,7 +147,7 @@ function delExpired(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens WHERE expires <= ?', [ Date.now() ], function (error, result) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null, result.affectedRows); }); } @@ -156,9 +156,8 @@ function clear(callback) { assert.strictEqual(typeof callback, 'function'); database.query('DELETE FROM tokens', function (error) { - if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); return callback(null); }); } -