Make external backup restore a separate route (import)

fixes #650
This commit is contained in:
Girish Ramakrishnan
2019-10-15 09:16:29 -07:00
parent 8878bc4bf9
commit 351bd46cb7
3 changed files with 60 additions and 10 deletions

View File

@@ -33,6 +33,7 @@ exports = module.exports = {
repair: repair,
restore: restore,
importApp: importApp,
clone: clone,
update: update,
@@ -726,8 +727,6 @@ function install(data, user, auditSource, callback) {
debugMode = data.debugMode || null,
enableBackup = 'enableBackup' in data ? data.enableBackup : true,
enableAutomaticUpdate = 'enableAutomaticUpdate' in data ? data.enableAutomaticUpdate : true,
backupId = data.backupId || null,
backupFormat = data.backupFormat || 'tgz',
alternateDomains = data.alternateDomains || [],
env = data.env || {},
mailboxName = data.mailboxName || '',
@@ -757,8 +756,6 @@ function install(data, user, auditSource, callback) {
error = validateDebugMode(debugMode);
if (error) return callback(error);
error = validateBackupFormat(backupFormat);
if (error) return callback(error);
error = validateLabel(label);
if (error) return callback(error);
@@ -814,7 +811,7 @@ function install(data, user, auditSource, callback) {
label: label,
tags: tags,
runState: exports.RSTATE_RUNNING,
installationState: backupId ? exports.ISTATE_PENDING_RESTORE : exports.ISTATE_PENDING_INSTALL
installationState: exports.ISTATE_PENDING_INSTALL
};
appdb.add(appId, appStoreId, manifest, location, domain, translatePortBindings(portBindings, manifest), data, function (error) {
@@ -831,9 +828,8 @@ function install(data, user, auditSource, callback) {
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Error setting cert: ' + error.message));
}
const restoreConfig = backupId ? { backupId: backupId, backupFormat: backupFormat } : null;
const task = {
args: { restoreConfig, overwriteDns },
args: { restoreConfig: null, overwriteDns },
values: { },
requiredState: data.installationState
};
@@ -1489,6 +1485,43 @@ function restore(appId, data, auditSource, callback) {
});
}
function importApp(appId, data, auditSource, callback) {
assert.strictEqual(typeof appId, 'string');
assert.strictEqual(typeof data, 'object');
assert.strictEqual(typeof auditSource, 'object');
assert.strictEqual(typeof callback, 'function');
debug('Will import app with id:%s', appId);
get(appId, function (error, app) {
if (error) return callback(error);
error = validateBackupFormat(data.backupFormat);
if (error) return callback(error);
error = checkAppState(app, exports.ISTATE_PENDING_RESTORE);
if (error) return callback(error);
// TODO: check if the file exists in the storage backend
const restoreConfig = { backupId: data.backupId, backupFormat: data.backupFormat, oldManifest: app.manifest };
const task = {
args: {
restoreConfig,
overwriteDns: true
},
values: {}
};
addTask(appId, exports.ISTATE_PENDING_RESTORE, task, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_RESTORE, auditSource, { app: app, backupId: data.backupId, fromManifest: app.manifest, toManifest: app.manifest, taskId: result.taskId });
callback(null, { taskId: result.taskId });
});
});
}
function purchaseApp(data, callback) {
assert.strictEqual(typeof data, 'object');
assert.strictEqual(typeof callback, 'function');