diff --git a/src/views/backups.html b/src/views/backups.html index 6f4ffa98c..16fa287fb 100644 --- a/src/views/backups.html +++ b/src/views/backups.html @@ -177,6 +177,10 @@

Backups

+
+

Location

+
+

Cloudron makes a complete backup of your system based on this configuration. @@ -219,33 +223,51 @@

-
- Backup ID -
-
- {{ lastBackup.id }} - No backups have been made yet +
+
+
+
+

Listing

+
+ +
-
- Last backup -
-
- {{ lastBackup.creationTime | prettyDate }} - - +
+ + + +

No backups have been made yet

+ + + + + + + + + + + + + + + + + + + + +
 VersionContentsDateActions
v{{ backup.packageVersion }}
{{ backup.dependsOn.length }} app(s)
{{ backup.creationTime | prettyDate }}
+ +

-

- For Cloudron restore or migration, download the backup configuration. -

- -
-
@@ -263,9 +285,9 @@
- + - +
diff --git a/src/views/backups.js b/src/views/backups.js index 82c36c387..719d56590 100644 --- a/src/views/backups.js +++ b/src/views/backups.js @@ -129,9 +129,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat message: '', errorMessage: '', taskId: '', + taskType: '', checkStatus: function () { - Client.getLatestTaskByType('backup', function (error, task) { + Client.getLatestTaskByType($scope.createBackup.taskType, function (error, task) { if (error) return console.error(error); if (!task) return; @@ -166,6 +167,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.createBackup.percent = 0; $scope.createBackup.message = ''; $scope.createBackup.errorMessage = ''; + $scope.createBackup.taskType = 'backup'; Client.startBackup(function (error, taskId) { if (error) { @@ -189,7 +191,22 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat }); }, - stopBackup: function () { + startCleanup: function () { + $scope.createBackup.busy = true; + $scope.createBackup.percent = 0; + $scope.createBackup.message = ''; + $scope.createBackup.errorMessage = ''; + $scope.createBackup.taskType = 'cleanBackups'; + + Client.cleanupBackups(function (error, taskId) { + if (error) console.error(error); + + $scope.createBackup.taskId = taskId; + $scope.createBackup.updateStatus(); + }); + }, + + stopTask: function () { Client.stopTask($scope.createBackup.taskId, function (error) { if (error) { if (error.statusCode === 409) { @@ -207,6 +224,22 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat } }; + $scope.listBackups = { + copyBackupIdDone: false, + + copyBackupId: function (backup) { + var copyText = document.getElementById('backupIdHelper'); + copyText.value = backup.id; + copyText.select(); + document.execCommand('copy'); + + $scope.listBackups.copyBackupIdDone = true; + + // reset after 2.5sec + $timeout(function () { $scope.listBackups.copyBackupIdDone = false; }, 2500); + }, + }; + $scope.s3like = function (provider) { return provider === 's3' || provider === 'minio' || provider === 's3-v4-compat' || provider === 'exoscale-sos' || provider === 'digitalocean-spaces' @@ -228,9 +261,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat document.body.removeChild(element); } - $scope.downloadConfig = function () { + $scope.downloadConfig = function (backup) { // secrets and tokens already come with placeholder characters we remove them var tmp = { + backupId: backup.id, encrypted: !!$scope.backupConfig.password // we add this just to help the import UI };