diff --git a/src/backuptask.js b/src/backuptask.js index 965fba37b..4648a27d7 100755 --- a/src/backuptask.js +++ b/src/backuptask.js @@ -46,12 +46,18 @@ function backupApp(backupId, appId, callback) { settings.getBackupConfig(function (error, backupConfig) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); - var backupMapping = [{ - source: path.join(paths.APPS_DATA_DIR, appId), - destination: '/' - }]; + var restoreConfig = require(path.join(paths.APPS_DATA_DIR, appId, 'config.json')); - api(backupConfig.provider).backup(backupConfig, backupId, backupMapping, callback); + api(backupConfig.provider).saveAppRestoreConfig(backupConfig, backupId, restoreConfig, function (error) { + if (error) return callback(error); + + var backupMapping = [{ + source: path.join(paths.APPS_DATA_DIR, appId), + destination: '/' + }]; + + api(backupConfig.provider).backup(backupConfig, backupId, backupMapping, callback); + }); }); } diff --git a/src/storage/filesystem.js b/src/storage/filesystem.js index 9d19c439f..b5db18125 100644 --- a/src/storage/filesystem.js +++ b/src/storage/filesystem.js @@ -4,7 +4,9 @@ exports = module.exports = { backup: backup, restore: restore, + saveAppRestoreConfig: saveAppRestoreConfig, getAppRestoreConfig: getAppRestoreConfig, + getDownloadStream: getDownloadStream, copyBackup: copyBackup, @@ -45,7 +47,7 @@ function backup(apiConfig, backupId, sourceDirectories, callback) { debug('[%s] backup: %j -> %s', backupId, sourceDirectories, backupFilePath); mkdirp(path.dirname(backupFilePath), function (error) { - if (error) return callback(error); + if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); var fileStream = fs.createWriteStream(backupFilePath); var archive = archiver('tar', { gzip: true }); @@ -133,6 +135,29 @@ function getDownloadStream(apiConfig, backupId, callback) { callback(null, stream); } +function saveAppRestoreConfig(apiConfig, backupId, restoreConfig, callback) { + assert.strictEqual(typeof apiConfig, 'object'); + assert.strictEqual(typeof backupId, 'string'); + assert.strictEqual(typeof restoreConfig, 'object'); + assert.strictEqual(typeof callback, 'function'); + + var backupFilePath = path.join(apiConfig.backupFolder || FALLBACK_BACKUP_FOLDER, backupId + '.json'); + + debug('[%s] saveAppRestoreConfig: %j -> %s', backupId, restoreConfig, backupFilePath); + + mkdirp(path.dirname(backupFilePath), function (error) { + if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); + + fs.writeFile(backupFilePath, JSON.stringify(restoreConfig), function (error) { + if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); + + debug('[%s] saveAppRestoreConfig: done', backupId); + + callback(); + }); + }); +} + function getAppRestoreConfig(apiConfig, backupId, callback) { assert.strictEqual(typeof apiConfig, 'object'); assert.strictEqual(typeof backupId, 'string');