Able to restore revisions

This commit is contained in:
brantje 2016-09-24 12:59:19 +02:00
parent eb6fe069e5
commit 8b9e29702a
6 changed files with 102 additions and 58 deletions

View file

@ -18,6 +18,7 @@ use OCA\Passman\Service\CredentialService;
use OCA\Passman\Activity;
use OCA\Passman\Service\ActivityService;
use OCA\Passman\Service\CredentialRevisionService;
class CredentialController extends ApiController {
private $userId;
private $credentialService;
@ -92,7 +93,7 @@ class CredentialController extends ApiController {
$credential_id, $custom_fields, $delete_time,
$description, $email, $expire_time, $favicon, $files, $guid,
$hidden, $label, $otp, $password, $renew_interval,
$tags, $url, $username, $vault_id) {
$tags, $url, $username, $vault_id, $revision_created) {
$credential = array(
'credential_id' => $credential_id,
'guid' => $guid,
@ -121,8 +122,12 @@ class CredentialController extends ApiController {
$storedCredential = $this->credentialService->getCredentialById($credential_id, $this->userId);
$link = ''; // @TODO create direct link to credential
if (($storedCredential->getDeleteTime() == 0) && $delete_time > 0) {
if ($revision_created) {
$this->activityService->add(
'item_apply_revision_self', array($label, $this->userId, $revision_created),
'', array(),
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
} else if (($storedCredential->getDeleteTime() == 0) && $delete_time > 0) {
$this->activityService->add(
'item_deleted_self', array($label, $this->userId),
'', array(),
@ -136,7 +141,7 @@ class CredentialController extends ApiController {
$this->activityService->add(
'item_renamed_self', array($storedCredential->getLabel(), $label, $this->userId),
'', array(),
$link, $this->userId, Activity::TYPE_ITEM_ACTION);
$link, $this->userId, Activity::TYPE_ITEM_RENAMED);
} else {
$this->activityService->add(
'item_edited_self', array($label, $this->userId),
@ -155,7 +160,7 @@ class CredentialController extends ApiController {
*/
public function deleteCredential($credential_id) {
$credential = $this->credentialService->getCredentialById($credential_id, $this->userId);
if($credential){
if ($credential) {
$result = $this->credentialService->deleteCredential($credential);
$this->activityService->add(
'item_destroyed_self', array($credential->getLabel()),
@ -179,7 +184,8 @@ class CredentialController extends ApiController {
/**
* @NoAdminRequired
*/
public function deleteRevision($credential_id) {
return;
public function deleteRevision($credential_id, $revision_id) {
$result = $this->credentialRevisionService->deleteRevision($revision_id, $this->userId);
return new JSONResponse($result);
}
}

View file

@ -8,59 +8,83 @@
* Controller of the passmanApp
*/
angular.module('passmanApp')
.controller('RevisionCtrl', ['$scope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$rootScope', function ($scope, SettingsService, VaultService, CredentialService, $location, $routeParams, $rootScope) {
.controller('RevisionCtrl', ['$scope', 'SettingsService', 'VaultService', 'CredentialService', '$location', '$routeParams', '$rootScope', 'NotificationService', '$filter',
function ($scope, SettingsService, VaultService, CredentialService, $location, $routeParams, $rootScope, NotificationService, $filter) {
if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) {
if (!$scope.active_vault) {
$location.path('/')
if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) {
if (!$scope.active_vault) {
$location.path('/')
}
} else {
if (SettingsService.getSetting('defaultVault') && SettingsService.getSetting('defaultVaultPass')) {
var _vault = angular.copy(SettingsService.getSetting('defaultVault'));
_vault.vaultKey = angular.copy(SettingsService.getSetting('defaultVaultPass'));
VaultService.setActiveVault(_vault);
$scope.active_vault = _vault;
}
}
} else {
if (SettingsService.getSetting('defaultVault') && SettingsService.getSetting('defaultVaultPass')) {
var _vault = angular.copy(SettingsService.getSetting('defaultVault'));
_vault.vaultKey = angular.copy(SettingsService.getSetting('defaultVaultPass'));
VaultService.setActiveVault(_vault);
$scope.active_vault = _vault;
if ($scope.active_vault) {
$scope.$parent.selectedVault = true;
}
}
if ($scope.active_vault) {
$scope.$parent.selectedVault = true;
}
var storedCredential = SettingsService.getSetting('edit_credential');
var storedCredential = SettingsService.getSetting('revision_credential');
var getRevisions = function () {
CredentialService.getRevisions($scope.storedCredential.credential_id).then(function (revisions) {
console.log(revisions)
$scope.revisions = revisions;
})
};
var getRevisions = function () {
CredentialService.getRevisions($scope.storedCredential.credential_id).then(function (revisions) {
$scope.revisions = revisions;
})
};
if (!storedCredential) {
CredentialService.getCredential($routeParams.credential_id).then(function(result){
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(result));
if (!storedCredential) {
CredentialService.getCredential($routeParams.credential_id).then(function (result) {
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(result));
getRevisions();
});
} else {
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(storedCredential));
getRevisions();
});
} else {
$scope.storedCredential = CredentialService.decryptCredential(angular.copy(storedCredential));
getRevisions();
}
}
$scope.selectRevision = function(revision){
$scope.selectedRevision = angular.copy(revision);
$scope.selectedRevision.credential_data = CredentialService.decryptCredential(angular.copy(revision.credential_data));
$rootScope.$emit('app_menu', true);
};
$scope.selectRevision = function (revision) {
$scope.selectedRevision = angular.copy(revision);
$scope.selectedRevision.credential_data = CredentialService.decryptCredential(angular.copy(revision.credential_data));
$rootScope.$emit('app_menu', true);
};
$scope.closeSelected = function () {
$rootScope.$emit('app_menu', false);
$scope.selectedRevision = false;
};
$scope.closeSelected = function () {
$rootScope.$emit('app_menu', false);
$scope.selectedRevision = false;
};
$scope.cancel = function () {
$location.path('/vault/' + $routeParams.vault_id);
$scope.storedCredential = null;
SettingsService.setSetting('revision_credential', null);
}
$scope.deleteRevision = function (revision) {
CredentialService.deleteRevision($scope.storedCredential.credential_id, revision.revision_id).then(function () {
for (var i = 0; i < $scope.revisions.length; i++) {
if ($scope.revisions[i].revision_id == revision.revision_id) {
$scope.revisions.splice(i, 1);
NotificationService.showNotification('Revision deleted', 5000);
break;
}
}
});
};
}]);
$scope.restoreRevision = function (revision) {
var _revision = angular.copy(revision);
var _credential = _revision.credential_data;
_credential.revision_created = $filter('date')(_revision.created * 1000 , "dd-MM-yyyy @ HH:mm:ss");
CredentialService.updateCredential(_credential).then(function (result) {
SettingsService.setSetting('revision_credential', null);
$rootScope.$emit('app_menu', false);
$location.path('/vault/' + $routeParams.vault_id);
NotificationService.showNotification('Revision restored!', 5000)
})
};
$scope.cancel = function () {
$location.path('/vault/' + $routeParams.vault_id);
$scope.storedCredential = null;
SettingsService.setSetting('revision_credential', null);
}
}]);

View file

@ -125,6 +125,16 @@ angular.module('passmanApp')
return response;
}
});
},
deleteRevision: function(credential_id, revision_id){
var queryUrl = OC.generateUrl('apps/passman/api/v2/credentials/' + credential_id + '/revision/' + revision_id);
return $http.delete(queryUrl).then(function (response) {
if (response.data) {
return response.data;
} else {
return response;
}
});
}
}
}]);

View file

@ -43,10 +43,10 @@ class CredentialRevisionMapper extends Mapper {
return $this->insert($revision);
}
public function deleteFile($revision_id, $user_id) {
$file = new CredentialRevision();
$file->setId($revision_id);
$file->setUserId($user_id);
$this->delete($file);
public function deleteRevision($revision_id, $user_id) {
$revision = new CredentialRevision();
$revision->setId($revision_id);
$revision->setUserId($user_id);
$this->delete($revision);
}
}

View file

@ -32,4 +32,8 @@ class CredentialRevisionService {
public function getRevisions($credential_id, $user_id){
return $this->credentialRevisionMapper->getRevisions($credential_id, $user_id);
}
public function deleteRevision($revision_id, $user_id){
return $this->credentialRevisionMapper->deleteRevision($revision_id, $user_id);
}
}

View file

@ -48,7 +48,7 @@ class CronService {
$this->activityService->add(
Activity::SUBJECT_ITEM_EXPIRED, array($credential->getLabel(), $credential->getUserId()),
'', array(),
$link, $credential->getUserId(), Activity::TYPE_ITEM_ACTION);
$link, $credential->getUserId(), Activity::TYPE_ITEM_EXPIRED);
$this->notificationService->credentialExpiredNotification($credential);
}