From 00698441471a823eff96741d9ab4d28b6cd6f7f2 Mon Sep 17 00:00:00 2001 From: brantje Date: Wed, 5 Oct 2016 23:06:29 +0200 Subject: [PATCH] Change the way the credentials are loaded, load credentials every 5 min, Decline share request works --- js/app/controllers/credential.js | 170 +++++++++++++++++++------------ js/app/services/shareservice.js | 8 +- js/templates.js | 2 +- templates/views/show_vault.html | 2 +- 4 files changed, 112 insertions(+), 70 deletions(-) diff --git a/js/app/controllers/credential.js b/js/app/controllers/credential.js index 68e8d8b5..70105c47 100644 --- a/js/app/controllers/credential.js +++ b/js/app/controllers/credential.js @@ -9,8 +9,8 @@ */ angular.module('passmanApp') .controller('CredentialCtrl', ['$scope', 'VaultService', 'SettingsService', '$location', 'CredentialService', - '$rootScope', 'FileService', 'EncryptService', 'TagService', '$timeout', 'NotificationService', 'CacheService', 'ShareService', 'SharingACL', - function ($scope, VaultService, SettingsService, $location, CredentialService, $rootScope, FileService, EncryptService, TagService, $timeout, NotificationService, CacheService, ShareService, SharingACL) { + '$rootScope', 'FileService', 'EncryptService', 'TagService', '$timeout', 'NotificationService', 'CacheService', 'ShareService', 'SharingACL', '$interval', + function ($scope, VaultService, SettingsService, $location, CredentialService, $rootScope, FileService, EncryptService, TagService, $timeout, NotificationService, CacheService, ShareService, SharingACL, $interval) { $scope.active_vault = VaultService.getActiveVault(); if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) { if (!$scope.active_vault) { @@ -30,89 +30,110 @@ angular.module('passmanApp') $scope.show_spinner = true; - var getSharedCredentials = function() { - ShareService.getCredendialsSharedWithUs($scope.active_vault.guid).then(function (shared_credentials) { - console.log('Shared credentials', shared_credentials); - for (var c = 0; c < shared_credentials.length; c++) { - var _shared_credential = shared_credentials[c]; - var decrypted_key = EncryptService.decryptString(_shared_credential.shared_key); - try { - var _shared_credential_data = ShareService.decryptSharedCredential(_shared_credential.credential_data, decrypted_key); - } catch (e){ - - } - if(_shared_credential_data){ - delete _shared_credential.credential_data; - _shared_credential_data.acl = _shared_credential; - _shared_credential_data.acl.permissions = new SharingACL(_shared_credential_data.acl.permissions); - _shared_credential_data.tags_raw = _shared_credential_data.tags; - $scope.active_vault.credentials.push(_shared_credential_data); - } - } - }); - }; - var fetchCredentials = function () { VaultService.getVault($scope.active_vault).then(function (vault) { + var vaultKey = angular.copy($scope.active_vault.vaultKey); + var _credentials = angular.copy(vault.credentials); + vault.credentials = []; $scope.active_vault = vault; $scope.active_vault.vaultKey = vaultKey; VaultService.setActiveVault($scope.active_vault); - var _credentials = []; - for (var i = 0; i < $scope.active_vault.credentials.length; i++) { + console.log(vault); + for (var i = 0; i < _credentials.length; i++) { + var _credential = _credentials[i]; try { - if(!$scope.active_vault.credentials[i].shared_key) { - $scope.active_vault.credentials[i] = CredentialService.decryptCredential(angular.copy(vault.credentials[i])); + if (!_credential.shared_key) { + _credential = CredentialService.decryptCredential(angular.copy(_credential)); } else { - var enc_key = EncryptService.decryptString(vault.credentials[i].shared_key); - $scope.active_vault.credentials[i] = ShareService.decryptSharedCredential(angular.copy(vault.credentials[i]), enc_key); + var enc_key = EncryptService.decryptString(_credential.shared_key); + _credential = ShareService.decryptSharedCredential(angular.copy(_credential), enc_key); } - $scope.active_vault.credentials[i].tags_raw = $scope.active_vault.credentials[i].tags; + _credential.tags_raw = _credential.tags; } catch (e) { NotificationService.showNotification('An error happend during decryption', 5000); - $rootScope.$broadcast('logout'); - SettingsService.setSetting('defaultVaultPass', null); - SettingsService.setSetting('defaultVault', null); - $location.path('/') + //$rootScope.$broadcast('logout'); + //SettingsService.setSetting('defaultVaultPass', null); + //.setSetting('defaultVault', null); + //$location.path('/') } - if ($scope.active_vault.credentials[i].tags) { - TagService.addTags($scope.active_vault.credentials[i].tags); + if (_credential.tags) { + TagService.addTags(_credential.tags); } + _credentials[i] = _credential; } - getSharedCredentials(); + + ShareService.getCredendialsSharedWithUs(vault.guid).then(function (shared_credentials) { + console.log('Shared credentials', shared_credentials); + for (var c = 0; c < shared_credentials.length; c++) { + var _shared_credential = shared_credentials[c]; + var decrypted_key = EncryptService.decryptString(_shared_credential.shared_key); + try { + var _shared_credential_data = ShareService.decryptSharedCredential(_shared_credential.credential_data, decrypted_key); + } catch (e) { + + } + if (_shared_credential_data) { + delete _shared_credential.credential_data; + _shared_credential_data.acl = _shared_credential; + _shared_credential_data.acl.permissions = new SharingACL(_shared_credential_data.acl.permissions); + _shared_credential_data.tags_raw = _shared_credential_data.tags; + if (_shared_credential_data.tags) { + TagService.addTags(_shared_credential_data.tags); + } + _credentials.push(_shared_credential_data); + } + } + angular.merge($scope.active_vault.credentials, _credentials); + }); + + //getSharedCredentials(); $scope.show_spinner = false; }); }; + var getPendingShareRequests = function () { + ShareService.getPendingRequests().then(function (shareRequests) { + if (shareRequests.length > 0) { + $scope.incoming_share_requests = shareRequests; + jQuery('.share_popup').dialog({ + width: 600, + position: ['center', 90] + }); + } + }); + }; + + + var refresh_data_interval = null; if ($scope.active_vault) { $scope.$parent.selectedVault = true; - fetchCredentials() + fetchCredentials(); + getPendingShareRequests(); + refresh_data_interval = $interval(function () { + fetchCredentials(); + getPendingShareRequests(); + }, 60000 * 5) } - - ShareService.getPendingRequests().then(function (shareRequests) { - if(shareRequests.length > 0){ - $scope.incoming_share_requests = shareRequests; - jQuery('.share_popup').dialog({ - width: 600, - position:['center', 90] - }); - } + $scope.$on('$destroy', function() { + $interval.cancel(refresh_data_interval); }); + $scope.permissions = new SharingACL(0); - $scope.hasPermission = function(acl, permission){ - if(acl) { + $scope.hasPermission = function (acl, permission) { + if (acl) { return acl.hasPermission(permission); } else { return true; } }; - - $scope.acceptShareRequest = function(share_request){ + + $scope.acceptShareRequest = function (share_request) { console.log('Accepted share request', share_request); var crypted_shared_key = share_request.shared_key; var private_key = EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key); @@ -125,22 +146,37 @@ angular.module('passmanApp') var idx = $scope.incoming_share_requests.indexOf(share_request); $scope.incoming_share_requests.splice(idx, 1); var active_share_requests = false; - for(var v = 0; v < $scope.incoming_share_requests.length; v++){ - if($scope.incoming_share_requests[v].target_vault_id == $scope.active_vault.vault_id){ + for (var v = 0; v < $scope.incoming_share_requests.length; v++) { + if ($scope.incoming_share_requests[v].target_vault_id == $scope.active_vault.vault_id) { active_share_requests = true; } } - if(active_share_requests === false){ + if (active_share_requests === false) { jQuery('.ui-dialog').remove(); - getSharedCredentials(); + fetchCredentials(); } console.log(result) - }) + }) + }; + + $scope.declineShareRequest = function(share_request){ + ShareService.declineSharingRequest(share_request).then(function () { + var idx = $scope.incoming_share_requests.indexOf(share_request); + $scope.incoming_share_requests.splice(idx, 1); + var active_share_requests = false; + for (var v = 0; v < $scope.incoming_share_requests.length; v++) { + if ($scope.incoming_share_requests[v].target_vault_id == $scope.active_vault.vault_id) { + active_share_requests = true; + } + } + if (active_share_requests === false) { + jQuery('.ui-dialog').remove(); + fetchCredentials(); + } + }) }; - - $scope.addCredential = function () { var new_credential = CredentialService.newCredential(); var enc_c = CredentialService.encryptCredential(new_credential); @@ -318,38 +354,38 @@ angular.module('passmanApp') $scope.downloadFile = function (credential, file) { console.log(credential, file); - var callback = function(result){ + var callback = function (result) { var key = null; - if(!result.hasOwnProperty('file_data')){ + if (!result.hasOwnProperty('file_data')) { NotificationService.showNotification('Error downloading file, you probably don\'t have enough permissions', 5000); return; } - if(!credential.hasOwnProperty('acl') && credential.hasOwnProperty('shared_key')){ - if(credential.shared_key) { + if (!credential.hasOwnProperty('acl') && credential.hasOwnProperty('shared_key')) { + if (credential.shared_key) { key = EncryptService.decryptString(angular.copy(credential.shared_key)); } } - if(credential.hasOwnProperty('acl')){ + if (credential.hasOwnProperty('acl')) { key = EncryptService.decryptString(angular.copy(credential.acl.shared_key)); } var file_data = EncryptService.decryptString(result.file_data, key); var uriContent = FileService.dataURItoBlob(file_data, file.mimetype), a = document.createElement("a"); a.style = "display: none"; - a.id= 'downloadLink'; + a.id = 'downloadLink'; a.href = uriContent; a.download = escapeHTML(file.filename); jQuery('.detailsView').append(a); a.click(); window.URL.revokeObjectURL(uriContent); jQuery('#downloadLink').remove(); - setTimeout(function(){ + setTimeout(function () { $scope.selectedCredential = credential; }, 200) }; - if(!credential.hasOwnProperty('acl')){ + if (!credential.hasOwnProperty('acl')) { FileService.getFile(file).then(callback); } else { ShareService.downloadSharedFile(credential, file).then(callback); diff --git a/js/app/services/shareservice.js b/js/app/services/shareservice.js index 64fe5b29..88b692bb 100644 --- a/js/app/services/shareservice.js +++ b/js/app/services/shareservice.js @@ -67,13 +67,19 @@ angular.module('passmanApp') return response.data; }) }, + declineSharingRequest: function (request ) { + var queryUrl = OC.generateUrl('apps/passman/api/v2/sharing/decline/'+ request.req_id); + return $http.delete(queryUrl).then(function (response) { + return response.data; + }) + }, unshareCredential: function (credential) { var queryUrl = OC.generateUrl('apps/passman/api/v2/sharing/credential/' + credential.guid); return $http.delete(queryUrl).then(function (response) { return response.data; }) }, - + createPublicSharedCredential: function (shareObj) { var queryUrl = OC.generateUrl('apps/passman/api/v2/sharing/public'); return $http.post(queryUrl, shareObj).then(function (response) { diff --git a/js/templates.js b/js/templates.js index 35325dfd..80b84936 100644 --- a/js/templates.js +++ b/js/templates.js @@ -113,7 +113,7 @@ angular.module('views/share_credential.html', []).run(['$templateCache', functio angular.module('views/show_vault.html', []).run(['$templateCache', function($templateCache) { 'use strict'; $templateCache.put('views/show_vault.html', - '
Showing deleted since: All time {{delete_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}} Showing {{filtered_credentials.length}} of {{active_vault.credentials.length}} credentials
+
{{filtered_credentials}}
{{ ::credential.label}} {{ ::tag.text}}
  • {{ ::credential.label}}
    {{ ::tag.text}}
Label{{selectedCredential.label}}
Account
Password
OTP
E-mail
URL
Files
{{field.label}}
Expire time{{selectedCredential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
Changed{{selectedCredential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
Created{{selectedCredential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
{{tag.text}}
'); + '
Showing deleted since: All time {{delete_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}} Showing {{filtered_credentials.length}} of {{active_vault.credentials.length}} credentials
+
{{filtered_credentials}}
{{ ::credential.label}} {{ ::tag.text}}
  • {{ ::credential.label}}
    {{ ::tag.text}}
Label{{selectedCredential.label}}
Account
Password
OTP
E-mail
URL
Files
{{field.label}}
Expire time{{selectedCredential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
Changed{{selectedCredential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
Created{{selectedCredential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}
{{tag.text}}
'); }]); angular.module('views/vaults.html', []).run(['$templateCache', function($templateCache) { diff --git a/templates/views/show_vault.html b/templates/views/show_vault.html index 95a63de2..cec1293d 100644 --- a/templates/views/show_vault.html +++ b/templates/views/show_vault.html @@ -283,7 +283,7 @@ Accept - | Decline + | Decline