passbolt-browser-extension 5.13.0 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/Dockerfile +33 -3
- package/.devcontainer/devcontainer-lock.json +9 -0
- package/.devcontainer/post-start.sh +1 -2
- package/.github/workflows/codeql-analysis.yml +2 -1
- package/.github/workflows/release_candidate.yaml +3 -1
- package/.gitlab-ci.yml +1 -0
- package/CHANGELOG.md +202 -70
- package/CODEOWNERS +2 -0
- package/RELEASE_NOTES.md +4 -2
- package/package.json +9 -7
- package/renovate.json +6 -0
- package/src/all/background_page/controller/InformMenuController/InformMenuController.js +2 -5
- package/src/all/background_page/controller/InformMenuController/InformMenuController.test.js +31 -1
- package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.js +1 -1
- package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.test.js +6 -14
- package/src/all/background_page/controller/account/updatePrivateKeyController.js +7 -5
- package/src/all/background_page/controller/account/updatePrivateKeyController.test.js +18 -13
- package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.js +4 -2
- package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.test.js +25 -2
- package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.js +1 -1
- package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.test.js +10 -5
- package/src/all/background_page/controller/accountRecovery/recoverAccountController.js +6 -2
- package/src/all/background_page/controller/accountRecovery/recoverAccountController.test.js +11 -4
- package/src/all/background_page/controller/auth/authCheckStatus.test.data.js +6 -6
- package/src/all/background_page/controller/auth/authCheckStatusController.js +11 -3
- package/src/all/background_page/controller/auth/authCheckStatusController.test.js +74 -44
- package/src/all/background_page/controller/auth/authIsMfaRequiredController.js +11 -3
- package/src/all/background_page/controller/auth/authIsMfaRequiredController.test.js +18 -9
- package/src/all/background_page/controller/auth/authLoginController.js +1 -1
- package/src/all/background_page/controller/auth/authLoginController.test.js +10 -5
- package/src/all/background_page/controller/autofill/AutofillController.js +3 -3
- package/src/all/background_page/controller/autofill/AutofillController.test.js +20 -12
- package/src/all/background_page/controller/export/exportResourcesFileController.js +6 -3
- package/src/all/background_page/controller/export/exportResourcesFileController.test.js +34 -4
- package/src/all/background_page/controller/extension/onExtensionInstalledController.js +8 -2
- package/src/all/background_page/controller/extension/onExtensionInstalledController.test.js +5 -1
- package/src/all/background_page/controller/group/{getOrFindGroupsController.js → findGroupsByIdsForShareController.js} +9 -10
- package/src/all/background_page/controller/group/{getOrFindGroupsController.test.js → findGroupsByIdsForShareController.test.js} +8 -8
- package/src/all/background_page/controller/group/groupUpdateController.test.js +1 -0
- package/src/all/background_page/controller/import/importResourcesFileController.test.js +8 -1
- package/src/all/background_page/controller/informCallToActionController/informCallToActionController.js +2 -2
- package/src/all/background_page/controller/informCallToActionController/informCallToActionController.test.js +7 -4
- package/src/all/background_page/controller/locale/getLocaleController.js +3 -2
- package/src/all/background_page/controller/metadata/findMetadataTypesSettingsController.test.js +9 -15
- package/src/all/background_page/controller/metadata/getMetadataTypesSettingsController.test.js +9 -15
- package/src/all/background_page/controller/metadata/getOrFindMetadataKeysSettingsController.test.js +12 -22
- package/src/all/background_page/controller/metadata/shareMetadataKeyPrivateController.test.js +14 -2
- package/src/all/background_page/controller/move/moveFolderController.test.js +8 -0
- package/src/all/background_page/controller/move/moveResourcesController.test.js +8 -0
- package/src/all/background_page/controller/passwordExpiry/getOrFindPasswordExpirySettingsController.test.js +13 -8
- package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.js +4 -4
- package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.test.js +8 -10
- package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.js +62 -0
- package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.test.js +71 -0
- package/src/all/background_page/controller/recover/generateRecoverAccountRecoveryRequestKeyController.js +1 -1
- package/src/all/background_page/controller/resource/resourceCreateController.js +11 -4
- package/src/all/background_page/controller/resource/resourceCreateController.test.js +12 -1
- package/src/all/background_page/controller/resource/resourceUpdateController.js +11 -4
- package/src/all/background_page/controller/resource/resourceUpdateController.test.js +35 -2
- package/src/all/background_page/controller/resourceType/getResourceTypesController.js +5 -4
- package/src/all/background_page/controller/resourceType/getResourceTypesController.test.js +5 -2
- package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.js +3 -2
- package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.test.js +16 -3
- package/src/all/background_page/controller/secret/findSecretByResourceIdController.js +3 -3
- package/src/all/background_page/controller/secret/findSecretByResourceIdController.test.js +24 -0
- package/src/all/background_page/controller/secretRevision/findResourceSecretRevisionsForDisplayController.js +2 -1
- package/src/all/background_page/controller/setup/generateSetupKeyPairController.js +6 -3
- package/src/all/background_page/controller/setup/generateSetupKeyPairController.test.js +11 -1
- package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.js +1 -1
- package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.test.js +14 -18
- package/src/all/background_page/controller/setup/setSetupLocaleController.js +1 -1
- package/src/all/background_page/controller/setup/setSetupLocaleController.test.js +6 -10
- package/src/all/background_page/controller/setup/signInSetupController.js +6 -2
- package/src/all/background_page/controller/setup/signInSetupController.test.js +10 -5
- package/src/all/background_page/controller/share/shareOneFolderController.test.js +8 -0
- package/src/all/background_page/controller/share/shareResourcesController.test.js +9 -1
- package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.js +59 -0
- package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.test.js +150 -0
- package/src/all/background_page/controller/{group/getOrFindGroupsUsersController.js → user/getOrFindAllUsersController.js} +12 -17
- package/src/all/background_page/controller/user/getOrFindAllUsersController.test.js +55 -0
- package/src/all/background_page/controller/user/getOrFindLoggedInUserController.js +3 -3
- package/src/all/background_page/controller/user/getOrFindLoggedInUserController.test.js +19 -15
- package/src/all/background_page/controller/user/updateUserLocalStorageController.test.js +8 -5
- package/src/all/background_page/event/accountRecoveryEvents.js +4 -4
- package/src/all/background_page/event/appEvents.js +7 -2
- package/src/all/background_page/event/authEvents.js +2 -2
- package/src/all/background_page/event/groupEvents.js +4 -17
- package/src/all/background_page/event/informCallToActionEvents.js +1 -1
- package/src/all/background_page/event/informMenuEvents.js +1 -1
- package/src/all/background_page/event/localeEvents.js +4 -3
- package/src/all/background_page/event/permissionEvents.js +13 -0
- package/src/all/background_page/event/recoverEvents.js +4 -4
- package/src/all/background_page/event/resourceEvents.js +6 -15
- package/src/all/background_page/event/resourceTypeEvents.js +4 -3
- package/src/all/background_page/event/setupEvents.js +4 -4
- package/src/all/background_page/event/siteSettingsEvents.js +29 -0
- package/src/all/background_page/event/userEvents.js +4 -8
- package/src/all/background_page/index.js +0 -37
- package/src/all/background_page/model/entity/account/abstractAccountEntity.js +2 -2
- package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.js +7 -17
- package/src/all/background_page/model/entity/account/accountEntity.js +7 -14
- package/src/all/background_page/model/entity/account/accountKitEntity.js +1 -2
- package/src/all/background_page/model/entity/account/accountRecoverEntity.js +4 -14
- package/src/all/background_page/model/entity/account/accountSetupEntity.js +4 -14
- package/src/all/background_page/model/entity/account/accountTemporaryEntity.js +2 -5
- package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.test.js +5 -5
- package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.js +49 -0
- package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.data.js +23 -0
- package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.js +51 -0
- package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.js → siteSettings/siteSettingsEntity.js} +17 -24
- package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.data.js → siteSettings/siteSettingsEntity.test.data.js} +9 -9
- package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.js → siteSettings/siteSettingsEntity.test.js} +30 -39
- package/src/all/background_page/model/entity/user/userEntity.test.js +6 -6
- package/src/all/background_page/model/export/resources/resourcesKdbxExporter.js +40 -3
- package/src/all/background_page/model/export/resources/resourcesKdbxExporter.test.js +122 -0
- package/src/all/background_page/model/import/resources/resourcesKdbxImportParser.js +1 -1
- package/src/all/background_page/model/locale/localeModel.js +13 -8
- package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.js +6 -6
- package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.test.js +3 -2
- package/src/all/background_page/model/resource/resourceModel.js +4 -4
- package/src/all/background_page/model/user/userModel.js +7 -28
- package/src/all/background_page/model/user/userModel.test.js +51 -99
- package/src/all/background_page/pagemod/appBootstrapPagemod.js +4 -1
- package/src/all/background_page/pagemod/appBootstrapPagemod.test.js +5 -2
- package/src/all/background_page/pagemod/appPagemod.js +32 -6
- package/src/all/background_page/pagemod/appPagemod.test.js +22 -10
- package/src/all/background_page/pagemod/authPagemod.js +2 -10
- package/src/all/background_page/pagemod/authPagemod.test.js +4 -4
- package/src/all/background_page/pagemod/pagemodManager.test.js +5 -2
- package/src/all/background_page/pagemod/quickAccessPagemod.js +2 -2
- package/src/all/background_page/pagemod/quickAccessPagemod.test.js +4 -4
- package/src/all/background_page/pagemod/recoverPagemod.js +2 -2
- package/src/all/background_page/pagemod/recoverPagemod.test.js +6 -0
- package/src/all/background_page/pagemod/setupPagemod.js +2 -2
- package/src/all/background_page/pagemod/setupPagemod.test.js +6 -0
- package/src/all/background_page/pagemod/webIntegrationPagemod.js +21 -2
- package/src/all/background_page/pagemod/webIntegrationPagemod.test.js +16 -25
- package/src/all/background_page/service/account/getActiveAccountService.js +2 -3
- package/src/all/background_page/service/account/getLegacyAccountService.js +3 -14
- package/src/all/background_page/service/account/updateSsoCredentialsService.js +9 -5
- package/src/all/background_page/service/api/group/groupApiService.js +9 -16
- package/src/all/background_page/service/api/group/groupApiService.test.js +59 -26
- package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.js +46 -0
- package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.test.js +63 -0
- package/src/all/background_page/service/auth/checkAuthStatusService.js +27 -14
- package/src/all/background_page/service/auth/checkAuthStatusService.test.js +80 -62
- package/src/all/background_page/service/auth/postLoginService.js +3 -3
- package/src/all/background_page/service/auth/postLoginService.test.js +4 -4
- package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.js +5 -1
- package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.test.js +14 -8
- package/src/all/background_page/service/authenticationStatusService.js +13 -18
- package/src/all/background_page/service/authenticationStatusService.test.js +9 -6
- package/src/all/background_page/service/crypto/generateGpgKeyPairService.test.js +5 -5
- package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.js +7 -6
- package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.test.js +10 -7
- package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.js +7 -2
- package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.test.js +5 -5
- package/src/all/background_page/service/group/findGroupsService.js +42 -1
- package/src/all/background_page/service/group/findGroupsService.test.js +82 -0
- package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.js +82 -0
- package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.test.js +102 -0
- package/src/all/background_page/service/group/groupUpdateService.js +49 -78
- package/src/all/background_page/service/group/groupUpdateService.test.js +136 -0
- package/src/all/background_page/service/localStorage/localStorageService.js +8 -6
- package/src/all/background_page/service/localStorage/localStorageService.test.js +33 -15
- package/src/all/background_page/service/local_storage/abstractLocalStorage.js +193 -0
- package/src/all/background_page/service/local_storage/abstractLocalStorage.test.data.js +45 -0
- package/src/all/background_page/service/local_storage/abstractLocalStorage.test.js +271 -0
- package/src/all/background_page/service/local_storage/activeSessionLocalStorage.js +105 -0
- package/src/all/background_page/service/local_storage/activeSessionLocalStorage.test.js +153 -0
- package/src/all/background_page/service/local_storage/rbacLocalStorage.js +10 -82
- package/src/all/background_page/service/local_storage/rbacLocalStorage.test.js +8 -8
- package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.js +10 -43
- package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.test.js +68 -0
- package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.js +104 -0
- package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.test.js +114 -0
- package/src/all/background_page/service/local_storage/userMeLocalStorage.js +50 -0
- package/src/all/background_page/service/{sessionStorage/userMeSessionStorageService.test.js → local_storage/userMeLocalStorage.test.js} +55 -36
- package/src/all/background_page/service/metadata/encryptMetadataService.js +3 -3
- package/src/all/background_page/service/metadata/encryptMetadataService.test.js +11 -11
- package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.js +4 -4
- package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.test.js +18 -16
- package/src/all/background_page/service/metadata/getOrFindMetadataSettingsService.test.js +6 -8
- package/src/all/background_page/service/metadata/rotateMetadata/rotateResourcesMetadataKeyService.test.js +4 -4
- package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.js +3 -3
- package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.test.js +1 -1
- package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.js +4 -4
- package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.test.js +9 -7
- package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.js +4 -4
- package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.test.js +6 -6
- package/src/all/background_page/service/rbac/findAndUpdateRbacsLocalStorageService.js +2 -2
- package/src/all/background_page/service/rbac/getOrFindRbacService.js +1 -1
- package/src/all/background_page/service/resource/create/resourceCreateService.js +41 -51
- package/src/all/background_page/service/resource/create/resourceCreateService.test.js +100 -98
- package/src/all/background_page/service/resource/export/exportResourcesService.js +7 -7
- package/src/all/background_page/service/resource/findAndUpdateResourcesLocalStorageService.js +4 -4
- package/src/all/background_page/service/resource/findResourcesService.js +13 -16
- package/src/all/background_page/service/resource/findResourcesService.test.js +12 -11
- package/src/all/background_page/service/resource/getOrFindResourcesService.js +3 -3
- package/src/all/background_page/service/resource/import/ImportResourcesService.js +9 -9
- package/src/all/background_page/service/resource/import/ImportResourcesService.test.js +30 -15
- package/src/all/background_page/service/resource/update/resourceUpdateService.js +38 -19
- package/src/all/background_page/service/resource/update/resourceUpdateService.test.js +64 -31
- package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.js +49 -0
- package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.test.js +61 -0
- package/src/all/background_page/service/resourceType/getSecretSchemaResourceTypeService.js +44 -0
- package/src/all/background_page/service/resourceType/updateResourceTypesService.js +6 -4
- package/src/all/background_page/service/resourceType/updateResourceTypesService.test.js +19 -14
- package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.js +5 -4
- package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.test.js +16 -9
- package/src/all/background_page/service/share/shareResourceService.js +4 -4
- package/src/all/background_page/service/share/shareResourceService.test.js +6 -6
- package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.js +77 -0
- package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.test.js +130 -0
- package/src/all/background_page/service/siteSettings/findSiteSettingsService.js +47 -0
- package/src/all/background_page/service/siteSettings/findSiteSettingsService.test.js +68 -0
- package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.js +84 -0
- package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.test.js +175 -0
- package/src/all/background_page/service/siteSettings/siteSettingsRuntimeCache.js +70 -0
- package/src/all/background_page/service/sso/generateSsoKitService.test.js +2 -2
- package/src/all/background_page/service/toolbar/toolbarService.js +6 -4
- package/src/all/background_page/service/toolbar/toolbarService.test.js +14 -13
- package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.js +4 -4
- package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.test.js +3 -3
- package/src/all/background_page/service/user/getOrFindMeService.js +64 -0
- package/src/all/background_page/service/user/getOrFindMeService.test.js +65 -0
- package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.js +5 -4
- package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.test.js +12 -11
- package/src/all/background_page/service/validator/appEmailValidatorService.js +11 -6
- package/src/all/background_page/service/validator/appEmailValidatorService.test.js +11 -11
- package/src/all/common/polyfill/browserPolyfill.js +8 -8
- package/src/all/locales/cs-CZ/common.json +1 -4
- package/src/all/locales/de-DE/common.json +1 -4
- package/src/all/locales/en-UK/common.json +0 -3
- package/src/all/locales/es-ES/common.json +1 -4
- package/src/all/locales/fr-FR/common.json +1 -4
- package/src/all/locales/it-IT/common.json +1 -4
- package/src/all/locales/ja-JP/common.json +1 -4
- package/src/all/locales/ko-KR/common.json +0 -3
- package/src/all/locales/lt-LT/common.json +1 -4
- package/src/all/locales/nl-NL/common.json +1 -4
- package/src/all/locales/pl-PL/common.json +1 -4
- package/src/all/locales/pt-BR/common.json +1 -4
- package/src/all/locales/ro-RO/common.json +1 -4
- package/src/all/locales/ru-RU/common.json +1 -4
- package/src/all/locales/sl-SI/common.json +1 -4
- package/src/all/locales/sv-SE/common.json +1 -4
- package/src/all/locales/uk-UA/common.json +1 -4
- package/src/all/webAccessibleResources/js/app/QuickAccess.js +7 -0
- package/src/chrome/manifest.json +1 -1
- package/src/chrome-mv3/manifest.json +1 -1
- package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.js +132 -0
- package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.test.js +125 -0
- package/src/chrome-mv3/offscreens/service/offscreen/handleOffscreenRequestService.js +4 -0
- package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.js +83 -0
- package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.test.js +116 -0
- package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.js +99 -0
- package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.data.js +45 -0
- package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.js +87 -0
- package/src/chrome-mv3/serviceWorker/service/network/requestFetchOffscreenService.js +0 -1
- package/src/chrome-mv3/serviceWorker/service/offscreen/handleOffscreenResponseService.js +15 -0
- package/src/firefox/manifest.json +1 -1
- package/src/safari/background_page/index.js +0 -37
- package/src/safari/common/polyfill/safariBrowserPolyfill.js +10 -10
- package/src/safari/manifest.json +1 -1
- package/test/jest.setup.js +4 -2
- package/src/all/background_page/controller/group/getOrFindGroupsUsersController.test.js +0 -69
- package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.js +0 -55
- package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.test.js +0 -45
- package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.js +0 -76
- package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.test.js +0 -102
- package/src/all/background_page/event/organizationSettingsEvents.js +0 -37
- package/src/all/background_page/model/organizationSettings/organizationSettingsModel.js +0 -93
- package/src/all/background_page/model/resourceType/resourceTypeModel.js +0 -72
- package/src/all/background_page/model/resourceType/resourceTypeModel.test.js +0 -101
- package/src/all/background_page/service/api/organizationSettings/organizationSettingsService.js +0 -58
- package/src/all/background_page/service/group/getOrFindGroupsService.js +0 -65
- package/src/all/background_page/service/group/getOrFindGroupsService.test.js +0 -168
- package/src/all/background_page/service/group/getOrFindGroupsUsersService.js +0 -51
- package/src/all/background_page/service/group/getOrFindGroupsUsersService.test.js +0 -94
- package/src/all/background_page/service/local_storage/authStatusLocalStorage.js +0 -70
- package/src/all/background_page/service/sessionStorage/userMeSessionStorageService.js +0 -94
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 5.13.0
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { v4 as uuidv4 } from "uuid";
|
|
16
|
-
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
17
|
-
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
18
|
-
import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
|
|
19
|
-
import GetOrFindGroupsService from "./getOrFindGroupsService";
|
|
20
|
-
import FindAndUpdateGroupsLocalStorageService from "./findAndUpdateGroupsLocalStorageService";
|
|
21
|
-
import FindGroupsService from "./findGroupsService";
|
|
22
|
-
import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
|
|
23
|
-
import GroupLocalStorage from "../local_storage/groupLocalStorage";
|
|
24
|
-
import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
|
|
25
|
-
|
|
26
|
-
describe("GetOrFindGroupsService", () => {
|
|
27
|
-
let service, account;
|
|
28
|
-
|
|
29
|
-
beforeEach(async () => {
|
|
30
|
-
jest.clearAllMocks();
|
|
31
|
-
account = new AccountEntity(defaultAccountDto());
|
|
32
|
-
service = new GetOrFindGroupsService(account, defaultApiClientOptions());
|
|
33
|
-
// flush account related storage before each.
|
|
34
|
-
await service.groupLocalStorage.flush();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe("::getOrFindAll", () => {
|
|
38
|
-
it("fetches from the API and initializes the local storage with an empty array when the API returns no groups.", async () => {
|
|
39
|
-
expect.assertions(4);
|
|
40
|
-
jest
|
|
41
|
-
.spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
|
|
42
|
-
.mockImplementation(() => new GroupsCollection([]));
|
|
43
|
-
jest.spyOn(FindAndUpdateGroupsLocalStorageService.prototype, "findAndUpdateAll");
|
|
44
|
-
|
|
45
|
-
const groups = await service.getOrFindAll();
|
|
46
|
-
|
|
47
|
-
expect(FindAndUpdateGroupsLocalStorageService.prototype.findAndUpdateAll).toHaveBeenCalledTimes(1);
|
|
48
|
-
expect(groups).toBeInstanceOf(GroupsCollection);
|
|
49
|
-
expect(groups).toHaveLength(0);
|
|
50
|
-
expect(await service.groupLocalStorage.get()).toEqual([]);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it("fetches the groups from the API and populates the local storage when the local storage is not initialized.", async () => {
|
|
54
|
-
expect.assertions(4);
|
|
55
|
-
const groupsDto = defaultGroupsDtos();
|
|
56
|
-
jest
|
|
57
|
-
.spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
|
|
58
|
-
.mockImplementation(() => new GroupsCollection(groupsDto));
|
|
59
|
-
|
|
60
|
-
const groups = await service.getOrFindAll();
|
|
61
|
-
|
|
62
|
-
expect(groups).toHaveLength(groupsDto.length);
|
|
63
|
-
expect(groups.toDto(GroupLocalStorage.DEFAULT_CONTAIN)).toEqual(groupsDto);
|
|
64
|
-
expect(GroupLocalStorage.hasCachedData(account.id)).toBeTruthy();
|
|
65
|
-
expect(await service.groupLocalStorage.get()).toEqual(groupsDto);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it("retrieves groups from the local storage when the local storage is initialized.", async () => {
|
|
69
|
-
expect.assertions(5);
|
|
70
|
-
const groupsDto = defaultGroupsDtos();
|
|
71
|
-
jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
|
|
72
|
-
await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
73
|
-
|
|
74
|
-
const groups = await service.getOrFindAll();
|
|
75
|
-
|
|
76
|
-
expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
|
|
77
|
-
expect(groups).toHaveLength(groupsDto.length);
|
|
78
|
-
expect(groups.toDto(GroupLocalStorage.DEFAULT_CONTAIN)).toEqual(groupsDto);
|
|
79
|
-
expect(GroupLocalStorage.hasCachedData(account.id)).toBeTruthy();
|
|
80
|
-
expect(await service.groupLocalStorage.get()).toEqual(groupsDto);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it("does not validate the groups collection if the information is retrieved from the runtime cache.", async () => {
|
|
84
|
-
expect.assertions(2);
|
|
85
|
-
jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
|
|
86
|
-
await service.groupLocalStorage.set(new GroupsCollection(defaultGroupsDtos()));
|
|
87
|
-
jest.spyOn(GroupsCollection.prototype, "validateSchema");
|
|
88
|
-
|
|
89
|
-
await service.getOrFindAll();
|
|
90
|
-
|
|
91
|
-
expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
|
|
92
|
-
// Validation must not be triggered by getOrFindAll when the data comes from the runtime cache.
|
|
93
|
-
expect(GroupsCollection.prototype.validateSchema).not.toHaveBeenCalled();
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it("validates groups collection if the local storage has no runtime cache and the information is retrieved from the local storage.", async () => {
|
|
97
|
-
expect.assertions(2);
|
|
98
|
-
jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
|
|
99
|
-
await service.groupLocalStorage.set(new GroupsCollection(defaultGroupsDtos()));
|
|
100
|
-
delete GroupLocalStorage._runtimeCachedData[account.id];
|
|
101
|
-
jest.spyOn(GroupsCollection.prototype, "validateSchema");
|
|
102
|
-
|
|
103
|
-
await service.getOrFindAll();
|
|
104
|
-
|
|
105
|
-
expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
|
|
106
|
-
// Validation must be triggered by getOrFindAll when the data is loaded from the disk cache.
|
|
107
|
-
expect(GroupsCollection.prototype.validateSchema).toHaveBeenCalled();
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
describe("::getOrFindByIds", () => {
|
|
112
|
-
it("returns only the groups whose ids are in the requested set.", async () => {
|
|
113
|
-
expect.assertions(2);
|
|
114
|
-
const groupsDto = defaultGroupsDtos();
|
|
115
|
-
await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
116
|
-
const requestedIds = [groupsDto[1].id, groupsDto[3].id, groupsDto[5].id];
|
|
117
|
-
|
|
118
|
-
const groups = await service.getOrFindByIds(requestedIds);
|
|
119
|
-
|
|
120
|
-
expect(groups).toHaveLength(3);
|
|
121
|
-
expect(groups.extract("id").sort()).toEqual([...requestedIds].sort());
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it("returns an empty collection when none of the ids match.", async () => {
|
|
125
|
-
expect.assertions(1);
|
|
126
|
-
const groupsDto = defaultGroupsDtos();
|
|
127
|
-
await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
128
|
-
|
|
129
|
-
const groups = await service.getOrFindByIds([uuidv4(), uuidv4()]);
|
|
130
|
-
|
|
131
|
-
expect(groups).toHaveLength(0);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it("returns all groups when every group id is requested.", async () => {
|
|
135
|
-
expect.assertions(2);
|
|
136
|
-
const groupsDto = defaultGroupsDtos();
|
|
137
|
-
await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
138
|
-
const allIds = groupsDto.map((group) => group.id);
|
|
139
|
-
|
|
140
|
-
const groups = await service.getOrFindByIds(allIds);
|
|
141
|
-
|
|
142
|
-
expect(groups).toHaveLength(groupsDto.length);
|
|
143
|
-
expect(groups.extract("id").sort()).toEqual([...allIds].sort());
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it("fetches from the API when the local storage is not initialized, then filters.", async () => {
|
|
147
|
-
expect.assertions(3);
|
|
148
|
-
const groupsDto = defaultGroupsDtos();
|
|
149
|
-
jest
|
|
150
|
-
.spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
|
|
151
|
-
.mockImplementation(() => new GroupsCollection(groupsDto));
|
|
152
|
-
const requestedIds = [groupsDto[0].id, groupsDto[2].id];
|
|
153
|
-
|
|
154
|
-
const groups = await service.getOrFindByIds(requestedIds);
|
|
155
|
-
|
|
156
|
-
expect(FindGroupsService.prototype.findAllForLocalStorage).toHaveBeenCalledTimes(1);
|
|
157
|
-
expect(groups).toHaveLength(2);
|
|
158
|
-
expect(groups.extract("id").sort()).toEqual([...requestedIds].sort());
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it("should assert its parameter.", async () => {
|
|
162
|
-
expect.assertions(1);
|
|
163
|
-
await expect(() => service.getOrFindByIds(["not-a-uuid"])).rejects.toThrow(
|
|
164
|
-
"The given parameter is not a valid array of uuid",
|
|
165
|
-
);
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 5.13.0
|
|
13
|
-
*/
|
|
14
|
-
import GroupsUsersCollection from "passbolt-styleguide/src/shared/models/entity/groupUser/groupsUsersCollection";
|
|
15
|
-
import GetOrFindGroupsService from "./getOrFindGroupsService";
|
|
16
|
-
import { assertUuid } from "../../utils/assertions";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* The service aims to retrieve the group members of a given group from the local storage cache
|
|
20
|
-
* served by `GetOrFindGroupsService`, falling back to the API on a cold cache.
|
|
21
|
-
*/
|
|
22
|
-
class GetOrFindGroupsUsersService {
|
|
23
|
-
/**
|
|
24
|
-
* Constructor.
|
|
25
|
-
* @param {AccountEntity} account The user account.
|
|
26
|
-
* @param {ApiClientOptions} apiClientOptions The api client options.
|
|
27
|
-
*/
|
|
28
|
-
constructor(account, apiClientOptions) {
|
|
29
|
-
this.getOrFindGroupsService = new GetOrFindGroupsService(account, apiClientOptions);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Get or find the members of the group matching the given id.
|
|
34
|
-
* @param {string} groupId The id of the group whose members are requested.
|
|
35
|
-
* @returns {Promise<GroupsUsersCollection>}
|
|
36
|
-
* @throws {Error} If no group is found for the given id.
|
|
37
|
-
*/
|
|
38
|
-
async getOrFindByGroupId(groupId) {
|
|
39
|
-
assertUuid(groupId);
|
|
40
|
-
|
|
41
|
-
const groupsCollection = await this.getOrFindGroupsService.getOrFindAll();
|
|
42
|
-
const group = groupsCollection.getFirst("id", groupId);
|
|
43
|
-
if (!group) {
|
|
44
|
-
throw new Error(`The group with id ${groupId} could not be found.`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return group.groupsUsers ?? new GroupsUsersCollection([]);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export default GetOrFindGroupsUsersService;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 5.13.0
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { v4 as uuidv4 } from "uuid";
|
|
16
|
-
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
17
|
-
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
18
|
-
import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
|
|
19
|
-
import GetOrFindGroupsUsersService from "./getOrFindGroupsUsersService";
|
|
20
|
-
import FindGroupsService from "./findGroupsService";
|
|
21
|
-
import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
|
|
22
|
-
import GroupsUsersCollection from "passbolt-styleguide/src/shared/models/entity/groupUser/groupsUsersCollection";
|
|
23
|
-
import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
|
|
24
|
-
|
|
25
|
-
describe("GetOrFindGroupsUsersService", () => {
|
|
26
|
-
let service, account;
|
|
27
|
-
|
|
28
|
-
beforeEach(async () => {
|
|
29
|
-
jest.clearAllMocks();
|
|
30
|
-
account = new AccountEntity(defaultAccountDto());
|
|
31
|
-
service = new GetOrFindGroupsUsersService(account, defaultApiClientOptions());
|
|
32
|
-
// flush account related storage before each.
|
|
33
|
-
await service.getOrFindGroupsService.groupLocalStorage.flush();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe("::getOrFindByGroupId", () => {
|
|
37
|
-
it("returns the members of the requested group when the local storage is populated.", async () => {
|
|
38
|
-
expect.assertions(3);
|
|
39
|
-
const groupsDto = defaultGroupsDtos(5, { withGroupsUsers: 3 });
|
|
40
|
-
await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
41
|
-
const targetGroup = groupsDto[2];
|
|
42
|
-
|
|
43
|
-
const result = await service.getOrFindByGroupId(targetGroup.id);
|
|
44
|
-
|
|
45
|
-
expect(result).toBeInstanceOf(GroupsUsersCollection);
|
|
46
|
-
expect(result).toHaveLength(3);
|
|
47
|
-
expect(result.items.every((groupUser) => groupUser.groupId === targetGroup.id)).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it("returns an empty GroupsUsersCollection when the group has no members.", async () => {
|
|
51
|
-
expect.assertions(2);
|
|
52
|
-
const groupsDto = defaultGroupsDtos(1, { withGroupsUsers: 0 });
|
|
53
|
-
await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
54
|
-
|
|
55
|
-
const result = await service.getOrFindByGroupId(groupsDto[0].id);
|
|
56
|
-
|
|
57
|
-
expect(result).toBeInstanceOf(GroupsUsersCollection);
|
|
58
|
-
expect(result).toHaveLength(0);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it("fetches from the API when the local storage is not initialized, then returns the requested group's members.", async () => {
|
|
62
|
-
expect.assertions(3);
|
|
63
|
-
const groupsDto = defaultGroupsDtos(3, { withGroupsUsers: 2 });
|
|
64
|
-
jest
|
|
65
|
-
.spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
|
|
66
|
-
.mockImplementation(() => new GroupsCollection(groupsDto));
|
|
67
|
-
const targetGroup = groupsDto[1];
|
|
68
|
-
|
|
69
|
-
const result = await service.getOrFindByGroupId(targetGroup.id);
|
|
70
|
-
|
|
71
|
-
expect(FindGroupsService.prototype.findAllForLocalStorage).toHaveBeenCalledTimes(1);
|
|
72
|
-
expect(result).toBeInstanceOf(GroupsUsersCollection);
|
|
73
|
-
expect(result).toHaveLength(2);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it("throws when the group id does not exist.", async () => {
|
|
77
|
-
expect.assertions(1);
|
|
78
|
-
const groupsDto = defaultGroupsDtos();
|
|
79
|
-
await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
|
|
80
|
-
const missingId = uuidv4();
|
|
81
|
-
|
|
82
|
-
await expect(() => service.getOrFindByGroupId(missingId)).rejects.toThrow(
|
|
83
|
-
`The group with id ${missingId} could not be found.`,
|
|
84
|
-
);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("should assert its parameter.", async () => {
|
|
88
|
-
expect.assertions(1);
|
|
89
|
-
await expect(() => service.getOrFindByGroupId("not-a-uuid")).rejects.toThrow(
|
|
90
|
-
"The given parameter is not a valid UUID",
|
|
91
|
-
);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SARL (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 2.13.4
|
|
13
|
-
*/
|
|
14
|
-
import Log from "../../model/log";
|
|
15
|
-
|
|
16
|
-
const AUTH_STATUS_STORAGE_KEY = "auth_status";
|
|
17
|
-
|
|
18
|
-
class AuthStatusLocalStorage {
|
|
19
|
-
/**
|
|
20
|
-
* Get the storage key.
|
|
21
|
-
*/
|
|
22
|
-
static get storageKey() {
|
|
23
|
-
return AUTH_STATUS_STORAGE_KEY;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Flush the folders local storage
|
|
28
|
-
*
|
|
29
|
-
* @throws {Error} if operation failed
|
|
30
|
-
* @return {Promise<void>}
|
|
31
|
-
*/
|
|
32
|
-
static async flush() {
|
|
33
|
-
Log.write({ level: "debug", message: "AuthStatusLocalStorage flushed" });
|
|
34
|
-
return await browser.storage.local.remove(this.storageKey);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Set the folders local storage.
|
|
39
|
-
*
|
|
40
|
-
* @throws {Error} if operation failed
|
|
41
|
-
* @return {Promise} results object, containing every object in keys that was found in the storage area.
|
|
42
|
-
* If storage is not set, undefined will be returned.
|
|
43
|
-
*/
|
|
44
|
-
static async get() {
|
|
45
|
-
const result = await browser.storage.local.get([this.storageKey]);
|
|
46
|
-
if (result) {
|
|
47
|
-
return result[this.storageKey];
|
|
48
|
-
}
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Set the folders local storage.
|
|
54
|
-
*
|
|
55
|
-
* @param {boolean} isAuthenticated
|
|
56
|
-
* @param {boolean} isMfaRequired
|
|
57
|
-
* @return {Promise<void>}
|
|
58
|
-
*/
|
|
59
|
-
static async set(isAuthenticated, isMfaRequired) {
|
|
60
|
-
await navigator.locks.request(this.storageKey, async () => {
|
|
61
|
-
const auth_status = {
|
|
62
|
-
isAuthenticated: Boolean(isAuthenticated),
|
|
63
|
-
isMfaRequired: Boolean(isMfaRequired),
|
|
64
|
-
};
|
|
65
|
-
await browser.storage.local.set({ [this.storageKey]: auth_status });
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export default AuthStatusLocalStorage;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 4.1.0
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import UserEntity from "../../model/entity/user/userEntity";
|
|
16
|
-
|
|
17
|
-
const USER_ME_STORAGE_KEY_PREFIX = "user-me";
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A cache service used to store the result of the requests made on the users me entry point.
|
|
21
|
-
*/
|
|
22
|
-
class UserMeSessionStorageService {
|
|
23
|
-
/**
|
|
24
|
-
* Get the storage key.
|
|
25
|
-
* @param {AbstractAccountEntity} account The account to get the key for.
|
|
26
|
-
* @returns {string}
|
|
27
|
-
* @throws {Error} If it cannot retrieve account id.
|
|
28
|
-
*/
|
|
29
|
-
static getStorageKey(account) {
|
|
30
|
-
if (!account.id) {
|
|
31
|
-
throw new Error("Cannot retrieve account id, necessary to get a users me storage key.");
|
|
32
|
-
}
|
|
33
|
-
return `${USER_ME_STORAGE_KEY_PREFIX}-${account.id}`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Get a user me cached data for a given account.
|
|
38
|
-
* @param {AbstractAccountEntity} account The account to get the cached data for.
|
|
39
|
-
* @returns {Promise<UserEntity|null>} Return the user me cached entity or null if the cache was not initialized.
|
|
40
|
-
* Note that in case the cache would be invalid, it would return null as well.
|
|
41
|
-
* @throws {Error} If it cannot get the storage key.
|
|
42
|
-
*/
|
|
43
|
-
static async get(account) {
|
|
44
|
-
const storageKey = this.getStorageKey(account);
|
|
45
|
-
let storageData;
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
storageData = await browser.storage.session.get(storageKey);
|
|
49
|
-
} catch (error) {
|
|
50
|
-
throw new Error("Unable to access the user me session storage", { cause: error });
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const userMeDto = storageData?.[storageKey];
|
|
54
|
-
|
|
55
|
-
if (userMeDto) {
|
|
56
|
-
try {
|
|
57
|
-
return new UserEntity(userMeDto);
|
|
58
|
-
} catch (error) {
|
|
59
|
-
console.debug("Unable to instantiate the user entity based on the cached user dto.", error);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Cache a user me data for a given account.
|
|
68
|
-
* @param {AbstractAccountEntity} account The account to get the cached data for.
|
|
69
|
-
* @param {UserEntity} user The user me to cache
|
|
70
|
-
* @returns {Promise<void>}
|
|
71
|
-
*/
|
|
72
|
-
static async set(account, user) {
|
|
73
|
-
const storageKey = this.getStorageKey(account);
|
|
74
|
-
|
|
75
|
-
await navigator.locks.request(storageKey, async () => {
|
|
76
|
-
await browser.storage.session.set({ [storageKey]: user.toDto(UserEntity.ALL_CONTAIN_OPTIONS) });
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Remove the cached data for a given account.
|
|
82
|
-
* @param {AbstractAccountEntity} account The account to get the cached data for.
|
|
83
|
-
* @returns {Promise<void>}
|
|
84
|
-
*/
|
|
85
|
-
static async remove(account) {
|
|
86
|
-
const storageKey = this.getStorageKey(account);
|
|
87
|
-
|
|
88
|
-
await navigator.locks.request(storageKey, async () => {
|
|
89
|
-
await browser.storage.session.remove(storageKey);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export default UserMeSessionStorageService;
|