Change the way the credentials are loaded, load credentials every 5 min, Decline share request works

This commit is contained in:
brantje 2016-10-05 23:06:29 +02:00
parent 53c55d5fd6
commit 0069844147
No known key found for this signature in database
GPG key ID: 5FF1D117F918687F
4 changed files with 112 additions and 70 deletions

View file

@ -9,8 +9,8 @@
*/ */
angular.module('passmanApp') angular.module('passmanApp')
.controller('CredentialCtrl', ['$scope', 'VaultService', 'SettingsService', '$location', 'CredentialService', .controller('CredentialCtrl', ['$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) { function ($scope, VaultService, SettingsService, $location, CredentialService, $rootScope, FileService, EncryptService, TagService, $timeout, NotificationService, CacheService, ShareService, SharingACL, $interval) {
$scope.active_vault = VaultService.getActiveVault(); $scope.active_vault = VaultService.getActiveVault();
if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) { if (!SettingsService.getSetting('defaultVault') || !SettingsService.getSetting('defaultVaultPass')) {
if (!$scope.active_vault) { if (!$scope.active_vault) {
@ -30,81 +30,102 @@ angular.module('passmanApp')
$scope.show_spinner = true; $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 () { var fetchCredentials = function () {
VaultService.getVault($scope.active_vault).then(function (vault) { VaultService.getVault($scope.active_vault).then(function (vault) {
var vaultKey = angular.copy($scope.active_vault.vaultKey); var vaultKey = angular.copy($scope.active_vault.vaultKey);
var _credentials = angular.copy(vault.credentials);
vault.credentials = [];
$scope.active_vault = vault; $scope.active_vault = vault;
$scope.active_vault.vaultKey = vaultKey; $scope.active_vault.vaultKey = vaultKey;
VaultService.setActiveVault($scope.active_vault); VaultService.setActiveVault($scope.active_vault);
var _credentials = []; console.log(vault);
for (var i = 0; i < $scope.active_vault.credentials.length; i++) { for (var i = 0; i < _credentials.length; i++) {
var _credential = _credentials[i];
try { try {
if(!$scope.active_vault.credentials[i].shared_key) { if (!_credential.shared_key) {
$scope.active_vault.credentials[i] = CredentialService.decryptCredential(angular.copy(vault.credentials[i])); _credential = CredentialService.decryptCredential(angular.copy(_credential));
} else { } else {
var enc_key = EncryptService.decryptString(vault.credentials[i].shared_key); var enc_key = EncryptService.decryptString(_credential.shared_key);
$scope.active_vault.credentials[i] = ShareService.decryptSharedCredential(angular.copy(vault.credentials[i]), enc_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) { } catch (e) {
NotificationService.showNotification('An error happend during decryption', 5000); NotificationService.showNotification('An error happend during decryption', 5000);
$rootScope.$broadcast('logout'); //$rootScope.$broadcast('logout');
SettingsService.setSetting('defaultVaultPass', null); //SettingsService.setSetting('defaultVaultPass', null);
SettingsService.setSetting('defaultVault', null); //.setSetting('defaultVault', null);
$location.path('/') //$location.path('/')
} }
if ($scope.active_vault.credentials[i].tags) { if (_credential.tags) {
TagService.addTags($scope.active_vault.credentials[i].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; $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) { if ($scope.active_vault) {
$scope.$parent.selectedVault = true; $scope.$parent.selectedVault = true;
fetchCredentials() fetchCredentials();
getPendingShareRequests();
refresh_data_interval = $interval(function () {
fetchCredentials();
getPendingShareRequests();
}, 60000 * 5)
} }
$scope.$on('$destroy', function() {
ShareService.getPendingRequests().then(function (shareRequests) { $interval.cancel(refresh_data_interval);
if(shareRequests.length > 0){
$scope.incoming_share_requests = shareRequests;
jQuery('.share_popup').dialog({
width: 600,
position:['center', 90]
});
}
}); });
$scope.permissions = new SharingACL(0); $scope.permissions = new SharingACL(0);
$scope.hasPermission = function(acl, permission){ $scope.hasPermission = function (acl, permission) {
if(acl) { if (acl) {
return acl.hasPermission(permission); return acl.hasPermission(permission);
} else { } else {
return true; return true;
@ -112,7 +133,7 @@ angular.module('passmanApp')
}; };
$scope.acceptShareRequest = function(share_request){ $scope.acceptShareRequest = function (share_request) {
console.log('Accepted share request', share_request); console.log('Accepted share request', share_request);
var crypted_shared_key = share_request.shared_key; var crypted_shared_key = share_request.shared_key;
var private_key = EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key); var private_key = EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);
@ -125,20 +146,35 @@ angular.module('passmanApp')
var idx = $scope.incoming_share_requests.indexOf(share_request); var idx = $scope.incoming_share_requests.indexOf(share_request);
$scope.incoming_share_requests.splice(idx, 1); $scope.incoming_share_requests.splice(idx, 1);
var active_share_requests = false; var active_share_requests = false;
for(var v = 0; v < $scope.incoming_share_requests.length; v++){ 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){ if ($scope.incoming_share_requests[v].target_vault_id == $scope.active_vault.vault_id) {
active_share_requests = true; active_share_requests = true;
} }
} }
if(active_share_requests === false){ if (active_share_requests === false) {
jQuery('.ui-dialog').remove(); jQuery('.ui-dialog').remove();
getSharedCredentials(); fetchCredentials();
} }
console.log(result) 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 () { $scope.addCredential = function () {
@ -318,38 +354,38 @@ angular.module('passmanApp')
$scope.downloadFile = function (credential, file) { $scope.downloadFile = function (credential, file) {
console.log(credential, file); console.log(credential, file);
var callback = function(result){ var callback = function (result) {
var key = null; 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); NotificationService.showNotification('Error downloading file, you probably don\'t have enough permissions', 5000);
return; return;
} }
if(!credential.hasOwnProperty('acl') && credential.hasOwnProperty('shared_key')){ if (!credential.hasOwnProperty('acl') && credential.hasOwnProperty('shared_key')) {
if(credential.shared_key) { if (credential.shared_key) {
key = EncryptService.decryptString(angular.copy(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)); key = EncryptService.decryptString(angular.copy(credential.acl.shared_key));
} }
var file_data = EncryptService.decryptString(result.file_data, key); var file_data = EncryptService.decryptString(result.file_data, key);
var uriContent = FileService.dataURItoBlob(file_data, file.mimetype), a = document.createElement("a"); var uriContent = FileService.dataURItoBlob(file_data, file.mimetype), a = document.createElement("a");
a.style = "display: none"; a.style = "display: none";
a.id= 'downloadLink'; a.id = 'downloadLink';
a.href = uriContent; a.href = uriContent;
a.download = escapeHTML(file.filename); a.download = escapeHTML(file.filename);
jQuery('.detailsView').append(a); jQuery('.detailsView').append(a);
a.click(); a.click();
window.URL.revokeObjectURL(uriContent); window.URL.revokeObjectURL(uriContent);
jQuery('#downloadLink').remove(); jQuery('#downloadLink').remove();
setTimeout(function(){ setTimeout(function () {
$scope.selectedCredential = credential; $scope.selectedCredential = credential;
}, 200) }, 200)
}; };
if(!credential.hasOwnProperty('acl')){ if (!credential.hasOwnProperty('acl')) {
FileService.getFile(file).then(callback); FileService.getFile(file).then(callback);
} else { } else {
ShareService.downloadSharedFile(credential, file).then(callback); ShareService.downloadSharedFile(credential, file).then(callback);

View file

@ -67,6 +67,12 @@ angular.module('passmanApp')
return response.data; 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) { unshareCredential: function (credential) {
var queryUrl = OC.generateUrl('apps/passman/api/v2/sharing/credential/' + credential.guid); var queryUrl = OC.generateUrl('apps/passman/api/v2/sharing/credential/' + credential.guid);
return $http.delete(queryUrl).then(function (response) { return $http.delete(queryUrl).then(function (response) {

File diff suppressed because one or more lines are too long

View file

@ -283,7 +283,7 @@
</td> </td>
<td> <td>
<span class="link" ng-click="acceptShareRequest(share_request)">Accept</span> <span class="link" ng-click="acceptShareRequest(share_request)">Accept</span>
| <span class="link">Decline</span> | <span class="link" ng-click="declineShareRequest(share_request)">Decline</span>
</td> </td>
</tr> </tr>
</table> </table>