diff --git a/src/apps.js b/src/apps.js index 25f0a54a4..ef97710a5 100644 --- a/src/apps.js +++ b/src/apps.js @@ -86,6 +86,7 @@ exports = module.exports = { ISTATE_PENDING_DEBUG: 'pending_debug', ISTATE_PENDING_UNINSTALL: 'pending_uninstall', // uninstallation ISTATE_PENDING_RESTORE: 'pending_restore', // restore to previous backup or on upgrade + ISTATE_PENDING_IMPORT: 'pending_import', // import from external backup ISTATE_PENDING_UPDATE: 'pending_update', // update from installed state preserving data ISTATE_PENDING_BACKUP: 'pending_backup', // backup the app. this is state because it blocks other operations ISTATE_PENDING_START: 'pending_start', @@ -619,7 +620,8 @@ function scheduleTask(appId, installationState, taskId, callback) { if (error) return callback(error); let memoryLimit = 400; - if (installationState === exports.ISTATE_PENDING_BACKUP || installationState === exports.ISTATE_PENDING_CLONE || installationState === exports.ISTATE_PENDING_RESTORE || installationState === exports.ISTATE_PENDING_UPDATE) { + if (installationState === exports.ISTATE_PENDING_BACKUP || installationState === exports.ISTATE_PENDING_CLONE || installationState === exports.ISTATE_PENDING_RESTORE + || installationState === exports.ISTATE_PENDING_IMPORT || installationState === exports.ISTATE_PENDING_UPDATE) { memoryLimit = 'memoryLimit' in backupConfig ? Math.max(backupConfig.memoryLimit/1024/1024, 400) : 400; } @@ -682,12 +684,12 @@ function checkAppState(app, state) { if (app.error.installationState === state) return null; // allow uninstall from any state - if (state !== exports.ISTATE_PENDING_UNINSTALL && state !== exports.ISTATE_PENDING_RESTORE) return new BoxError(BoxError.BAD_STATE, 'Not allowed in error state'); + if (state !== exports.ISTATE_PENDING_UNINSTALL && state !== exports.ISTATE_PENDING_RESTORE && state !== exports.ISTATE_PENDING_IMPORT) return new BoxError(BoxError.BAD_STATE, 'Not allowed in error state'); } if (app.runState === exports.RSTATE_STOPPED) { // can't backup or restore since app addons are down. can't update because migration scripts won't run - if (state === exports.ISTATE_PENDING_UPDATE || state === exports.ISTATE_PENDING_BACKUP || state === exports.ISTATE_PENDING_RESTORE) return new BoxError(BoxError.BAD_STATE, 'Not allowed in stopped state'); + if (state === exports.ISTATE_PENDING_UPDATE || state === exports.ISTATE_PENDING_BACKUP || state === exports.ISTATE_PENDING_RESTORE || state === exports.ISTATE_PENDING_IMPORT) return new BoxError(BoxError.BAD_STATE, 'Not allowed in stopped state'); } return null; @@ -1552,7 +1554,7 @@ function importApp(app, data, auditSource, callback) { let error = backupFormat ? validateBackupFormat(backupFormat) : null; if (error) return callback(error); - error = checkAppState(app, exports.ISTATE_PENDING_RESTORE); + error = checkAppState(app, exports.ISTATE_PENDING_IMPORT); if (error) return callback(error); // TODO: make this smarter to do a read-only test and check if the file exists in the storage backend @@ -1581,10 +1583,10 @@ function importApp(app, data, auditSource, callback) { }, values: {} }; - addTask(appId, exports.ISTATE_PENDING_RESTORE, task, function (error, result) { + addTask(appId, exports.ISTATE_PENDING_IMPORT, task, function (error, result) { if (error) return callback(error); - eventlog.add(eventlog.ACTION_APP_RESTORE, auditSource, { app: app, backupId, fromManifest: app.manifest, toManifest: app.manifest, taskId: result.taskId }); + eventlog.add(eventlog.ACTION_APP_IMPORT, auditSource, { app: app, backupId, fromManifest: app.manifest, toManifest: app.manifest, taskId: result.taskId }); callback(null, { taskId: result.taskId }); }); diff --git a/src/apptask.js b/src/apptask.js index 7681ec813..62dd7836f 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -963,6 +963,7 @@ function run(appId, args, progressCallback, callback) { case apps.ISTATE_PENDING_INSTALL: case apps.ISTATE_PENDING_CLONE: case apps.ISTATE_PENDING_RESTORE: + case apps.ISTATE_PENDING_IMPORT: return install(app, args, progressCallback, callback); case apps.ISTATE_PENDING_CONFIGURE: return configure(app, args, progressCallback, callback); diff --git a/src/eventlog.js b/src/eventlog.js index b39cfa33a..b5d6d1e68 100644 --- a/src/eventlog.js +++ b/src/eventlog.js @@ -15,6 +15,7 @@ exports = module.exports = { ACTION_APP_REPAIR: 'app.repair', ACTION_APP_INSTALL: 'app.install', ACTION_APP_RESTORE: 'app.restore', + ACTION_APP_IMPORT: 'app.import', ACTION_APP_UNINSTALL: 'app.uninstall', ACTION_APP_UPDATE: 'app.update', ACTION_APP_UPDATE_FINISH: 'app.update.finish',