diff --git a/src/backups.js b/src/backups.js index 30c518cc4..97b24c00f 100644 --- a/src/backups.js +++ b/src/backups.js @@ -149,10 +149,11 @@ function getRestoreUrl(backupId, callback) { var obj = { id: backupId, url: result.url, - backupKey: backupConfig.key + backupKey: backupConfig.key, + sha1: result.sha1 || null // not supported by all backends }; - debug('getRestoreUrl: id:%s url:%s backupKey:%s', obj.id, obj.url, obj.backupKey); + debug('getRestoreUrl: id:%s url:%s backupKey:%s sha1:%s', obj.id, obj.url, obj.backupKey, obj.sha1); callback(null, obj); }); diff --git a/src/storage/filesystem.js b/src/storage/filesystem.js index f48570a68..aea76e683 100644 --- a/src/storage/filesystem.js +++ b/src/storage/filesystem.js @@ -15,10 +15,12 @@ exports = module.exports = { var assert = require('assert'), async = require('async'), BackupsError = require('../backups.js').BackupsError, + checksum = require('checksum'), fs = require('fs'), path = require('path'), safe = require('safetydance'), - shell = require('../shell.js'); + shell = require('../shell.js'), + util = require('util'); var FALLBACK_BACKUP_FOLDER = '/var/backups'; var RMBACKUP_CMD = path.join(__dirname, '../scripts/rmbackup.sh'); @@ -61,7 +63,11 @@ function getRestoreUrl(apiConfig, filename, callback) { var backupFolder = apiConfig.backupFolder || FALLBACK_BACKUP_FOLDER; var restoreUrl = 'file://' + path.join(backupFolder, filename); - callback(null, { url: restoreUrl }); + checksum.file(path.join(backupFolder, filename), function (error, result) { + if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, util.format('Failed to calculate checksum:', error))); + + callback(null, { url: restoreUrl, sha1: result }); + }); } function getAppRestoreConfig(apiConfig, backupId, callback) { diff --git a/src/storage/interface.js b/src/storage/interface.js index d4f5be913..6e3fb0696 100644 --- a/src/storage/interface.js +++ b/src/storage/interface.js @@ -49,7 +49,7 @@ function getRestoreUrl(apiConfig, filename, callback) { assert.strictEqual(typeof filename, 'string'); assert.strictEqual(typeof callback, 'function'); - // Result: { url: } + // Result: { url: , sha1: } // The resulting url must work with curl as it is passed into start.sh and restoreapp.sh callback(new Error('not implemented'));