mirror of
https://github.com/nextcloud/passman.git
synced 2025-10-01 17:25:37 +08:00
Change the way the credentials are loaded, load credentials every 5 min, Decline share request works
This commit is contained in:
parent
53c55d5fd6
commit
0069844147
4 changed files with 112 additions and 70 deletions
|
@ -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);
|
||||||
|
|
|
@ -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
|
@ -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>
|
||||||
|
|
Loading…
Add table
Reference in a new issue