mirror of
https://github.com/nextcloud/passman.git
synced 2025-09-12 07:54:45 +08:00
Able to restore revisions
This commit is contained in:
parent
eb6fe069e5
commit
8b9e29702a
6 changed files with 102 additions and 58 deletions
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}]);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue