Added a delete page with options to delete the local database, as well as the remote files. Added a captcha to protect against automated attacks that would attempt to delete the remote files. This fixes #1201
92 lines
3.8 KiB
JavaScript
92 lines
3.8 KiB
JavaScript
backupApp.controller('DeleteController', function($scope, $routeParams, $location, gettextCatalog, CaptchaService, DialogService, ServerStatus, SystemInfo, BackupList, AppService, AppUtils) {
|
|
$scope.BackupID = $routeParams.backupid;
|
|
$scope.DeleteLocalDatabase = true;
|
|
$scope.DeleteRemoteFiles = false;
|
|
|
|
function resetBackupItem(force) {
|
|
var prev = $scope.DBPath;
|
|
|
|
$scope.Backup = BackupList.lookup[$scope.BackupID];
|
|
$scope.DBPath = null;
|
|
|
|
if ($scope.Backup == null || $scope.Backup.Backup == null) {
|
|
$scope.NoLocalDB = true;
|
|
$scope.DbUsedElsewhere = false;
|
|
} else {
|
|
$scope.DBPath = $scope.Backup.Backup.DBPath;
|
|
|
|
if ($scope.DBPath != prev || force)
|
|
AppService.post('/filesystem/validate', {path: $scope.DBPath}).then(function(resp) {
|
|
$scope.NoLocalDB = false;
|
|
}, function() {
|
|
$scope.NoLocalDB = true;
|
|
});
|
|
|
|
if ($scope.DBPath != prev || force)
|
|
AppService.get('/backup/' + $scope.BackupID + '/isdbusedelsewhere', {path: $scope.DBPath}).then(function(resp) {
|
|
$scope.DbUsedElsewhere = resp.data.inuse;
|
|
// Default to not delete the db if others use it
|
|
if (resp.data.inuse)
|
|
$scope.DeleteLocalDatabase = false;
|
|
|
|
}, function() {
|
|
$scope.DbUsedElsewhere = true;
|
|
});
|
|
}
|
|
|
|
if ($scope.Backup != null && !$scope.hasRefreshedRemoteSize && ($scope.Backup.Backup.Metadata.TargetFilesCount == null || $scope.Backup.Backup.Metadata.TargetFilesCount <= 0))
|
|
{
|
|
$scope.hasRefreshedRemoteSize = true;
|
|
AppService.post('/backup/' + $scope.BackupID + '/report-remote-size').then(
|
|
function(resp) {
|
|
|
|
var taskid = resp.data.ID;
|
|
$scope.list_files_taskid = taskid;
|
|
|
|
ServerStatus.callWhenTaskCompletes(taskid, function() {
|
|
|
|
});
|
|
}, AppUtils.connectionError);
|
|
}
|
|
|
|
};
|
|
|
|
$scope.$on('backuplistchanged', resetBackupItem);
|
|
resetBackupItem();
|
|
|
|
$scope.doExport = function() {
|
|
$location.path('/export/' + $scope.BackupID);
|
|
};
|
|
|
|
$scope.doDelete = function() {
|
|
if ($scope.DeleteRemoteFiles)
|
|
{
|
|
CaptchaService.Authorize(
|
|
gettextCatalog.getString('Confirm delete'),
|
|
gettextCatalog.getString('To confirm you want to delete all remote files for "{{name}}", please enter the word you see below', {name: $scope.Backup.Backup.Name}),
|
|
'DELETE /backup/' + $scope.BackupID,
|
|
function(token, answer) {
|
|
AppService.delete('/backup/' + $scope.BackupID + '?delete-local-db=' + $scope.DeleteLocalDatabase + '&delete-remote-files=' + $scope.DeleteRemoteFiles + '&captcha-token=' + token + '&captcha-answer=' + answer).then(function() {
|
|
$location.path('/');
|
|
}, AppUtils.connectionError);
|
|
}
|
|
);
|
|
}
|
|
else
|
|
{
|
|
DialogService.dialog(gettextCatalog.getString('Confirm delete'), gettextCatalog.getString('Do you really want to delete the backup: "{{name}}" ?', {name: $scope.Backup.Backup.Name}), [gettextCatalog.getString('No'), gettextCatalog.getString('Yes')], function(ix) {
|
|
if (ix == 1) {
|
|
AppService.delete('/backup/' + $scope.BackupID + '?delete-local-db=' + $scope.DeleteLocalDatabase + '&delete-remote-files=' + $scope.DeleteRemoteFiles).then(function() {
|
|
$location.path('/');
|
|
}, AppUtils.connectionError);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
$scope.goBack = function() {
|
|
$location.path('/');
|
|
};
|
|
|
|
});
|