Fix addon crash
getAddonConfigByName returns null now when not found
This commit is contained in:
+22
-17
@@ -1084,13 +1084,13 @@ function setupSendMail(app, options, callback) {
|
||||
if (disabled) return setAddonConfig(app.id, 'sendmail', [], callback);
|
||||
|
||||
getAddonConfigByName(app.id, 'sendmail', '%MAIL_SMTP_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
var password = error ? hat(4 * 48) : existingPassword; // see box#565 for password length
|
||||
const password = existingPassword || hat(4 * 48); // see box#565 for password length
|
||||
|
||||
const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_';
|
||||
|
||||
var env = [
|
||||
const env = [
|
||||
{ name: `${envPrefix}MAIL_SMTP_SERVER`, value: 'mail' },
|
||||
{ name: `${envPrefix}MAIL_SMTP_PORT`, value: '2525' },
|
||||
{ name: `${envPrefix}MAIL_SMTPS_PORT`, value: '2465' },
|
||||
@@ -1123,13 +1123,13 @@ function setupRecvMail(app, options, callback) {
|
||||
debugApp(app, 'Setting up recvmail');
|
||||
|
||||
getAddonConfigByName(app.id, 'recvmail', '%MAIL_IMAP_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
var password = error ? hat(4 * 48) : existingPassword; // see box#565 for password length
|
||||
const password = existingPassword || hat(4 * 48); // see box#565 for password length
|
||||
|
||||
const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_';
|
||||
|
||||
var env = [
|
||||
const env = [
|
||||
{ name: `${envPrefix}MAIL_IMAP_SERVER`, value: 'mail' },
|
||||
{ name: `${envPrefix}MAIL_IMAP_PORT`, value: '9993' },
|
||||
{ name: `${envPrefix}MAIL_IMAP_USERNAME`, value: app.mailboxName + '@' + app.mailboxDomain },
|
||||
@@ -1222,7 +1222,7 @@ function setupMySql(app, options, callback) {
|
||||
debugApp(app, 'Setting up mysql');
|
||||
|
||||
getAddonConfigByName(app.id, 'mysql', '%MYSQL_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
const tmp = mysqlDatabaseName(app.id);
|
||||
|
||||
@@ -1230,7 +1230,7 @@ function setupMySql(app, options, callback) {
|
||||
database: tmp,
|
||||
prefix: tmp,
|
||||
username: tmp,
|
||||
password: error ? hat(4 * 48) : existingPassword // see box#362 for password length
|
||||
password: existingPassword || hat(4 * 48) // see box#362 for password length
|
||||
};
|
||||
|
||||
getContainerDetails('mysql', 'CLOUDRON_MYSQL_TOKEN', function (error, result) {
|
||||
@@ -1442,12 +1442,12 @@ function setupPostgreSql(app, options, callback) {
|
||||
const { database, username } = postgreSqlNames(app.id);
|
||||
|
||||
getAddonConfigByName(app.id, 'postgresql', '%POSTGRESQL_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
const data = {
|
||||
database: database,
|
||||
username: username,
|
||||
password: error ? hat(4 * 128) : existingPassword,
|
||||
password: existingPassword || hat(4 * 128),
|
||||
locale: options.locale || 'C'
|
||||
};
|
||||
|
||||
@@ -1661,15 +1661,17 @@ function setupMongoDb(app, options, callback) {
|
||||
debugApp(app, 'Setting up mongodb');
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
|
||||
if (error) return callback(error);
|
||||
|
||||
database = database || hat(8 * 8); // 16 bytes. keep this short, so as to not overflow the 127 byte index length in MongoDB < 4.4
|
||||
|
||||
const data = {
|
||||
database: database,
|
||||
database,
|
||||
username: app.id,
|
||||
password: error ? hat(4 * 128) : existingPassword,
|
||||
password: existingPassword || hat(4 * 128),
|
||||
oplog: !!options.oplog
|
||||
};
|
||||
|
||||
@@ -1713,6 +1715,7 @@ function clearMongodb(app, options, callback) {
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
|
||||
if (error) return callback(error);
|
||||
if (!database) return callback(new BoxError(BoxError.NOT_FOUND, 'Error clearing mongodb. No database'));
|
||||
|
||||
request.post(`https://${result.ip}:3000/databases/${database}/clear?access_token=${result.token}`, { json: true, rejectUnauthorized: false }, function (error, response) {
|
||||
if (error) return callback(new BoxError(BoxError.ADDONS_ERROR, `Network error clearing mongodb: ${error.message}`));
|
||||
@@ -1733,8 +1736,8 @@ function teardownMongoDb(app, options, callback) {
|
||||
if (error) return callback(error);
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
|
||||
if (error && error.reason === BoxError.NOT_FOUND) return callback(null);
|
||||
if (error) return callback(error);
|
||||
if (!database) return callback(null);
|
||||
|
||||
request.delete(`https://${result.ip}:3000/databases/${database}?access_token=${result.token}`, { json: true, rejectUnauthorized: false }, function (error, response) {
|
||||
if (error) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mongodb: ${error.message}`));
|
||||
@@ -1758,6 +1761,7 @@ function backupMongoDb(app, options, callback) {
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
|
||||
if (error) return callback(error);
|
||||
if (!database) return callback(new BoxError(BoxError.NOT_FOUND, 'Error backing up mongodb. No database'));
|
||||
|
||||
const url = `https://${result.ip}:3000/databases/${database}/backup?access_token=${result.token}`;
|
||||
pipeRequestToFile(url, dumpPath('mongodb', app.id), callback);
|
||||
@@ -1779,6 +1783,7 @@ function restoreMongoDb(app, options, callback) {
|
||||
|
||||
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
|
||||
if (error) return callback(error);
|
||||
if (!database) return callback(new BoxError(BoxError.NOT_FOUND, 'Error restoring mongodb. No database'));
|
||||
|
||||
const readStream = fs.createReadStream(dumpPath('mongodb', app.id));
|
||||
readStream.on('error', (error) => callback(new BoxError(BoxError.FS_ERROR, `Error reading input stream when restoring mongodb: ${error.message}`)));
|
||||
@@ -1909,9 +1914,9 @@ function setupRedis(app, options, callback) {
|
||||
const redisName = 'redis-' + app.id;
|
||||
|
||||
getAddonConfigByName(app.id, 'redis', '%REDIS_PASSWORD', function (error, existingPassword) {
|
||||
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
|
||||
if (error) return callback(error);
|
||||
|
||||
const redisPassword = options.noPassword ? '' : (error ? hat(4 * 48) : existingPassword); // see box#362 for password length
|
||||
const redisPassword = options.noPassword ? '' : (existingPassword || hat(4 * 48)); // see box#362 for password length
|
||||
const redisServiceToken = hat(4 * 48);
|
||||
|
||||
// Compute redis memory limit based on app's memory limit (this is arbitrary)
|
||||
@@ -1942,7 +1947,7 @@ function setupRedis(app, options, callback) {
|
||||
|
||||
const envPrefix = app.manifest.manifestVersion <= 1 ? '' : 'CLOUDRON_';
|
||||
|
||||
var env = [
|
||||
const env = [
|
||||
{ name: `${envPrefix}REDIS_URL`, value: 'redis://redisuser:' + redisPassword + '@redis-' + app.id },
|
||||
{ name: `${envPrefix}REDIS_PASSWORD`, value: redisPassword },
|
||||
{ name: `${envPrefix}REDIS_HOST`, value: redisName },
|
||||
|
||||
Reference in New Issue
Block a user