move addon config db code to addonconfigs.js

This commit is contained in:
Girish Ramakrishnan
2021-08-19 21:39:27 -07:00
parent 411cc7daa1
commit c5fff756d1
9 changed files with 300 additions and 339 deletions

View File

@@ -31,7 +31,8 @@ exports = module.exports = {
SERVICE_STATUS_STOPPED: 'stopped'
};
const appdb = require('./appdb.js'),
const addonConfigs = require('./addonconfigs.js'),
appdb = require('./appdb.js'),
apps = require('./apps.js'),
assert = require('assert'),
async = require('async'),
@@ -68,9 +69,13 @@ const NOOP_CALLBACK = function (error) { if (error) debug(error); };
const RMADDONDIR_CMD = path.join(__dirname, 'scripts/rmaddondir.sh');
const RESTART_SERVICE_CMD = path.join(__dirname, 'scripts/restartservice.sh');
const setAddonConfig = util.callbackify(addonConfigs.set),
unsetAddonConfig = util.callbackify(addonConfigs.unset),
getAddonConfigByName = util.callbackify(addonConfigs.getByName);
// setup can be called multiple times for the same app (configure crash restart) and existing data must not be lost
// teardown is destructive. app data stored with the addon is lost
var ADDONS = {
const ADDONS = {
turn: {
setup: setupTurn,
teardown: teardownTurn,
@@ -883,17 +888,14 @@ function startServices(existingInfra, callback) {
});
}
function getEnvironment(app, callback) {
async function getEnvironment(app) {
assert.strictEqual(typeof app, 'object');
assert.strictEqual(typeof callback, 'function');
appdb.getAddonConfigByAppId(app.id, function (error, result) {
if (error) return callback(error);
const result = await addonConfigs.getByAppId(app.id);
if (app.manifest.addons['docker']) result.push({ name: 'CLOUDRON_DOCKER_HOST', value: `tcp://172.18.0.1:${constants.DOCKER_PROXY_PORT}` });
if (app.manifest.addons['docker']) result.push({ name: 'CLOUDRON_DOCKER_HOST', value: `tcp://172.18.0.1:${constants.DOCKER_PROXY_PORT}` });
return callback(null, result.map(function (e) { return e.name + '=' + e.value; }));
});
return result.map(function (e) { return e.name + '=' + e.value; });
}
function getContainerNamesSync(app, addons) {
@@ -978,7 +980,7 @@ function setupTurn(app, options, callback) {
debugApp(app, 'Setting up TURN');
appdb.setAddonConfig(app.id, 'turn', env, callback);
setAddonConfig(app.id, 'turn', env, callback);
});
}
@@ -989,7 +991,7 @@ function teardownTurn(app, options, callback) {
debugApp(app, 'Tearing down TURN');
appdb.unsetAddonConfig(app.id, 'turn', callback);
unsetAddonConfig(app.id, 'turn', callback);
}
function setupEmail(app, options, callback) {
@@ -1022,7 +1024,7 @@ function setupEmail(app, options, callback) {
debugApp(app, 'Setting up Email');
appdb.setAddonConfig(app.id, 'email', env, callback);
setAddonConfig(app.id, 'email', env, callback);
});
}
@@ -1033,7 +1035,7 @@ function teardownEmail(app, options, callback) {
debugApp(app, 'Tearing down Email');
appdb.unsetAddonConfig(app.id, 'email', callback);
unsetAddonConfig(app.id, 'email', callback);
}
function setupLdap(app, options, callback) {
@@ -1058,7 +1060,7 @@ function setupLdap(app, options, callback) {
debugApp(app, 'Setting up LDAP');
appdb.setAddonConfig(app.id, 'ldap', env, callback);
setAddonConfig(app.id, 'ldap', env, callback);
}
function teardownLdap(app, options, callback) {
@@ -1068,7 +1070,7 @@ function teardownLdap(app, options, callback) {
debugApp(app, 'Tearing down LDAP');
appdb.unsetAddonConfig(app.id, 'ldap', callback);
unsetAddonConfig(app.id, 'ldap', callback);
}
function setupSendMail(app, options, callback) {
@@ -1079,9 +1081,9 @@ function setupSendMail(app, options, callback) {
debugApp(app, 'Setting up SendMail');
const disabled = app.manifest.addons.sendmail.optional && !app.enableMailbox;
if (disabled) return appdb.setAddonConfig(app.id, 'sendmail', [], callback);
if (disabled) return setAddonConfig(app.id, 'sendmail', [], callback);
appdb.getAddonConfigByName(app.id, 'sendmail', '%MAIL_SMTP_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'sendmail', '%MAIL_SMTP_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
var password = error ? hat(4 * 48) : existingPassword; // see box#565 for password length
@@ -1099,7 +1101,7 @@ function setupSendMail(app, options, callback) {
{ name: `${envPrefix}MAIL_DOMAIN`, value: app.mailboxDomain }
];
debugApp(app, 'Setting sendmail addon config to %j', env);
appdb.setAddonConfig(app.id, 'sendmail', env, callback);
setAddonConfig(app.id, 'sendmail', env, callback);
});
}
@@ -1110,7 +1112,7 @@ function teardownSendMail(app, options, callback) {
debugApp(app, 'Tearing down sendmail');
appdb.unsetAddonConfig(app.id, 'sendmail', callback);
unsetAddonConfig(app.id, 'sendmail', callback);
}
function setupRecvMail(app, options, callback) {
@@ -1120,7 +1122,7 @@ function setupRecvMail(app, options, callback) {
debugApp(app, 'Setting up recvmail');
appdb.getAddonConfigByName(app.id, 'recvmail', '%MAIL_IMAP_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'recvmail', '%MAIL_IMAP_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
var password = error ? hat(4 * 48) : existingPassword; // see box#565 for password length
@@ -1137,7 +1139,7 @@ function setupRecvMail(app, options, callback) {
];
debugApp(app, 'Setting sendmail addon config to %j', env);
appdb.setAddonConfig(app.id, 'recvmail', env, callback);
setAddonConfig(app.id, 'recvmail', env, callback);
});
}
@@ -1148,7 +1150,7 @@ function teardownRecvMail(app, options, callback) {
debugApp(app, 'Tearing down recvmail');
appdb.unsetAddonConfig(app.id, 'recvmail', callback);
unsetAddonConfig(app.id, 'recvmail', callback);
}
function mysqlDatabaseName(appId) {
@@ -1219,7 +1221,7 @@ function setupMySql(app, options, callback) {
debugApp(app, 'Setting up mysql');
appdb.getAddonConfigByName(app.id, 'mysql', '%MYSQL_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'mysql', '%MYSQL_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
const tmp = mysqlDatabaseName(app.id);
@@ -1257,7 +1259,7 @@ function setupMySql(app, options, callback) {
}
debugApp(app, 'Setting mysql addon config to %j', env);
appdb.setAddonConfig(app.id, 'mysql', env, callback);
setAddonConfig(app.id, 'mysql', env, callback);
});
});
});
@@ -1297,7 +1299,7 @@ function teardownMySql(app, options, callback) {
if (error) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mysql: ${error.message}`));
if (response.statusCode !== 200) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mysql. Status code: ${response.statusCode} message: ${response.body.message}`));
appdb.unsetAddonConfig(app.id, 'mysql', callback);
unsetAddonConfig(app.id, 'mysql', callback);
});
});
}
@@ -1439,7 +1441,7 @@ function setupPostgreSql(app, options, callback) {
const { database, username } = postgreSqlNames(app.id);
appdb.getAddonConfigByName(app.id, 'postgresql', '%POSTGRESQL_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'postgresql', '%POSTGRESQL_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
const data = {
@@ -1468,7 +1470,7 @@ function setupPostgreSql(app, options, callback) {
];
debugApp(app, 'Setting postgresql addon config to %j', env);
appdb.setAddonConfig(app.id, 'postgresql', env, callback);
setAddonConfig(app.id, 'postgresql', env, callback);
});
});
});
@@ -1510,7 +1512,7 @@ function teardownPostgreSql(app, options, callback) {
if (error) return callback(new BoxError(BoxError.ADDONS_ERROR, `Network error tearing down postgresql: ${error.message}`));
if (response.statusCode !== 200) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down postgresql. Status code: ${response.statusCode} message: ${response.body.message}`));
appdb.unsetAddonConfig(app.id, 'postgresql', callback);
unsetAddonConfig(app.id, 'postgresql', callback);
});
});
}
@@ -1658,10 +1660,10 @@ function setupMongoDb(app, options, callback) {
debugApp(app, 'Setting up mongodb');
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
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 = {
@@ -1694,7 +1696,7 @@ function setupMongoDb(app, options, callback) {
}
debugApp(app, 'Setting mongodb addon config to %j', env);
appdb.setAddonConfig(app.id, 'mongodb', env, callback);
setAddonConfig(app.id, 'mongodb', env, callback);
});
});
});
@@ -1709,7 +1711,7 @@ function clearMongodb(app, options, callback) {
getContainerDetails('mongodb', 'CLOUDRON_MONGODB_TOKEN', function (error, result) {
if (error) return callback(error);
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
if (error) return callback(error);
request.post(`https://${result.ip}:3000/databases/${database}/clear?access_token=${result.token}`, { json: true, rejectUnauthorized: false }, function (error, response) {
@@ -1730,7 +1732,7 @@ function teardownMongoDb(app, options, callback) {
getContainerDetails('mongodb', 'CLOUDRON_MONGODB_TOKEN', function (error, result) {
if (error) return callback(error);
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
if (error && error.reason === BoxError.NOT_FOUND) return callback(null);
if (error) return callback(error);
@@ -1738,7 +1740,7 @@ function teardownMongoDb(app, options, callback) {
if (error) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mongodb: ${error.message}`));
if (response.statusCode !== 200) return callback(new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mongodb. Status code: ${response.statusCode} message: ${response.body.message}`));
appdb.unsetAddonConfig(app.id, 'mongodb', callback);
unsetAddonConfig(app.id, 'mongodb', callback);
});
});
});
@@ -1754,7 +1756,7 @@ function backupMongoDb(app, options, callback) {
getContainerDetails('mongodb', 'CLOUDRON_MONGODB_TOKEN', function (error, result) {
if (error) return callback(error);
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
if (error) return callback(error);
const url = `https://${result.ip}:3000/databases/${database}/backup?access_token=${result.token}`;
@@ -1775,7 +1777,7 @@ function restoreMongoDb(app, options, callback) {
getContainerDetails('mongodb', 'CLOUDRON_MONGODB_TOKEN', function (error, result) {
if (error) return callback(error);
appdb.getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
getAddonConfigByName(app.id, 'mongodb', '%MONGODB_DATABASE', function (error, database) {
if (error) return callback(error);
const readStream = fs.createReadStream(dumpPath('mongodb', app.id));
@@ -1853,7 +1855,7 @@ function setupProxyAuth(app, options, callback) {
if (!enabled) return callback();
const env = [ { name: 'CLOUDRON_PROXY_AUTH', value: '1' } ];
appdb.setAddonConfig(app.id, 'proxyauth', env, callback);
setAddonConfig(app.id, 'proxyauth', env, callback);
}
function teardownProxyAuth(app, options, callback) {
@@ -1861,7 +1863,7 @@ function teardownProxyAuth(app, options, callback) {
assert.strictEqual(typeof options, 'object');
assert.strictEqual(typeof callback, 'function');
appdb.unsetAddonConfig(app.id, 'proxyauth', callback);
unsetAddonConfig(app.id, 'proxyauth', callback);
}
function startRedis(existingInfra, callback) {
@@ -1906,7 +1908,7 @@ function setupRedis(app, options, callback) {
const redisName = 'redis-' + app.id;
appdb.getAddonConfigByName(app.id, 'redis', '%REDIS_PASSWORD', function (error, existingPassword) {
getAddonConfigByName(app.id, 'redis', '%REDIS_PASSWORD', function (error, existingPassword) {
if (error && error.reason !== BoxError.NOT_FOUND) return callback(error);
const redisPassword = options.noPassword ? '' : (error ? hat(4 * 48) : existingPassword); // see box#362 for password length
@@ -1957,7 +1959,7 @@ function setupRedis(app, options, callback) {
shell.exec('startRedis', cmd, next);
});
},
appdb.setAddonConfig.bind(null, app.id, 'redis', env),
setAddonConfig.bind(null, app.id, 'redis', env),
waitForContainer.bind(null, 'redis-' + app.id, 'CLOUDRON_REDIS_TOKEN')
], function (error) {
if (error) debug('Error setting up redis: ', error);
@@ -1999,7 +2001,7 @@ function teardownRedis(app, options, callback) {
rimraf(path.join(paths.LOG_DIR, `redis-${app.id}`), function (error) {
if (error) debugApp(app, 'cannot cleanup logs:', error);
appdb.unsetAddonConfig(app.id, 'redis', callback);
unsetAddonConfig(app.id, 'redis', callback);
});
});
});
@@ -2183,5 +2185,5 @@ function teardownOauth(app, options, callback) {
debugApp(app, 'teardownOauth');
appdb.unsetAddonConfig(app.id, 'oauth', callback);
unsetAddonConfig(app.id, 'oauth', callback);
}