diff --git a/src/backuptask.js b/src/backuptask.js index 8faf094ab..06e7a2234 100644 --- a/src/backuptask.js +++ b/src/backuptask.js @@ -1017,10 +1017,9 @@ async function downloadMail(restoreConfig, progressCallback) { const dataLayout = new DataLayout(mailDataDir, []); const startTime = new Date(); - const backupConfig = restoreConfig.backupConfig || await settings.getBackupConfig(); const downloadAsync = util.promisify(download); - await downloadAsync(backupConfig, restoreConfig.backupId, restoreConfig.backupFormat, dataLayout, progressCallback); + await downloadAsync(restoreConfig.backupConfig, restoreConfig.backupId, restoreConfig.backupFormat, dataLayout, progressCallback); debug('downloadMail: time: %s', (new Date() - startTime)/1000); } diff --git a/src/cloudron.js b/src/cloudron.js index 541a9acd4..51530ced0 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -10,7 +10,6 @@ exports = module.exports = { isRebootRequired, onActivated, - onRestored, setupDnsAndCert, @@ -28,7 +27,6 @@ const apps = require('./apps.js'), assert = require('assert'), AuditSource = require('./auditsource.js'), backups = require('./backups.js'), - backuptask = require('./backuptask.js'), BoxError = require('./boxerror.js'), branding = require('./branding.js'), constants = require('./constants.js'), @@ -85,24 +83,6 @@ async function onActivated(options) { await reverseProxy.writeDefaultConfig({ activated :true }); } -async function onRestored(options) { - assert.strictEqual(typeof options, 'object'); - - debug('onRestored: downloading mail'); - - const [error, results] = await safe(backups.getByIdentifierAndStatePaged(backups.BACKUP_IDENTIFIER_MAIL, backups.BACKUP_STATE_NORMAL, 1, 1)); - if (error || results.length == 0) { - debug('startMail: could not find backup to restore', error, results); - } else { - debug(`startMail: downloading backup ${results[0].id}`); - const restoreConfig = { backupId: results[0].id, backupFormat: results[0].format }; - // have to wait for download before starting mail container because we download as non-root user - await backuptask.downloadMail(restoreConfig, (progress) => debug(`startMail: ${progress.message}`)); - } - - await onActivated(options); -} - async function notifyUpdate() { const version = safe.fs.readFileSync(paths.VERSION_FILE, 'utf8'); if (version === constants.VERSION) return; diff --git a/src/provision.js b/src/provision.js index d30d32e7a..a3f3271e3 100644 --- a/src/provision.js +++ b/src/provision.js @@ -150,8 +150,15 @@ async function restoreTask(backupConfig, backupId, sysinfoConfig, options, audit assert.strictEqual(typeof auditSource, 'object'); try { - setProgress('restore', 'Downloading backup'); + setProgress('restore', 'Downloading box backup'); await backuptask.restore(backupConfig, backupId, (progress) => setProgress('restore', progress.message)); + + setProgress('restore', 'Downloading mail backup'); + const mailBackups = await backups.getByIdentifierAndStatePaged(backups.BACKUP_IDENTIFIER_MAIL, backups.BACKUP_STATE_NORMAL, 1, 1); + if (mailBackups.length === 0) throw new BoxError(BoxError.NOT_FOUND, 'mail backup not found'); + const mailRestoreConfig = { backupConfig, backupId: mailBackups[0].id, backupFormat: mailBackups[0].format }; + await backuptask.downloadMail(mailRestoreConfig, (progress) => setProgress('restore', progress.message)); + await settings.setSysinfoConfig(sysinfoConfig); await reverseProxy.restoreFallbackCertificates(); @@ -161,7 +168,7 @@ async function restoreTask(backupConfig, backupId, sysinfoConfig, options, audit await settings.setBackupCredentials(backupConfig); // update just the credentials and not the policy and flags await eventlog.add(eventlog.ACTION_RESTORE, auditSource, { backupId }); - setImmediate(() => safe(cloudron.onRestored(options), { debug })); + setImmediate(() => safe(cloudron.onActivated(options), { debug })); } catch (error) { gProvisionStatus.restore.errorMessage = error ? error.message : ''; }