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
|
@@ -11,59 +11,26 @@
|
|
|
11
11
|
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
12
|
* @since 3.0.0
|
|
13
13
|
*/
|
|
14
|
-
import Log from "../../model/log";
|
|
15
14
|
import ResourceTypesCollection from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection";
|
|
16
|
-
import
|
|
15
|
+
import AbstractLocalStorage from "./abstractLocalStorage";
|
|
17
16
|
|
|
18
|
-
const RESOURCE_TYPES_LOCAL_STORAGE_KEY = "
|
|
17
|
+
export const RESOURCE_TYPES_LOCAL_STORAGE_KEY = "resource_types";
|
|
19
18
|
|
|
20
|
-
class ResourceTypeLocalStorage {
|
|
19
|
+
class ResourceTypeLocalStorage extends AbstractLocalStorage {
|
|
21
20
|
/**
|
|
22
|
-
* Get the
|
|
23
|
-
* @
|
|
21
|
+
* Get the key property
|
|
22
|
+
* @return {string}
|
|
24
23
|
*/
|
|
25
|
-
|
|
24
|
+
get key() {
|
|
26
25
|
return RESOURCE_TYPES_LOCAL_STORAGE_KEY;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @throws {Error} if operation failed
|
|
33
|
-
* @return {Promise<void>}
|
|
29
|
+
* Get the entityClass
|
|
30
|
+
* @return {ResourceTypesCollection}
|
|
34
31
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return await browser.storage.local.remove(this.storageKey);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Set the resourceTypes local storage.
|
|
42
|
-
*
|
|
43
|
-
* @throws {Error} if operation failed
|
|
44
|
-
* @return {Promise<ResourceTypesCollectionDto>} results object, containing every object in keys that was found in the storage area.
|
|
45
|
-
* If storage is not set, undefined will be returned.
|
|
46
|
-
*/
|
|
47
|
-
static async get() {
|
|
48
|
-
const { resourceTypes } = await browser.storage.local.get([this.storageKey]);
|
|
49
|
-
return resourceTypes;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Set the resourceTypes in local storage.
|
|
54
|
-
* @param {ResourceTypesCollection} resourceTypesCollection The folders to insert in the local storage.
|
|
55
|
-
* @return {Promise<void>}
|
|
56
|
-
* @throws {TypeError} if the given argument is not a ResourceTypesCollection
|
|
57
|
-
*/
|
|
58
|
-
static async set(resourceTypesCollection) {
|
|
59
|
-
assertType(
|
|
60
|
-
resourceTypesCollection,
|
|
61
|
-
ResourceTypesCollection,
|
|
62
|
-
"ResourceTypeLocalStorage::set expects a ResourceTypesCollection",
|
|
63
|
-
);
|
|
64
|
-
await navigator.locks.request(this.storageKey, async () => {
|
|
65
|
-
await browser.storage.local.set({ [this.storageKey]: resourceTypesCollection.toDto() });
|
|
66
|
-
});
|
|
32
|
+
get entityClass() {
|
|
33
|
+
return ResourceTypesCollection;
|
|
67
34
|
}
|
|
68
35
|
}
|
|
69
36
|
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 2023 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) 2023 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
|
+
import ResourceTypeLocalStorage from "./resourceTypeLocalStorage";
|
|
15
|
+
import { resourceTypeV5DefaultDto } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypeEntity.test.data";
|
|
16
|
+
import ResourceTypeEntity from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypeEntity";
|
|
17
|
+
import ResourceTypesCollection from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection";
|
|
18
|
+
import GetLegacyAccountService from "../account/getLegacyAccountService";
|
|
19
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
20
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
21
|
+
|
|
22
|
+
describe("ResourceTypeLocalStorage", () => {
|
|
23
|
+
// mock data
|
|
24
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
25
|
+
// spy on
|
|
26
|
+
jest.spyOn(GetLegacyAccountService, "get").mockImplementation(() => account);
|
|
27
|
+
|
|
28
|
+
describe("ResourceTypeLocalStorage::get", () => {
|
|
29
|
+
it("Should return undefined if nothing stored in the storage", async () => {
|
|
30
|
+
expect.assertions(1);
|
|
31
|
+
const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
|
|
32
|
+
const result = await resourceTypeLocalstorage.getData();
|
|
33
|
+
expect(result).toEqual(undefined);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("Should return content stored in the local storage", async () => {
|
|
37
|
+
const resourceTypes = [resourceTypeV5DefaultDto()];
|
|
38
|
+
expect.assertions(1);
|
|
39
|
+
const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
|
|
40
|
+
browser.storage.local.set({ [resourceTypeLocalstorage.storageDataKey]: resourceTypes });
|
|
41
|
+
const result = await resourceTypeLocalstorage.getData();
|
|
42
|
+
expect(result).toEqual(resourceTypes);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe("ResourceTypeLocalStorage::setData", () => {
|
|
47
|
+
it("Should setData a resourceType colection in the local storage", async () => {
|
|
48
|
+
expect.assertions(2);
|
|
49
|
+
const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
|
|
50
|
+
const resourceType = new ResourceTypeEntity(resourceTypeV5DefaultDto());
|
|
51
|
+
const resourceTypesCollection = new ResourceTypesCollection([resourceType]);
|
|
52
|
+
await resourceTypeLocalstorage.setData(resourceTypesCollection);
|
|
53
|
+
const resourceTypes = await resourceTypeLocalstorage.getData();
|
|
54
|
+
expect(resourceTypes).toHaveLength(1);
|
|
55
|
+
expect(resourceTypes[0]).toEqual(resourceType.toDto(ResourceTypeEntity.ALL_CONTAIN_OPTIONS));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe("ResourceTypeLocalStorage::flush", () => {
|
|
60
|
+
it("Should flush all the resourceType from the local storage", async () => {
|
|
61
|
+
expect.assertions(1);
|
|
62
|
+
const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
|
|
63
|
+
await resourceTypeLocalstorage.flush();
|
|
64
|
+
const resourceTypes = await resourceTypeLocalstorage.getData();
|
|
65
|
+
expect(resourceTypes).toEqual(undefined);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
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 6.0.0
|
|
13
|
+
*/
|
|
14
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
15
|
+
import AbstractAccountEntity from "../../model/entity/account/abstractAccountEntity";
|
|
16
|
+
|
|
17
|
+
export const SITE_SETTINGS = "site-settings";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Per-account local storage for site settings, backed by `browser.storage.local`
|
|
21
|
+
* under the key `site-settings-{accountId}`, with an in-memory runtime cache.
|
|
22
|
+
*/
|
|
23
|
+
class SiteSettingsLocalStorage {
|
|
24
|
+
/**
|
|
25
|
+
* Runtime cached data.
|
|
26
|
+
* @key {string} account id
|
|
27
|
+
* @value {object} site settings dto
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
static _runtimeCachedData = {};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @param {AccountEntity} account The user account.
|
|
34
|
+
*/
|
|
35
|
+
constructor(account) {
|
|
36
|
+
if (!account || !(account instanceof AbstractAccountEntity)) {
|
|
37
|
+
throw new TypeError("Parameter `account` should be of type AbstractAccountEntity.");
|
|
38
|
+
}
|
|
39
|
+
this.account = account;
|
|
40
|
+
this.storageKey = this.getStorageKey(account);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Build the storage key for the given account.
|
|
45
|
+
* @param {AccountEntity} account
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
getStorageKey(account) {
|
|
49
|
+
return `${SITE_SETTINGS}-${account.id}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Flush site settings from the local storage and runtime cache.
|
|
54
|
+
* @returns {Promise<void>}
|
|
55
|
+
*/
|
|
56
|
+
async flush() {
|
|
57
|
+
await browser.storage.local.remove(this.storageKey);
|
|
58
|
+
delete SiteSettingsLocalStorage._runtimeCachedData[this.account.id];
|
|
59
|
+
console.debug(`Site settings flushed for (${this.account.id})`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Get the site settings dto from local storage (or in-memory cache).
|
|
64
|
+
* @returns {Promise<object|undefined>}
|
|
65
|
+
*/
|
|
66
|
+
async get() {
|
|
67
|
+
if (!SiteSettingsLocalStorage._runtimeCachedData[this.account.id]) {
|
|
68
|
+
const data = await browser.storage.local.get([this.storageKey]);
|
|
69
|
+
if (!data[this.storageKey]) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
SiteSettingsLocalStorage._runtimeCachedData[this.account.id] = data[this.storageKey];
|
|
73
|
+
}
|
|
74
|
+
return SiteSettingsLocalStorage._runtimeCachedData[this.account.id];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Set the site settings in local storage.
|
|
79
|
+
* @param {SiteSettingsEntity} settings
|
|
80
|
+
* @returns {Promise<void>}
|
|
81
|
+
* @throws {TypeError} If parameter settings is not of type SiteSettingsEntity.
|
|
82
|
+
*/
|
|
83
|
+
async set(settings) {
|
|
84
|
+
if (!settings || !(settings instanceof SiteSettingsEntity)) {
|
|
85
|
+
throw new TypeError("Parameter `settings` should be of type SiteSettingsEntity.");
|
|
86
|
+
}
|
|
87
|
+
await navigator.locks.request(this.storageKey, async () => {
|
|
88
|
+
const settingsDto = settings.toDto();
|
|
89
|
+
await this._setBrowserStorage({ [this.storageKey]: settingsDto });
|
|
90
|
+
SiteSettingsLocalStorage._runtimeCachedData[this.account.id] = settingsDto;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @param {object} data
|
|
96
|
+
* @returns {Promise<void>}
|
|
97
|
+
* @private
|
|
98
|
+
*/
|
|
99
|
+
async _setBrowserStorage(data) {
|
|
100
|
+
await browser.storage.local.set(data);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export default SiteSettingsLocalStorage;
|
|
@@ -0,0 +1,114 @@
|
|
|
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 6.0.0
|
|
13
|
+
*/
|
|
14
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
15
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
16
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
17
|
+
import { defaultProSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
18
|
+
import SiteSettingsLocalStorage, { SITE_SETTINGS } from "./siteSettingsLocalStorage";
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
jest.clearAllMocks();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe("SiteSettingsLocalStorage", () => {
|
|
25
|
+
let account, storage;
|
|
26
|
+
|
|
27
|
+
beforeEach(async () => {
|
|
28
|
+
account = new AccountEntity(defaultAccountDto());
|
|
29
|
+
storage = new SiteSettingsLocalStorage(account);
|
|
30
|
+
await storage.flush();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("::constructor", () => {
|
|
34
|
+
it("derives a per-account storage key", () => {
|
|
35
|
+
expect.assertions(1);
|
|
36
|
+
expect(storage.storageKey).toBe(`${SITE_SETTINGS}-${account.id}`);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("throws when account is missing", () => {
|
|
40
|
+
expect.assertions(1);
|
|
41
|
+
expect(() => new SiteSettingsLocalStorage(null)).toThrow(TypeError);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("throws when account is not an AccountEntity", () => {
|
|
45
|
+
expect.assertions(1);
|
|
46
|
+
expect(() => new SiteSettingsLocalStorage({ id: "abc" })).toThrow(TypeError);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("::get", () => {
|
|
51
|
+
it("returns undefined when nothing is stored", async () => {
|
|
52
|
+
expect.assertions(1);
|
|
53
|
+
const result = await storage.get();
|
|
54
|
+
expect(result).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("returns content stored in the local storage", async () => {
|
|
58
|
+
expect.assertions(1);
|
|
59
|
+
const dto = defaultProSiteSettings();
|
|
60
|
+
await browser.storage.local.set({ [storage.storageKey]: dto });
|
|
61
|
+
const result = await storage.get();
|
|
62
|
+
expect(result).toEqual(dto);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("populates the runtime cache on the first read", async () => {
|
|
66
|
+
expect.assertions(2);
|
|
67
|
+
const dto = defaultProSiteSettings();
|
|
68
|
+
await browser.storage.local.set({ [storage.storageKey]: dto });
|
|
69
|
+
expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toBeUndefined();
|
|
70
|
+
await storage.get();
|
|
71
|
+
expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toEqual(dto);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("subsequent reads come from the runtime cache and skip browser.storage", async () => {
|
|
75
|
+
expect.assertions(2);
|
|
76
|
+
const dto = defaultProSiteSettings();
|
|
77
|
+
await browser.storage.local.set({ [storage.storageKey]: dto });
|
|
78
|
+
await storage.get();
|
|
79
|
+
const spy = jest.spyOn(browser.storage.local, "get");
|
|
80
|
+
const result = await storage.get();
|
|
81
|
+
expect(spy).not.toHaveBeenCalled();
|
|
82
|
+
expect(result).toEqual(dto);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe("::set", () => {
|
|
87
|
+
it("writes the entity dto to local storage and runtime cache", async () => {
|
|
88
|
+
expect.assertions(3);
|
|
89
|
+
const entity = new SiteSettingsEntity(defaultProSiteSettings());
|
|
90
|
+
await storage.set(entity);
|
|
91
|
+
expect(browser.storage.local.store[storage.storageKey]).toEqual(entity.toDto());
|
|
92
|
+
expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toEqual(entity.toDto());
|
|
93
|
+
const result = await storage.get();
|
|
94
|
+
expect(result).toEqual(entity.toDto());
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("throws when settings is not a SiteSettingsEntity", async () => {
|
|
98
|
+
expect.assertions(2);
|
|
99
|
+
await expect(storage.set(null)).rejects.toThrow(TypeError);
|
|
100
|
+
await expect(storage.set({ status: "enabled" })).rejects.toThrow(TypeError);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe("::flush", () => {
|
|
105
|
+
it("clears both browser.storage and the runtime cache", async () => {
|
|
106
|
+
expect.assertions(2);
|
|
107
|
+
const entity = new SiteSettingsEntity(defaultProSiteSettings());
|
|
108
|
+
await storage.set(entity);
|
|
109
|
+
await storage.flush();
|
|
110
|
+
expect(browser.storage.local.store[storage.storageKey]).toBeUndefined();
|
|
111
|
+
expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toBeUndefined();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import AbstractLocalStorage from "./abstractLocalStorage";
|
|
17
|
+
|
|
18
|
+
export const USER_ME_STORAGE_KEY_PREFIX = "user-me";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A cache service used to store the result of the requests made on the users me entry point.
|
|
22
|
+
*/
|
|
23
|
+
class UserMeLocalStorage extends AbstractLocalStorage {
|
|
24
|
+
/**
|
|
25
|
+
* Get the key property
|
|
26
|
+
* @return {string}
|
|
27
|
+
*/
|
|
28
|
+
get key() {
|
|
29
|
+
return USER_ME_STORAGE_KEY_PREFIX;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Get the en
|
|
34
|
+
* @return {BextUserEntity}
|
|
35
|
+
*/
|
|
36
|
+
get entityClass() {
|
|
37
|
+
return UserEntity;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get the contain options
|
|
42
|
+
* @return {{profile: function(): {avatar: boolean}, role: boolean, gpgkey: boolean, groups_users: boolean, account_recovery_user_setting: boolean, pending_account_recovery_request: boolean}}
|
|
43
|
+
* @constructor
|
|
44
|
+
*/
|
|
45
|
+
static get DEFAULT_CONTAIN() {
|
|
46
|
+
return UserEntity.ALL_CONTAIN_OPTIONS;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default UserMeLocalStorage;
|
|
@@ -12,38 +12,42 @@
|
|
|
12
12
|
* @since 4.1.0
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import
|
|
15
|
+
import UserMeLocalStorage from "./userMeLocalStorage";
|
|
16
16
|
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
17
17
|
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
18
18
|
import { defaultUserDto } from "passbolt-styleguide/src/shared/models/entity/user/userEntity.test.data";
|
|
19
19
|
import UserEntity from "../../model/entity/user/userEntity";
|
|
20
20
|
import ProfileEntity from "passbolt-styleguide/src/shared/models/entity/profile/profileEntity";
|
|
21
21
|
import { v4 as uuidv4 } from "uuid";
|
|
22
|
+
import browser from "../../../common/polyfill/browserPolyfill";
|
|
22
23
|
|
|
23
|
-
describe("
|
|
24
|
+
describe("UserMeLocalStorage", () => {
|
|
24
25
|
beforeEach(async () => {
|
|
25
|
-
await browser.storage.
|
|
26
|
+
await browser.storage.local.clear();
|
|
26
27
|
});
|
|
27
28
|
|
|
28
|
-
describe("
|
|
29
|
+
describe("UserMeLocalStorage::get", () => {
|
|
29
30
|
it("should return null if there is no data in the storage", async () => {
|
|
30
31
|
expect.assertions(1);
|
|
31
32
|
const account = new AccountEntity(defaultAccountDto());
|
|
32
|
-
const
|
|
33
|
-
|
|
33
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
34
|
+
const cachedUser = await userMeLocalStorage.getData();
|
|
35
|
+
expect(cachedUser).toBeUndefined();
|
|
34
36
|
});
|
|
35
37
|
|
|
36
38
|
it("should return the user in cache associated to the passed account if one in cache", async () => {
|
|
37
39
|
expect.assertions(4);
|
|
38
40
|
const account = new AccountEntity(defaultAccountDto());
|
|
39
41
|
const user = new UserEntity(defaultUserDto());
|
|
40
|
-
|
|
42
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
43
|
+
await userMeLocalStorage.setData(user);
|
|
41
44
|
|
|
42
|
-
const cachedUser = await
|
|
45
|
+
const cachedUser = new UserEntity(await userMeLocalStorage.getData());
|
|
43
46
|
expect(cachedUser).not.toBeNull();
|
|
44
47
|
expect(cachedUser).toBeInstanceOf(UserEntity);
|
|
45
48
|
expect(cachedUser.id).toEqual(user.id);
|
|
46
49
|
expect(cachedUser.profile).toBeInstanceOf(ProfileEntity);
|
|
50
|
+
await userMeLocalStorage.flush();
|
|
47
51
|
});
|
|
48
52
|
|
|
49
53
|
it("should return null if trying to access the cache of another account", async () => {
|
|
@@ -55,64 +59,74 @@ describe("UserMeSessionStorageService", () => {
|
|
|
55
59
|
user_id: uuidv4(),
|
|
56
60
|
}),
|
|
57
61
|
);
|
|
62
|
+
|
|
63
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
64
|
+
const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
|
|
58
65
|
const user = new UserEntity(defaultUserDto());
|
|
59
|
-
await
|
|
66
|
+
await userMeLocalStorage.setData(user);
|
|
60
67
|
|
|
61
|
-
const cachedUserOtherAccount = await
|
|
62
|
-
expect(cachedUserOtherAccount).
|
|
68
|
+
const cachedUserOtherAccount = await userMeLocalStorageOtherAccount.getData();
|
|
69
|
+
expect(cachedUserOtherAccount).toBeUndefined();
|
|
63
70
|
});
|
|
64
71
|
|
|
65
72
|
it("should return the cached user for the given account even if there are other cached users for other accounts", async () => {
|
|
66
73
|
expect.assertions(2);
|
|
67
74
|
const otherAccount = new AccountEntity(defaultAccountDto());
|
|
68
75
|
const userOtherAccount = new UserEntity(defaultUserDto());
|
|
69
|
-
|
|
76
|
+
const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
|
|
77
|
+
await userMeLocalStorageOtherAccount.setData(userOtherAccount);
|
|
70
78
|
|
|
71
79
|
const account = new AccountEntity(defaultAccountDto());
|
|
72
80
|
const user = new UserEntity(defaultUserDto());
|
|
73
|
-
|
|
81
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
82
|
+
await userMeLocalStorage.setData(user);
|
|
74
83
|
|
|
75
|
-
const cachedUser = await
|
|
84
|
+
const cachedUser = await userMeLocalStorage.getData();
|
|
76
85
|
expect(cachedUser).not.toBeNull();
|
|
77
86
|
expect(cachedUser.id).toEqual(user.id);
|
|
78
87
|
});
|
|
79
88
|
});
|
|
80
89
|
|
|
81
|
-
describe("
|
|
90
|
+
describe("UserMeLocalStorage::set", () => {
|
|
82
91
|
it("should override an existing cached user if one already present", async () => {
|
|
83
92
|
expect.assertions(3);
|
|
84
93
|
|
|
85
94
|
const account = new AccountEntity(defaultAccountDto());
|
|
86
95
|
const user = new UserEntity(defaultUserDto());
|
|
87
|
-
|
|
88
|
-
await
|
|
96
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
97
|
+
await userMeLocalStorage.setData(user);
|
|
98
|
+
await userMeLocalStorage.setData(user);
|
|
89
99
|
|
|
90
|
-
|
|
91
|
-
|
|
100
|
+
// One for data and another one for metadata
|
|
101
|
+
expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
|
|
102
|
+
const cachedUser = await userMeLocalStorage.getData();
|
|
92
103
|
expect(cachedUser).not.toBeNull();
|
|
93
104
|
expect(cachedUser.id).toEqual(user.id);
|
|
94
105
|
});
|
|
95
106
|
});
|
|
96
107
|
|
|
97
|
-
describe("
|
|
98
|
-
it("should not crash if nothing to
|
|
108
|
+
describe("UserMeLocalStorage::flush", () => {
|
|
109
|
+
it("should not crash if nothing to flush", async () => {
|
|
99
110
|
expect.assertions(1);
|
|
100
111
|
|
|
101
112
|
const account = new AccountEntity(defaultAccountDto());
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
114
|
+
await userMeLocalStorage.flush();
|
|
115
|
+
const cachedUser = await userMeLocalStorage.getData();
|
|
116
|
+
expect(cachedUser).toBeUndefined();
|
|
104
117
|
});
|
|
105
118
|
|
|
106
|
-
it("should
|
|
119
|
+
it("should flush a cached user", async () => {
|
|
107
120
|
expect.assertions(1);
|
|
108
121
|
|
|
109
122
|
const account = new AccountEntity(defaultAccountDto());
|
|
110
123
|
const user = new UserEntity(defaultUserDto());
|
|
111
|
-
|
|
124
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
125
|
+
await userMeLocalStorage.setData(user);
|
|
112
126
|
|
|
113
|
-
await
|
|
127
|
+
await userMeLocalStorage.flush();
|
|
114
128
|
|
|
115
|
-
expect(Object.keys(await browser.storage.
|
|
129
|
+
expect(Object.keys(await browser.storage.local.get()).length).toEqual(0);
|
|
116
130
|
});
|
|
117
131
|
|
|
118
132
|
it("should not remove another cached user if there is none for the given account", async () => {
|
|
@@ -124,13 +138,15 @@ describe("UserMeSessionStorageService", () => {
|
|
|
124
138
|
}),
|
|
125
139
|
);
|
|
126
140
|
const userOtherAccount = new UserEntity(defaultUserDto());
|
|
127
|
-
|
|
141
|
+
const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
|
|
142
|
+
await userMeLocalStorageOtherAccount.setData(userOtherAccount);
|
|
128
143
|
|
|
129
144
|
const account = new AccountEntity(defaultAccountDto());
|
|
145
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
146
|
+
await userMeLocalStorage.flush();
|
|
130
147
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
expect(Object.keys(await browser.storage.session.get()).length).toEqual(1);
|
|
148
|
+
// One for data and another one for metadata
|
|
149
|
+
expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
|
|
134
150
|
});
|
|
135
151
|
|
|
136
152
|
it("should not remove another cached user if there is a cached user for the given account", async () => {
|
|
@@ -142,16 +158,19 @@ describe("UserMeSessionStorageService", () => {
|
|
|
142
158
|
}),
|
|
143
159
|
);
|
|
144
160
|
const userOtherAccount = new UserEntity(defaultUserDto());
|
|
145
|
-
|
|
161
|
+
const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
|
|
162
|
+
await userMeLocalStorageOtherAccount.setData(userOtherAccount);
|
|
146
163
|
|
|
147
164
|
const account = new AccountEntity(defaultAccountDto());
|
|
148
165
|
const user = new UserEntity(defaultUserDto());
|
|
149
|
-
|
|
166
|
+
const userMeLocalStorage = new UserMeLocalStorage(account);
|
|
167
|
+
await userMeLocalStorage.setData(user);
|
|
150
168
|
|
|
151
|
-
await
|
|
169
|
+
await userMeLocalStorage.flush();
|
|
152
170
|
|
|
153
|
-
|
|
154
|
-
|
|
171
|
+
// One for data and another one for metadata
|
|
172
|
+
expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
|
|
173
|
+
const cachedUserOtherAccount = await userMeLocalStorageOtherAccount.getData();
|
|
155
174
|
expect(cachedUserOtherAccount).not.toBeNull();
|
|
156
175
|
expect(cachedUserOtherAccount.id).toEqual(userOtherAccount.id);
|
|
157
176
|
});
|
|
@@ -25,13 +25,13 @@ import FolderEntity from "../../model/entity/folder/folderEntity";
|
|
|
25
25
|
import GetOrFindMetadataSettingsService from "./getOrFindMetadataSettingsService";
|
|
26
26
|
import FoldersCollection from "../../model/entity/folder/foldersCollection";
|
|
27
27
|
import ResourcesCollection from "../../model/entity/resource/resourcesCollection";
|
|
28
|
-
import ResourceTypeModel from "../../model/resourceType/resourceTypeModel";
|
|
29
28
|
import { RESOURCE_TYPE_VERSION_5 } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity";
|
|
30
29
|
import Keyring from "../../model/keyring";
|
|
31
30
|
import ExternalGpgKeyEntity from "passbolt-styleguide/src/shared/models/entity/gpgkey/externalGpgKeyEntity";
|
|
32
31
|
import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
|
|
33
32
|
import CollectionValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/collectionValidationError";
|
|
34
33
|
import EntityValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/entityValidationError";
|
|
34
|
+
import GetOrFindResourceTypesService from "../resourceType/getOrFindResourceTypesService";
|
|
35
35
|
|
|
36
36
|
class EncryptMetadataService {
|
|
37
37
|
/**
|
|
@@ -42,7 +42,7 @@ class EncryptMetadataService {
|
|
|
42
42
|
constructor(apiClientOptions, account) {
|
|
43
43
|
this.getOrFindMetadataSettingsService = new GetOrFindMetadataSettingsService(account, apiClientOptions);
|
|
44
44
|
this.getOrFindMetadataKeysService = new GetOrFindMetadataKeysService(account, apiClientOptions);
|
|
45
|
-
this.
|
|
45
|
+
this.getOrFindResourceTypesService = new GetOrFindResourceTypesService(account, apiClientOptions);
|
|
46
46
|
this.account = account;
|
|
47
47
|
this.keyring = new Keyring();
|
|
48
48
|
this._usersPublicGpgKeys = {};
|
|
@@ -123,7 +123,7 @@ class EncryptMetadataService {
|
|
|
123
123
|
throw new Error("Unable to encrypt the collection metadata, a resource metadata is already encrypted.");
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
const resourceTypesV5Collection = await this.
|
|
126
|
+
const resourceTypesV5Collection = await this.getOrFindResourceTypesService.getOrFindAll();
|
|
127
127
|
resourceTypesV5Collection.filterByResourceTypeVersion(RESOURCE_TYPE_VERSION_5);
|
|
128
128
|
// No need to encrypt metadata of resource type v4.
|
|
129
129
|
if (
|