diff --git a/src/app/config.js b/src/app/config.js index d368098c..71b2c59c 100644 --- a/src/app/config.js +++ b/src/app/config.js @@ -232,12 +232,26 @@ angular event.preventDefault(); $state.go('backend.user.vault'); + return; } if (!authService.isAuthenticated()) { event.preventDefault(); authService.logOut(); $state.go('frontend.login.info'); + return; + } + + // user is guaranteed to be authenticated becuase of previous check + if (toState.name.indexOf('backend.org.') > -1 && toParams.orgId) { + authService.getUserProfile().then(function (profile) { + var orgs = profile.organizations; + if (!orgs || !(toParams.orgId in orgs) || orgs[toParams.orgId].status !== 2 || + orgs[toParams.orgId].type === 2) { + event.preventDefault(); + $state.go('backend.user.vault'); + } + }); } }); }); \ No newline at end of file diff --git a/src/app/global/sideNavController.js b/src/app/global/sideNavController.js index eae2e35f..099d5108 100644 --- a/src/app/global/sideNavController.js +++ b/src/app/global/sideNavController.js @@ -7,16 +7,11 @@ angular if ($state.includes('backend.org')) { authService.getUserProfile().then(function (userProfile) { - if (!userProfile.organizations || !userProfile.organizations.length) { + if (!userProfile.organizations || !($state.params.orgId in userProfile.organizations)) { return; } - for (var i = 0; i < userProfile.organizations.length; i++) { - if (userProfile.organizations[i].id === $state.params.orgId) { - $scope.orgProfile = userProfile.organizations[i]; - break; - } - } + $scope.orgProfile = userProfile.organizations[$state.params.orgId]; }); } }); diff --git a/src/app/services/authService.js b/src/app/services/authService.js index 5613aa99..62646ab3 100644 --- a/src/app/services/authService.js +++ b/src/app/services/authService.js @@ -93,15 +93,15 @@ angular }; if (profile.Organizations) { - var orgs = []; + var orgs = {}; for (var i = 0; i < profile.Organizations.length; i++) { - orgs.push({ + orgs[profile.Organizations[i].Id] = { id: profile.Organizations[i].Id, name: profile.Organizations[i].Name, key: profile.Organizations[i].Key, status: profile.Organizations[i].Status, type: profile.Organizations[i].Type - }); + }; } _userProfile.organizations = orgs; @@ -118,8 +118,8 @@ angular _service.addProfileOrganization = function (org) { return _service.getUserProfile().then(function (profile) { if (profile) { - if (!profile.Organizations) { - profile.Organizations = []; + if (!profile.organizations) { + profile.organizations = {}; } var o = { @@ -129,7 +129,7 @@ angular status: 2, // 2 = Confirmed type: 0 // 0 = Owner }; - profile.organizations.push(o); + profile.organizations[o.id] = o; _userProfile = profile; cryptoService.addOrgKey(o.id, o.key); diff --git a/src/app/services/cryptoService.js b/src/app/services/cryptoService.js index 543d1930..a8d8c72d 100644 --- a/src/app/services/cryptoService.js +++ b/src/app/services/cryptoService.js @@ -33,15 +33,18 @@ angular var orgKeysb64 = {}, _orgKeys = {}, setKey = false; - for (var i = 0; i < orgKeysCt.length; i++) { - try { - var orgKey = _service.rsaDecrypt(orgKeysCt[i].key, privateKey); - _orgKeys[orgKeysCt[i].id] = orgKey; - orgKeysb64[orgKeysCt[i].id] = forge.util.encode64(orgKey); - setKey = true; - } - catch (e) { - console.log('Cannot set org key ' + i + '. Decryption failed.'); + + for (var orgId in orgKeysCt) { + if (orgKeysCt.hasOwnProperty(orgId)) { + try { + var orgKey = _service.rsaDecrypt(orgKeysCt[orgId].key, privateKey); + _orgKeys[orgId] = orgKey; + orgKeysb64[orgId] = forge.util.encode64(orgKey); + setKey = true; + } + catch (e) { + console.log('Cannot set org key ' + i + '. Decryption failed.'); + } } } diff --git a/src/app/vault/vaultShareController.js b/src/app/vault/vaultShareController.js index 32baf833..40d761d8 100644 --- a/src/app/vault/vaultShareController.js +++ b/src/app/vault/vaultShareController.js @@ -24,15 +24,20 @@ return authService.getUserProfile(); }).then(function (profile) { if (profile && profile.organizations) { - var orgs = []; - for (var i = 0; i < profile.organizations.length; i++) { - orgs.push({ - id: profile.organizations[i].id, - name: profile.organizations[i].name - }); + var orgs = [], + setFirstOrg = false; - if (i === 0) { - $scope.model.organizationId = profile.organizations[i].id; + for (var i in profile.organizations) { + if (profile.organizations.hasOwnProperty(i)) { + orgs.push({ + id: profile.organizations[i].id, + name: profile.organizations[i].name + }); + + if (!setFirstOrg) { + setFirstOrg = true; + $scope.model.organizationId = profile.organizations[i].id; + } } }