user vault associations
This commit is contained in:
parent
6ece16ccc9
commit
4a6066bb88
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
.controller('organizationPeopleEditController', function ($scope, $state, $uibModalInstance, apiService, cipherService, id) {
|
.controller('organizationPeopleEditController', function ($scope, $state, $uibModalInstance, apiService, cipherService, id) {
|
||||||
$scope.loading = true;
|
$scope.loading = true;
|
||||||
$scope.selectedSubvaults = [];
|
$scope.subvaults = [];
|
||||||
$scope.selectedSubvaultsReadOnly = [];
|
$scope.selectedSubvaults = {};
|
||||||
|
|
||||||
$uibModalInstance.opened.then(function () {
|
$uibModalInstance.opened.then(function () {
|
||||||
apiService.subvaults.listOrganization({ orgId: $state.params.orgId }, function (list) {
|
apiService.subvaults.listOrganization({ orgId: $state.params.orgId }, function (list) {
|
||||||
|
@ -14,70 +14,68 @@
|
||||||
|
|
||||||
apiService.organizationUsers.get({ orgId: $state.params.orgId, id: id }, function (user) {
|
apiService.organizationUsers.get({ orgId: $state.params.orgId, id: id }, function (user) {
|
||||||
if (user && user.Subvaults) {
|
if (user && user.Subvaults) {
|
||||||
var subvaults = [];
|
var subvaults = {};
|
||||||
var subvaultsReadOnly = [];
|
|
||||||
for (var i = 0; i < user.Subvaults.Data.length; i++) {
|
for (var i = 0; i < user.Subvaults.Data.length; i++) {
|
||||||
subvaults.push(user.Subvaults.Data[i].SubvaultId);
|
subvaults[user.Subvaults.Data[i].SubvaultId] = {
|
||||||
if (user.Subvaults.Data[i].ReadOnly) {
|
subvaultId: user.Subvaults.Data[i].SubvaultId,
|
||||||
subvaultsReadOnly.push(user.Subvaults.Data[i].SubvaultId);
|
readOnly: user.Subvaults.Data[i].ReadOnly
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$scope.selectedSubvaults = subvaults;
|
$scope.selectedSubvaults = subvaults;
|
||||||
$scope.selectedSubvaultsReadOnly = subvaultsReadOnly;
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.toggleSubvaultSelectionAll = function ($event) {
|
$scope.toggleSubvaultSelectionAll = function ($event) {
|
||||||
var subvaultIds = [];
|
var subvaults = {};
|
||||||
if ($event.target.checked) {
|
if ($event.target.checked) {
|
||||||
for (var i = 0; i < $scope.subvaults.length; i++) {
|
for (var i = 0; i < $scope.subvaults.length; i++) {
|
||||||
subvaultIds.push($scope.subvaults[i].id);
|
subvaults[$scope.subvaults[i].id] = {
|
||||||
|
subvaultId: $scope.subvaults[i].id,
|
||||||
|
readOnly: ($scope.subvaults[i].id in $scope.selectedSubvaults) ?
|
||||||
|
$scope.selectedSubvaults[$scope.subvaults[i].id].readOnly : false
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
$scope.selectedSubvaultsReadOnly = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.selectedSubvaults = subvaultIds;
|
$scope.selectedSubvaults = subvaults;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSubvaultSelection = function (id) {
|
$scope.toggleSubvaultSelection = function (id) {
|
||||||
var i = $scope.selectedSubvaults.indexOf(id);
|
if (id in $scope.selectedSubvaults) {
|
||||||
if (i > -1) {
|
delete $scope.selectedSubvaults[id];
|
||||||
$scope.selectedSubvaults.splice(i, 1);
|
|
||||||
|
|
||||||
var j = $scope.selectedSubvaultsReadOnly.indexOf(id);
|
|
||||||
if (j > -1) {
|
|
||||||
$scope.selectedSubvaultsReadOnly.splice(j, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$scope.selectedSubvaults.push(id);
|
$scope.selectedSubvaults[id] = {
|
||||||
|
subvaultId: id,
|
||||||
|
readOnly: false
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSubvaultReadOnlySelection = function (id) {
|
$scope.toggleSubvaultReadOnlySelection = function (id) {
|
||||||
var i = $scope.selectedSubvaultsReadOnly.indexOf(id);
|
if (id in $scope.selectedSubvaults) {
|
||||||
if (i > -1) {
|
$scope.selectedSubvaults[id].readOnly = !!!$scope.selectedSubvaults[id].readOnly;
|
||||||
$scope.selectedSubvaultsReadOnly.splice(i, 1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$scope.selectedSubvaultsReadOnly.push(id);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.subvaultSelected = function (subvault) {
|
||||||
|
return subvault.id in $scope.selectedSubvaults;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.allSelected = function () {
|
||||||
|
return Object.keys($scope.selectedSubvaults).length === $scope.subvaults.length;
|
||||||
|
};
|
||||||
|
|
||||||
$scope.submit = function (model) {
|
$scope.submit = function (model) {
|
||||||
var subvaults = [];
|
var subvaults = [];
|
||||||
for (var i = 0; i < $scope.selectedSubvaults.length; i++) {
|
for (var subvaultId in $scope.selectedSubvaults) {
|
||||||
subvaults.push({
|
if ($scope.selectedSubvaults.hasOwnProperty(subvaultId)) {
|
||||||
id: null,
|
subvaults.push($scope.selectedSubvaults[subvaultId]);
|
||||||
subvaultId: $scope.selectedSubvaults[i],
|
}
|
||||||
readOnly: $scope.selectedSubvaultsReadOnly.indexOf($scope.selectedSubvaults[i]) > -1
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apiService.organizationUsers.put({ orgId: $state.params.orgId, id: 0 }, {
|
apiService.organizationUsers.put({ orgId: $state.params.orgId, id: id }, {
|
||||||
subvaults: subvaults
|
subvaults: subvaults
|
||||||
}, function () {
|
}, function () {
|
||||||
$uibModalInstance.close();
|
$uibModalInstance.close();
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
.controller('organizationPeopleInviteController', function ($scope, $state, $uibModalInstance, apiService, cipherService) {
|
.controller('organizationPeopleInviteController', function ($scope, $state, $uibModalInstance, apiService, cipherService) {
|
||||||
$scope.loading = true;
|
$scope.loading = true;
|
||||||
$scope.selectedSubvaults = [];
|
$scope.subvaults = [];
|
||||||
$scope.selectedSubvaultsReadOnly = [];
|
$scope.selectedSubvaults = {};
|
||||||
|
|
||||||
$uibModalInstance.opened.then(function () {
|
$uibModalInstance.opened.then(function () {
|
||||||
apiService.subvaults.listOrganization({ orgId: $state.params.orgId }, function (list) {
|
apiService.subvaults.listOrganization({ orgId: $state.params.orgId }, function (list) {
|
||||||
|
@ -14,52 +14,52 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.toggleSubvaultSelectionAll = function ($event) {
|
$scope.toggleSubvaultSelectionAll = function ($event) {
|
||||||
var subvaultIds = [];
|
var subvaults = {};
|
||||||
if ($event.target.checked)
|
if ($event.target.checked) {
|
||||||
{
|
|
||||||
for (var i = 0; i < $scope.subvaults.length; i++) {
|
for (var i = 0; i < $scope.subvaults.length; i++) {
|
||||||
subvaultIds.push($scope.subvaults[i].id);
|
subvaults[$scope.subvaults[i].id] = {
|
||||||
|
subvaultId: $scope.subvaults[i].id,
|
||||||
|
readOnly: ($scope.subvaults[i].id in $scope.selectedSubvaults) ?
|
||||||
|
$scope.selectedSubvaults[$scope.subvaults[i].id].readOnly : false
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
$scope.selectedSubvaultsReadOnly = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.selectedSubvaults = subvaultIds;
|
$scope.selectedSubvaults = subvaults;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSubvaultSelection = function (id) {
|
$scope.toggleSubvaultSelection = function (id) {
|
||||||
var i = $scope.selectedSubvaults.indexOf(id);
|
if (id in $scope.selectedSubvaults) {
|
||||||
if (i > -1) {
|
delete $scope.selectedSubvaults[id];
|
||||||
$scope.selectedSubvaults.splice(i, 1);
|
|
||||||
|
|
||||||
var j = $scope.selectedSubvaultsReadOnly.indexOf(id);
|
|
||||||
if (j > -1) {
|
|
||||||
$scope.selectedSubvaultsReadOnly.splice(j, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$scope.selectedSubvaults.push(id);
|
$scope.selectedSubvaults[id] = {
|
||||||
|
subvaultId: id,
|
||||||
|
readOnly: false
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSubvaultReadOnlySelection = function (id) {
|
$scope.toggleSubvaultReadOnlySelection = function (id) {
|
||||||
var i = $scope.selectedSubvaultsReadOnly.indexOf(id);
|
if (id in $scope.selectedSubvaults) {
|
||||||
if (i > -1) {
|
$scope.selectedSubvaults[id].readOnly = !!!$scope.selectedSubvaults[id].readOnly;
|
||||||
$scope.selectedSubvaultsReadOnly.splice(i, 1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$scope.selectedSubvaultsReadOnly.push(id);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.subvaultSelected = function (subvault) {
|
||||||
|
return subvault.id in $scope.selectedSubvaults;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.allSelected = function () {
|
||||||
|
return Object.keys($scope.selectedSubvaults).length === $scope.subvaults.length;
|
||||||
|
};
|
||||||
|
|
||||||
$scope.submit = function (model) {
|
$scope.submit = function (model) {
|
||||||
var subvaults = [];
|
var subvaults = [];
|
||||||
for (var i = 0; i < $scope.selectedSubvaults.length; i++) {
|
for (var subvaultId in $scope.selectedSubvaults) {
|
||||||
subvaults.push({
|
if ($scope.selectedSubvaults.hasOwnProperty(subvaultId)) {
|
||||||
subvaultId: $scope.selectedSubvaults[i],
|
subvaults.push($scope.selectedSubvaults[subvaultId]);
|
||||||
readOnly: $scope.selectedSubvaultsReadOnly.indexOf($scope.selectedSubvaults[i]) > -1
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apiService.organizationUsers.invite({ orgId: $state.params.orgId }, {
|
apiService.organizationUsers.invite({ orgId: $state.params.orgId }, {
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 40px;">
|
<th style="width: 40px;">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
ng-checked="selectedSubvaults.length === subvaults.length"
|
ng-checked="allSelected()"
|
||||||
ng-click="toggleSubvaultSelectionAll($event)">
|
ng-click="toggleSubvaultSelectionAll($event)">
|
||||||
</th>
|
</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
name="selectedSubvaults[]"
|
name="selectedSubvaults[]"
|
||||||
value="{{subvault.id}}"
|
value="{{subvault.id}}"
|
||||||
ng-checked="selectedSubvaults.indexOf(subvault.id) > -1"
|
ng-checked="subvaultSelected(subvault)"
|
||||||
ng-click="toggleSubvaultSelection(subvault.id)">
|
ng-click="toggleSubvaultSelection(subvault.id)">
|
||||||
</td>
|
</td>
|
||||||
<td valign="middle">
|
<td valign="middle">
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
name="selectedSubvaultsReadonly[]"
|
name="selectedSubvaultsReadonly[]"
|
||||||
value="{{subvault.id}}"
|
value="{{subvault.id}}"
|
||||||
ng-disabled="selectedSubvaults.indexOf(subvault.id) === -1"
|
ng-disabled="!subvaultSelected(subvault)"
|
||||||
ng-checked="selectedSubvaultsReadOnly.indexOf(subvault.id) > -1"
|
ng-checked="subvaultSelected(subvault) && selectedSubvaults[subvault.id].readOnly"
|
||||||
ng-click="toggleSubvaultReadOnlySelection(subvault.id)">
|
ng-click="toggleSubvaultReadOnlySelection(subvault.id)">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 40px;">
|
<th style="width: 40px;">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
ng-checked="selectedSubvaults.length === subvaults.length"
|
ng-checked="allSelected()"
|
||||||
ng-click="toggleSubvaultSelectionAll($event)">
|
ng-click="toggleSubvaultSelectionAll($event)">
|
||||||
</th>
|
</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
name="selectedSubvaults[]"
|
name="selectedSubvaults[]"
|
||||||
value="{{subvault.id}}"
|
value="{{subvault.id}}"
|
||||||
ng-checked="selectedSubvaults.indexOf(subvault.id) > -1"
|
ng-checked="subvaultSelected(subvault)"
|
||||||
ng-click="toggleSubvaultSelection(subvault.id)">
|
ng-click="toggleSubvaultSelection(subvault.id)">
|
||||||
</td>
|
</td>
|
||||||
<td valign="middle">
|
<td valign="middle">
|
||||||
|
@ -54,8 +54,8 @@
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
name="selectedSubvaultsReadonly[]"
|
name="selectedSubvaultsReadonly[]"
|
||||||
value="{{subvault.id}}"
|
value="{{subvault.id}}"
|
||||||
ng-disabled="selectedSubvaults.indexOf(subvault.id) === -1"
|
ng-disabled="!subvaultSelected(subvault)"
|
||||||
ng-checked="selectedSubvaultsReadOnly.indexOf(subvault.id) > -1"
|
ng-checked="subvaultSelected(subvault) && selectedSubvaults[subvault.id].readOnly"
|
||||||
ng-click="toggleSubvaultReadOnlySelection(subvault.id)">
|
ng-click="toggleSubvaultReadOnlySelection(subvault.id)">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
invite: { url: _apiUri + '/organizations/:orgId/users/invite', method: 'POST', params: { orgId: '@orgId' } },
|
invite: { url: _apiUri + '/organizations/:orgId/users/invite', method: 'POST', params: { orgId: '@orgId' } },
|
||||||
accept: { url: _apiUri + '/organizations/:orgId/users/:id/accept', method: 'POST', params: { id: '@id', orgId: '@orgId' } },
|
accept: { url: _apiUri + '/organizations/:orgId/users/:id/accept', method: 'POST', params: { id: '@id', orgId: '@orgId' } },
|
||||||
confirm: { url: _apiUri + '/organizations/:orgId/users/:id/confirm', method: 'POST', params: { id: '@id', orgId: '@orgId' } },
|
confirm: { url: _apiUri + '/organizations/:orgId/users/:id/confirm', method: 'POST', params: { id: '@id', orgId: '@orgId' } },
|
||||||
|
put: { method: 'POST', params: { id: '@id', orgId: '@orgId' } },
|
||||||
del: { url: _apiUri + '/organizations/:orgId/users/:id/delete', method: 'POST', params: { id: '@id', orgId: '@orgId' } }
|
del: { url: _apiUri + '/organizations/:orgId/users/:id/delete', method: 'POST', params: { id: '@id', orgId: '@orgId' } }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,8 @@ angular
|
||||||
id: encryptedCipher.Id,
|
id: encryptedCipher.Id,
|
||||||
folderId: encryptedCipher.FolderId,
|
folderId: encryptedCipher.FolderId,
|
||||||
favorite: encryptedCipher.Favorite,
|
favorite: encryptedCipher.Favorite,
|
||||||
name: decryptProperty(encryptedCipher.Data.Name, key, false),
|
name: _service.decryptProperty(encryptedCipher.Data.Name, key, false),
|
||||||
username: decryptProperty(encryptedCipher.Data.Username, key, true)
|
username: _service.decryptProperty(encryptedCipher.Data.Username, key, true)
|
||||||
};
|
};
|
||||||
|
|
||||||
return login;
|
return login;
|
||||||
|
@ -90,7 +90,7 @@ angular
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: encryptedFolder.Id,
|
id: encryptedFolder.Id,
|
||||||
name: decryptProperty(encryptedFolder.Data.Name, null, false)
|
name: _service.decryptProperty(encryptedFolder.Data.Name, null, false)
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -114,12 +114,12 @@ angular
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: encryptedSubvault.Id,
|
id: encryptedSubvault.Id,
|
||||||
name: catchError ? decryptProperty(encryptedSubvault.Name, key, false) :
|
name: catchError ? _service.decryptProperty(encryptedSubvault.Name, key, false) :
|
||||||
cryptoService.decrypt(encryptedSubvault.Name, key)
|
cryptoService.decrypt(encryptedSubvault.Name, key)
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function decryptProperty(property, key, checkEmpty) {
|
_service.decryptProperty = function(property, key, checkEmpty) {
|
||||||
if (checkEmpty && (!property || property === '')) {
|
if (checkEmpty && (!property || property === '')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,19 +31,26 @@ angular
|
||||||
}
|
}
|
||||||
|
|
||||||
var orgKeysb64 = {},
|
var orgKeysb64 = {},
|
||||||
_orgKeys = {};
|
_orgKeys = {},
|
||||||
|
setKey = false;
|
||||||
for (var i = 0; i < orgKeysCt.length; i++) {
|
for (var i = 0; i < orgKeysCt.length; i++) {
|
||||||
try {
|
try {
|
||||||
var orgKey = _service.rsaDecrypt(orgKeysCt[i].key, privateKey);
|
var orgKey = _service.rsaDecrypt(orgKeysCt[i].key, privateKey);
|
||||||
_orgKeys[orgKeysCt[i].id] = orgKey;
|
_orgKeys[orgKeysCt[i].id] = orgKey;
|
||||||
orgKeysb64[orgKeysCt[i].id] = forge.util.encode64(orgKey);
|
orgKeysb64[orgKeysCt[i].id] = forge.util.encode64(orgKey);
|
||||||
|
setKey = true;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
console.log('Cannot set org key ' + i + '. Decryption failed.');
|
console.log('Cannot set org key ' + i + '. Decryption failed.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sessionStorage.orgKeys = orgKeysb64;
|
if (setKey) {
|
||||||
|
$sessionStorage.orgKeys = orgKeysb64;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_orgKeys = null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
_service.addOrgKey = function (orgKeyCt, privateKey) {
|
_service.addOrgKey = function (orgKeyCt, privateKey) {
|
||||||
|
@ -63,6 +70,7 @@ angular
|
||||||
orgKeysb64[orgKeyCt.id] = forge.util.encode64(orgKey);
|
orgKeysb64[orgKeyCt.id] = forge.util.encode64(orgKey);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
|
_orgKeys = null;
|
||||||
console.log('Cannot set org key. Decryption failed.');
|
console.log('Cannot set org key. Decryption failed.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,7 +185,7 @@ angular
|
||||||
};
|
};
|
||||||
|
|
||||||
_service.clearOrgKeys = function () {
|
_service.clearOrgKeys = function () {
|
||||||
_orgKeys = {};
|
_orgKeys = null;
|
||||||
delete $sessionStorage.orgKeys;
|
delete $sessionStorage.orgKeys;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue