Fix addon crash

getAddonConfigByName returns null now when not found
This commit is contained in:
Girish Ramakrishnan
2021-08-22 15:35:46 -07:00
parent 95af5ef138
commit 62eb4ab90e
2 changed files with 23 additions and 18 deletions
+22 -17
View File
@@ -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 },