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
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
} from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity.test.data";
|
|
27
27
|
import PasswordExpirySettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity";
|
|
28
28
|
import PasswordExpirySettingsModel from "./passwordExpirySettingsModel";
|
|
29
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
29
30
|
import { v4 as uuid } from "uuid";
|
|
30
31
|
import PassboltBadResponseError from "passbolt-styleguide/src/shared/lib/Error/PassboltBadResponseError";
|
|
31
32
|
import PasswordExpiryProSettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiryPro/passwordExpiryProSettingsEntity";
|
|
@@ -40,7 +41,7 @@ describe("PasswordExpiry model", () => {
|
|
|
40
41
|
const account = new AccountEntity(defaultAccountDto());
|
|
41
42
|
apiClientOptions = BuildApiClientOptionsService.buildFromAccount(account);
|
|
42
43
|
model = new PasswordExpirySettingsModel(account, apiClientOptions);
|
|
43
|
-
jest.spyOn(
|
|
44
|
+
jest.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind").mockImplementation(() =>
|
|
44
45
|
Promise.resolve({
|
|
45
46
|
isPluginEnabled: () => false,
|
|
46
47
|
}),
|
|
@@ -216,7 +217,7 @@ describe("PasswordExpiry model", () => {
|
|
|
216
217
|
it("should return an PasswordExpiryProSettingsEntity when passwordExpiryPolicies is enabled ", async () => {
|
|
217
218
|
expect.assertions(1);
|
|
218
219
|
|
|
219
|
-
jest.spyOn(
|
|
220
|
+
jest.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind").mockImplementation(() =>
|
|
220
221
|
Promise.resolve({
|
|
221
222
|
isPluginEnabled: () => true,
|
|
222
223
|
}),
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
12
|
*/
|
|
13
13
|
import ResourceLocalStorage from "../../service/local_storage/resourceLocalStorage";
|
|
14
|
-
import ResourceTypeModel from "../../model/resourceType/resourceTypeModel";
|
|
15
14
|
import ResourcesCollection from "../entity/resource/resourcesCollection";
|
|
16
15
|
import PermissionEntity from "passbolt-styleguide/src/shared/models/entity/permission/permissionEntity";
|
|
17
16
|
import PermissionsCollection from "passbolt-styleguide/src/shared/models/entity/permission/permissionsCollection";
|
|
@@ -19,6 +18,7 @@ import ResourceEntity from "../entity/resource/resourceEntity";
|
|
|
19
18
|
import PermissionChangesCollection from "../entity/permission/change/permissionChangesCollection";
|
|
20
19
|
import ResourceService from "../../service/api/resource/resourceService";
|
|
21
20
|
import PlaintextEntity from "../entity/plaintext/plaintextEntity";
|
|
21
|
+
import GetSecretSchemaResourceTypeService from "../../service/resourceType/getSecretSchemaResourceTypeService";
|
|
22
22
|
|
|
23
23
|
const MAX_LENGTH_PLAINTEXT = 4096;
|
|
24
24
|
|
|
@@ -29,9 +29,9 @@ class ResourceModel {
|
|
|
29
29
|
* @param {AccountEntity} account the user account
|
|
30
30
|
* @public
|
|
31
31
|
*/
|
|
32
|
-
constructor(apiClientOptions) {
|
|
32
|
+
constructor(apiClientOptions, account) {
|
|
33
33
|
this.resourceService = new ResourceService(apiClientOptions);
|
|
34
|
-
this.
|
|
34
|
+
this.getSecretSchemaResourceTypeService = new GetSecretSchemaResourceTypeService(account, apiClientOptions);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/*
|
|
@@ -151,7 +151,7 @@ class ResourceModel {
|
|
|
151
151
|
return plaintextDto;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
const schema = await this.
|
|
154
|
+
const schema = await this.getSecretSchemaResourceTypeService.getByResourceTypeId(resourceTypeId);
|
|
155
155
|
if (!schema) {
|
|
156
156
|
throw new TypeError("Could not find the schema definition for the requested resource type.");
|
|
157
157
|
}
|
|
@@ -17,8 +17,7 @@ import UserEntity from "../entity/user/userEntity";
|
|
|
17
17
|
import UsersCollection from "passbolt-styleguide/src/shared/models/entity/user/usersCollection";
|
|
18
18
|
import Validator from "validator";
|
|
19
19
|
import RoleEntity from "passbolt-styleguide/src/shared/models/entity/role/roleEntity";
|
|
20
|
-
import
|
|
21
|
-
import OrganizationSettingsModel from "../organizationSettings/organizationSettingsModel";
|
|
20
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* @deprecated
|
|
@@ -33,7 +32,7 @@ class UserModel {
|
|
|
33
32
|
*/
|
|
34
33
|
constructor(apiClientOptions, account = null) {
|
|
35
34
|
this.userApiService = new UserApiService(apiClientOptions);
|
|
36
|
-
this.
|
|
35
|
+
this.apiClientOptions = apiClientOptions;
|
|
37
36
|
this.account = account;
|
|
38
37
|
}
|
|
39
38
|
|
|
@@ -49,16 +48,17 @@ class UserModel {
|
|
|
49
48
|
profile: true,
|
|
50
49
|
gpgkey: false,
|
|
51
50
|
groups_users: false,
|
|
52
|
-
last_logged_in: true,
|
|
53
51
|
pending_account_recovery_request: true,
|
|
54
52
|
account_recovery_user_setting: true,
|
|
55
53
|
};
|
|
56
|
-
//
|
|
54
|
+
// last_logged_in and is_mfa_enabled contains are only available for admin.
|
|
57
55
|
|
|
58
56
|
if (this.account && this.account.roleName === RoleEntity.ROLE_ADMIN) {
|
|
57
|
+
contains.last_logged_in = true;
|
|
59
58
|
contains.is_mfa_enabled = true;
|
|
60
|
-
const
|
|
61
|
-
|
|
59
|
+
const getOrFindSiteSettingsService = new GetOrFindSiteSettingsService(this.account, this.apiClientOptions);
|
|
60
|
+
const siteSettings = await getOrFindSiteSettingsService.getOrFind(false);
|
|
61
|
+
if (siteSettings.isPluginEnabled("metadata")) {
|
|
62
62
|
contains.missing_metadata_key_ids = true;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -78,27 +78,6 @@ class UserModel {
|
|
|
78
78
|
return this.userApiService.resendInvite(username);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
/**
|
|
82
|
-
* Get or find the signed-in user information.
|
|
83
|
-
* @param {boolean} refreshCache (Optional) Should request the API and refresh the cache. Default false.
|
|
84
|
-
* @returns {Promise<UserEntity>}
|
|
85
|
-
*/
|
|
86
|
-
async getOrFindMe(refreshCache = false) {
|
|
87
|
-
let user = await UserMeSessionStorageService.get(this.account);
|
|
88
|
-
if (!user || refreshCache) {
|
|
89
|
-
const contains = { profile: true, role: true, account_recovery_user_setting: true };
|
|
90
|
-
const organizationSettings = await this.organisationSettingsModel.getOrFind();
|
|
91
|
-
if (organizationSettings.isPluginEnabled("metadata")) {
|
|
92
|
-
contains.missing_metadata_key_ids = true;
|
|
93
|
-
}
|
|
94
|
-
user = await this.findOne(this.account.userId, contains, true);
|
|
95
|
-
|
|
96
|
-
await UserMeSessionStorageService.set(this.account, user);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return user;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
81
|
/**
|
|
103
82
|
* Get a collection of all users from the local storage.
|
|
104
83
|
* If the local storage is unset, initialize it.
|
|
@@ -25,10 +25,11 @@ import UserModel from "./userModel";
|
|
|
25
25
|
import UserLocalStorage from "../../service/local_storage/userLocalStorage";
|
|
26
26
|
import UserEntity from "../entity/user/userEntity";
|
|
27
27
|
import CollectionValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/collectionValidationError";
|
|
28
|
-
import { adminAccountDto } from "../entity/account/accountEntity.test.data";
|
|
28
|
+
import { adminAccountDto, defaultAccountDto } from "../entity/account/accountEntity.test.data";
|
|
29
29
|
import AccountEntity from "../entity/account/accountEntity";
|
|
30
|
-
import {
|
|
31
|
-
import
|
|
30
|
+
import { defaultCeSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
31
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
32
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
32
33
|
|
|
33
34
|
beforeAll(() => {
|
|
34
35
|
enableFetchMocks();
|
|
@@ -147,12 +148,12 @@ describe("UserModel", () => {
|
|
|
147
148
|
|
|
148
149
|
const apiClientOption = defaultApiClientOptions();
|
|
149
150
|
const model = new UserModel(apiClientOption, account);
|
|
150
|
-
const siteSettingsDto =
|
|
151
|
-
siteSettingsDto.passbolt.plugins.metadata = false;
|
|
151
|
+
const siteSettingsDto = defaultCeSiteSettings();
|
|
152
|
+
siteSettingsDto.passbolt.plugins.metadata = { enabled: false };
|
|
152
153
|
|
|
153
154
|
jest
|
|
154
|
-
.spyOn(
|
|
155
|
-
.mockImplementation(() => siteSettingsDto);
|
|
155
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
156
|
+
.mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
|
|
156
157
|
|
|
157
158
|
jest.spyOn(model, "findAll");
|
|
158
159
|
|
|
@@ -195,11 +196,11 @@ describe("UserModel", () => {
|
|
|
195
196
|
|
|
196
197
|
const apiClientOption = defaultApiClientOptions();
|
|
197
198
|
const model = new UserModel(apiClientOption, account);
|
|
198
|
-
const siteSettingsDto =
|
|
199
|
+
const siteSettingsDto = defaultCeSiteSettings();
|
|
199
200
|
|
|
200
201
|
jest
|
|
201
|
-
.spyOn(
|
|
202
|
-
.mockImplementation(() => siteSettingsDto);
|
|
202
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
203
|
+
.mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
|
|
203
204
|
|
|
204
205
|
jest.spyOn(model, "findAll");
|
|
205
206
|
|
|
@@ -220,6 +221,46 @@ describe("UserModel", () => {
|
|
|
220
221
|
true,
|
|
221
222
|
);
|
|
222
223
|
});
|
|
224
|
+
|
|
225
|
+
it("should not add contains last_logged_in and is_mfa_enabled if user is not an administrator", async () => {
|
|
226
|
+
expect.assertions(1);
|
|
227
|
+
const account = new AccountEntity(
|
|
228
|
+
defaultAccountDto({
|
|
229
|
+
role_name: RoleEntity.ROLE_USER,
|
|
230
|
+
}),
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
const dtoOptions = {
|
|
234
|
+
withRole: true,
|
|
235
|
+
withGroupsUsers: true,
|
|
236
|
+
withGpgkey: true,
|
|
237
|
+
withAccountRecoveryUserSetting: true,
|
|
238
|
+
withPendingAccountRecoveryUserRequest: true,
|
|
239
|
+
};
|
|
240
|
+
const dto1 = defaultUserDto({ username: "ada@passbolt.com" }, dtoOptions);
|
|
241
|
+
const dtos = [dto1];
|
|
242
|
+
|
|
243
|
+
fetch.doMockOnceIf(/users\.json/, async () => mockApiResponse(dtos));
|
|
244
|
+
|
|
245
|
+
const apiClientOption = defaultApiClientOptions();
|
|
246
|
+
const model = new UserModel(apiClientOption, account);
|
|
247
|
+
|
|
248
|
+
jest.spyOn(model, "findAll");
|
|
249
|
+
|
|
250
|
+
await model.updateLocalStorage();
|
|
251
|
+
|
|
252
|
+
expect(model.findAll).toHaveBeenCalledWith(
|
|
253
|
+
{
|
|
254
|
+
account_recovery_user_setting: true,
|
|
255
|
+
gpgkey: false,
|
|
256
|
+
groups_users: false,
|
|
257
|
+
pending_account_recovery_request: true,
|
|
258
|
+
profile: true,
|
|
259
|
+
},
|
|
260
|
+
null,
|
|
261
|
+
true,
|
|
262
|
+
);
|
|
263
|
+
});
|
|
223
264
|
});
|
|
224
265
|
|
|
225
266
|
describe("UserModel::findOne", () => {
|
|
@@ -282,95 +323,6 @@ describe("UserModel", () => {
|
|
|
282
323
|
expect(entity._groups_users).toHaveLength(0);
|
|
283
324
|
});
|
|
284
325
|
});
|
|
285
|
-
|
|
286
|
-
describe("UserModel::getOrFindMe", () => {
|
|
287
|
-
it("should, with the option profile, role, account_recovery_user_setting without missing_metadata_key_ids if plugin is disabled", async () => {
|
|
288
|
-
expect.assertions(2);
|
|
289
|
-
|
|
290
|
-
const account = new AccountEntity(adminAccountDto());
|
|
291
|
-
|
|
292
|
-
const dtoOptions = {
|
|
293
|
-
withGpgkey: true,
|
|
294
|
-
withAccountRecoveryUserSetting: true,
|
|
295
|
-
withPendingAccountRecoveryUserRequest: true,
|
|
296
|
-
};
|
|
297
|
-
const dto = defaultUserDto(
|
|
298
|
-
{
|
|
299
|
-
id: "f642271d-bbb1-401e-bbd1-7ec370f8e19b",
|
|
300
|
-
username: "betty@passbolt.com",
|
|
301
|
-
groups_users: [],
|
|
302
|
-
missing_metadata_key_ids: [],
|
|
303
|
-
},
|
|
304
|
-
dtoOptions,
|
|
305
|
-
);
|
|
306
|
-
|
|
307
|
-
//Mock the API call and check if the call is the one expected
|
|
308
|
-
fetch.doMockOnceIf(/users\/.*\.json/, async () => mockApiResponse(dto));
|
|
309
|
-
await MockExtension.withConfiguredAccount();
|
|
310
|
-
const apiClientOption = defaultApiClientOptions();
|
|
311
|
-
const model = new UserModel(apiClientOption, account);
|
|
312
|
-
const siteSettingsDto = defaultCeOrganizationSettings();
|
|
313
|
-
siteSettingsDto.passbolt.plugins.metadata = false;
|
|
314
|
-
|
|
315
|
-
jest
|
|
316
|
-
.spyOn(model.organisationSettingsModel.organizationSettingsService, "find")
|
|
317
|
-
.mockImplementation(() => siteSettingsDto);
|
|
318
|
-
|
|
319
|
-
jest.spyOn(model, "findOne");
|
|
320
|
-
|
|
321
|
-
const entity = await model.getOrFindMe(true);
|
|
322
|
-
|
|
323
|
-
expect(model.findOne).toHaveBeenCalledWith(
|
|
324
|
-
"f642271d-bbb1-401e-bbd1-7ec370f8e19b",
|
|
325
|
-
{ account_recovery_user_setting: true, profile: true, role: true },
|
|
326
|
-
true,
|
|
327
|
-
);
|
|
328
|
-
expect(entity).toEqual(new UserEntity(dto));
|
|
329
|
-
});
|
|
330
|
-
it("should, with the option profile, role, account_recovery_user_setting and missing_metadata_key_ids if plugin is enabled", async () => {
|
|
331
|
-
expect.assertions(2);
|
|
332
|
-
|
|
333
|
-
const account = new AccountEntity(adminAccountDto());
|
|
334
|
-
|
|
335
|
-
const dtoOptions = {
|
|
336
|
-
withGpgkey: true,
|
|
337
|
-
withAccountRecoveryUserSetting: true,
|
|
338
|
-
withPendingAccountRecoveryUserRequest: true,
|
|
339
|
-
};
|
|
340
|
-
const dto = defaultUserDto(
|
|
341
|
-
{
|
|
342
|
-
id: "f642271d-bbb1-401e-bbd1-7ec370f8e19b",
|
|
343
|
-
username: "betty@passbolt.com",
|
|
344
|
-
groups_users: [],
|
|
345
|
-
missing_metadata_key_ids: [],
|
|
346
|
-
},
|
|
347
|
-
dtoOptions,
|
|
348
|
-
);
|
|
349
|
-
|
|
350
|
-
//Mock the API call and check if the call is the one expected
|
|
351
|
-
fetch.doMockOnceIf(/users\/.*\.json/, async () => mockApiResponse(dto));
|
|
352
|
-
await MockExtension.withConfiguredAccount();
|
|
353
|
-
const apiClientOption = defaultApiClientOptions();
|
|
354
|
-
const model = new UserModel(apiClientOption, account);
|
|
355
|
-
const siteSettingsDto = defaultCeOrganizationSettings();
|
|
356
|
-
siteSettingsDto.passbolt.plugins.metadata = true;
|
|
357
|
-
|
|
358
|
-
jest
|
|
359
|
-
.spyOn(model.organisationSettingsModel.organizationSettingsService, "find")
|
|
360
|
-
.mockImplementation(() => siteSettingsDto);
|
|
361
|
-
|
|
362
|
-
jest.spyOn(model, "findOne");
|
|
363
|
-
|
|
364
|
-
const entity = await model.getOrFindMe(true);
|
|
365
|
-
|
|
366
|
-
expect(model.findOne).toHaveBeenCalledWith(
|
|
367
|
-
"f642271d-bbb1-401e-bbd1-7ec370f8e19b",
|
|
368
|
-
{ account_recovery_user_setting: true, missing_metadata_key_ids: true, profile: true, role: true },
|
|
369
|
-
true,
|
|
370
|
-
);
|
|
371
|
-
expect(entity).toEqual(new UserEntity(dto));
|
|
372
|
-
});
|
|
373
|
-
});
|
|
374
326
|
describe("UserModel::findAll", () => {
|
|
375
327
|
it("should throw an error if users or its associated content do not validated.", async () => {
|
|
376
328
|
expect.assertions(2);
|
|
@@ -16,6 +16,7 @@ import ParseAppUrlService from "../service/app/parseAppUrlService";
|
|
|
16
16
|
import { PortEvents } from "../event/portEvents";
|
|
17
17
|
import CheckAuthStatusService from "../service/auth/checkAuthStatusService";
|
|
18
18
|
import GetActiveAccountService from "../service/account/getActiveAccountService";
|
|
19
|
+
import BuildApiClientOptionsService from "../service/account/buildApiClientOptionsService";
|
|
19
20
|
|
|
20
21
|
class AppBootstrap extends Pagemod {
|
|
21
22
|
/**
|
|
@@ -94,7 +95,9 @@ class AppBootstrap extends Pagemod {
|
|
|
94
95
|
* @returns {Promise<boolean>}
|
|
95
96
|
*/
|
|
96
97
|
async assertUserAuthenticated() {
|
|
97
|
-
const
|
|
98
|
+
const account = await GetActiveAccountService.get();
|
|
99
|
+
const apiClientOptions = BuildApiClientOptionsService.buildFromAccount(account);
|
|
100
|
+
const checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
|
|
98
101
|
const authStatus = await checkAuthStatusService.checkAuthStatus(true);
|
|
99
102
|
return authStatus.isAuthenticated;
|
|
100
103
|
}
|
|
@@ -21,6 +21,9 @@ import { PortEvents } from "../event/portEvents";
|
|
|
21
21
|
import CheckAuthStatusService from "../service/auth/checkAuthStatusService";
|
|
22
22
|
import { userLoggedInAuthStatus, userLoggedOutAuthStatus } from "../controller/auth/authCheckStatus.test.data";
|
|
23
23
|
import GetActiveAccountService from "../service/account/getActiveAccountService";
|
|
24
|
+
import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
|
|
25
|
+
import AccountEntity from "../model/entity/account/accountEntity";
|
|
26
|
+
import { defaultAccountDto } from "../model/entity/account/accountEntity.test.data";
|
|
24
27
|
|
|
25
28
|
const spyAddWorker = jest.spyOn(WorkersSessionStorage, "addWorker");
|
|
26
29
|
jest.spyOn(ScriptExecution.prototype, "injectPortname").mockImplementation(jest.fn());
|
|
@@ -62,10 +65,10 @@ describe("AppBootstrap", () => {
|
|
|
62
65
|
it("Should be able to attach app bootstrap pagemod to browser frame", async () => {
|
|
63
66
|
expect.assertions(1);
|
|
64
67
|
// mock functions
|
|
65
|
-
jest.spyOn(GetActiveAccountService, "get").mockImplementation(() =>
|
|
68
|
+
jest.spyOn(GetActiveAccountService, "get").mockImplementation(() => new AccountEntity(defaultAccountDto()));
|
|
66
69
|
jest
|
|
67
70
|
.spyOn(CheckAuthStatusService.prototype, "checkAuthStatus")
|
|
68
|
-
.mockImplementation(async () => userLoggedInAuthStatus());
|
|
71
|
+
.mockImplementation(async () => new OnlineSessionEntity(userLoggedInAuthStatus()));
|
|
69
72
|
jest.spyOn(UserSettings.prototype, "getDomain").mockImplementation(() => "https://passbolt.dev");
|
|
70
73
|
const result = await AppBootstrap.canBeAttachedTo({
|
|
71
74
|
frameId: Pagemod.TOP_FRAME_ID,
|
|
@@ -22,7 +22,7 @@ import { ResourceTypeEvents } from "../event/resourceTypeEvents";
|
|
|
22
22
|
import { RoleEvents } from "../event/roleEvents";
|
|
23
23
|
import { KeyringEvents } from "../event/keyringEvents";
|
|
24
24
|
import { SecretEvents } from "../event/secretEvents";
|
|
25
|
-
import {
|
|
25
|
+
import { SiteSettingsEvents } from "../event/siteSettingsEvents";
|
|
26
26
|
import { ShareEvents } from "../event/shareEvents";
|
|
27
27
|
import { UserEvents } from "../event/userEvents";
|
|
28
28
|
import { GroupEvents } from "../event/groupEvents";
|
|
@@ -43,6 +43,8 @@ import GetActiveAccountService from "../service/account/getActiveAccountService"
|
|
|
43
43
|
import { PermissionEvents } from "../event/permissionEvents";
|
|
44
44
|
import { AccountEvents } from "../event/accountEvents";
|
|
45
45
|
import { AppSignOutEvents } from "../event/appSignOutEvents";
|
|
46
|
+
import UserApiService from "passbolt-styleguide/src/shared/services/api/user/userApiService";
|
|
47
|
+
import UserEntity from "../model/entity/user/userEntity";
|
|
46
48
|
|
|
47
49
|
class App extends Pagemod {
|
|
48
50
|
/**
|
|
@@ -67,7 +69,7 @@ class App extends Pagemod {
|
|
|
67
69
|
RoleEvents,
|
|
68
70
|
KeyringEvents,
|
|
69
71
|
SecretEvents,
|
|
70
|
-
|
|
72
|
+
SiteSettingsEvents,
|
|
71
73
|
ShareEvents,
|
|
72
74
|
UserEvents,
|
|
73
75
|
GroupEvents,
|
|
@@ -97,9 +99,11 @@ class App extends Pagemod {
|
|
|
97
99
|
async attachEvents(port) {
|
|
98
100
|
try {
|
|
99
101
|
const tab = port._port.sender.tab;
|
|
100
|
-
const
|
|
102
|
+
const account = await GetActiveAccountService.get();
|
|
103
|
+
const apiClientOptions = BuildApiClientOptionsService.buildFromAccount(account);
|
|
104
|
+
const checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
|
|
101
105
|
const authStatus = await checkAuthStatusService.checkAuthStatus(true);
|
|
102
|
-
if (!authStatus.isAuthenticated || authStatus.
|
|
106
|
+
if (!authStatus.isAuthenticated || !authStatus.isMfaAuthenticated) {
|
|
103
107
|
console.error("Can not attach application if user is not logged in, connect only app sign-out events.");
|
|
104
108
|
for (const event of this.appSignOutEvent) {
|
|
105
109
|
event.listen({ port, tab });
|
|
@@ -111,8 +115,30 @@ class App extends Pagemod {
|
|
|
111
115
|
const appInitController = new AppInitController();
|
|
112
116
|
await appInitController.main();
|
|
113
117
|
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
/*
|
|
119
|
+
* Get the user from the API to add the role name into the account
|
|
120
|
+
* This is used in some classes to add contain for API request or to throw an Error
|
|
121
|
+
* - UserModel.updateLocalStorage
|
|
122
|
+
* - FindAndUpdateUsersLocalStorageService.findAndUpdateAll
|
|
123
|
+
* - ShareMetadataKeyPrivateService.shareOneMissing
|
|
124
|
+
* - ShareMetadataKeyPrivateService.shareAllMissing
|
|
125
|
+
*
|
|
126
|
+
* If an issue happen the role name will not be updated and the App will start anyway with fewer permissions
|
|
127
|
+
*/
|
|
128
|
+
try {
|
|
129
|
+
// Load the application settings, necessary to validate the account username.
|
|
130
|
+
const userApiService = new UserApiService(apiClientOptions);
|
|
131
|
+
const userDto = await userApiService.get(account.userId, {
|
|
132
|
+
role: true,
|
|
133
|
+
});
|
|
134
|
+
const userEntity = new UserEntity(userDto);
|
|
135
|
+
// Add in the account the role name if the option object have role (only for authenticated user)
|
|
136
|
+
account.set("role_name", userEntity.role?.name);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error("appPagemod::add role name to the account cannot be retrieved, some features could be missing.");
|
|
139
|
+
console.error(error);
|
|
140
|
+
}
|
|
141
|
+
|
|
116
142
|
for (const event of this.events) {
|
|
117
143
|
event.listen({ port, tab }, apiClientOptions, account);
|
|
118
144
|
}
|
|
@@ -16,7 +16,7 @@ import App from "./appPagemod";
|
|
|
16
16
|
import { UserEvents } from "../event/userEvents";
|
|
17
17
|
import { KeyringEvents } from "../event/keyringEvents";
|
|
18
18
|
import { AuthEvents } from "../event/authEvents";
|
|
19
|
-
import {
|
|
19
|
+
import { SiteSettingsEvents } from "../event/siteSettingsEvents";
|
|
20
20
|
import { LocaleEvents } from "../event/localeEvents";
|
|
21
21
|
import { AppEvents } from "../event/appEvents";
|
|
22
22
|
import { FolderEvents } from "../event/folderEvents";
|
|
@@ -35,7 +35,6 @@ import { ThemeEvents } from "../event/themeEvents";
|
|
|
35
35
|
import { MobileEvents } from "../event/mobileEvents";
|
|
36
36
|
import { PownedPasswordEvents } from "../event/pownedPasswordEvents";
|
|
37
37
|
import { MfaEvents } from "../event/mfaEvents";
|
|
38
|
-
import { v4 as uuid } from "uuid";
|
|
39
38
|
import BuildApiClientOptionsService from "../service/account/buildApiClientOptionsService";
|
|
40
39
|
import { enableFetchMocks } from "jest-fetch-mock";
|
|
41
40
|
import { RememberMeEvents } from "../event/rememberMeEvents";
|
|
@@ -45,6 +44,11 @@ import GetActiveAccountService from "../service/account/getActiveAccountService"
|
|
|
45
44
|
import { PermissionEvents } from "../event/permissionEvents";
|
|
46
45
|
import { AccountEvents } from "../event/accountEvents";
|
|
47
46
|
import { AppSignOutEvents } from "../event/appSignOutEvents";
|
|
47
|
+
import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
|
|
48
|
+
import UserApiService from "passbolt-styleguide/src/shared/services/api/user/userApiService";
|
|
49
|
+
import { defaultAdminUserDto } from "passbolt-styleguide/src/shared/models/entity/user/userEntity.test.data";
|
|
50
|
+
import AccountEntity from "../model/entity/account/accountEntity";
|
|
51
|
+
import { defaultAccountDto } from "../model/entity/account/accountEntity.test.data";
|
|
48
52
|
|
|
49
53
|
jest.spyOn(ConfigEvents, "listen").mockImplementation(jest.fn());
|
|
50
54
|
jest.spyOn(AppEvents, "listen").mockImplementation(jest.fn());
|
|
@@ -55,7 +59,7 @@ jest.spyOn(ResourceTypeEvents, "listen").mockImplementation(jest.fn());
|
|
|
55
59
|
jest.spyOn(RoleEvents, "listen").mockImplementation(jest.fn());
|
|
56
60
|
jest.spyOn(KeyringEvents, "listen").mockImplementation(jest.fn());
|
|
57
61
|
jest.spyOn(SecretEvents, "listen").mockImplementation(jest.fn());
|
|
58
|
-
jest.spyOn(
|
|
62
|
+
jest.spyOn(SiteSettingsEvents, "listen").mockImplementation(jest.fn());
|
|
59
63
|
jest.spyOn(ShareEvents, "listen").mockImplementation(jest.fn());
|
|
60
64
|
jest.spyOn(UserEvents, "listen").mockImplementation(jest.fn());
|
|
61
65
|
jest.spyOn(GroupEvents, "listen").mockImplementation(jest.fn());
|
|
@@ -73,6 +77,7 @@ jest.spyOn(RememberMeEvents, "listen").mockImplementation(jest.fn());
|
|
|
73
77
|
jest.spyOn(PermissionEvents, "listen").mockImplementation(jest.fn());
|
|
74
78
|
jest.spyOn(AccountEvents, "listen").mockImplementation(jest.fn());
|
|
75
79
|
jest.spyOn(AppSignOutEvents, "listen").mockImplementation(jest.fn());
|
|
80
|
+
jest.mock("../service/auth/checkAuthStatusService");
|
|
76
81
|
|
|
77
82
|
describe("App", () => {
|
|
78
83
|
beforeEach(() => {
|
|
@@ -83,7 +88,7 @@ describe("App", () => {
|
|
|
83
88
|
|
|
84
89
|
describe("App::attachEvents", () => {
|
|
85
90
|
it("Should attach app events", async () => {
|
|
86
|
-
expect.assertions(
|
|
91
|
+
expect.assertions(32);
|
|
87
92
|
// data mocked
|
|
88
93
|
const port = {
|
|
89
94
|
_port: {
|
|
@@ -98,15 +103,22 @@ describe("App", () => {
|
|
|
98
103
|
jest.spyOn(browser.cookies, "get").mockImplementation(() => ({ value: "csrf-token" }));
|
|
99
104
|
jest
|
|
100
105
|
.spyOn(CheckAuthStatusService.prototype, "checkAuthStatus")
|
|
101
|
-
.mockImplementation(async () => userLoggedInAuthStatus());
|
|
102
|
-
const mockedAccount =
|
|
106
|
+
.mockImplementation(async () => new OnlineSessionEntity(userLoggedInAuthStatus()));
|
|
107
|
+
const mockedAccount = new AccountEntity(defaultAccountDto());
|
|
103
108
|
const mockApiClient = BuildApiClientOptionsService.buildFromAccount(mockedAccount);
|
|
109
|
+
// resource name added when UserApiService is created.
|
|
110
|
+
mockApiClient.setResourceName("users");
|
|
111
|
+
const adminUserDto = defaultAdminUserDto();
|
|
104
112
|
jest.spyOn(GetActiveAccountService, "get").mockImplementation(() => mockedAccount);
|
|
113
|
+
jest.spyOn(UserApiService.prototype, "get").mockImplementation(() => adminUserDto);
|
|
114
|
+
jest.spyOn(mockedAccount, "set");
|
|
105
115
|
// process
|
|
106
116
|
await App.attachEvents(port);
|
|
107
117
|
// expectations
|
|
108
118
|
const expectedPortAndTab = { port: port, tab: port._port.sender.tab };
|
|
109
|
-
expect(GetActiveAccountService.get).
|
|
119
|
+
expect(GetActiveAccountService.get).toHaveBeenCalledTimes(1);
|
|
120
|
+
expect(UserApiService.prototype.get).toHaveBeenCalledWith(mockedAccount.userId, { role: true });
|
|
121
|
+
expect(mockedAccount.set).toHaveBeenCalledWith("role_name", adminUserDto.role.name);
|
|
110
122
|
expect(ConfigEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
111
123
|
expect(AppEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
112
124
|
expect(AuthEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
@@ -116,7 +128,7 @@ describe("App", () => {
|
|
|
116
128
|
expect(RoleEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
117
129
|
expect(KeyringEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
118
130
|
expect(SecretEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
119
|
-
expect(
|
|
131
|
+
expect(SiteSettingsEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
120
132
|
expect(ShareEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
121
133
|
expect(UserEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
122
134
|
expect(GroupEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
@@ -147,7 +159,7 @@ describe("App", () => {
|
|
|
147
159
|
RoleEvents,
|
|
148
160
|
KeyringEvents,
|
|
149
161
|
SecretEvents,
|
|
150
|
-
|
|
162
|
+
SiteSettingsEvents,
|
|
151
163
|
ShareEvents,
|
|
152
164
|
UserEvents,
|
|
153
165
|
GroupEvents,
|
|
@@ -185,7 +197,7 @@ describe("App", () => {
|
|
|
185
197
|
jest.spyOn(browser.cookies, "get").mockImplementation(() => ({ value: "csrf-token" }));
|
|
186
198
|
jest
|
|
187
199
|
.spyOn(CheckAuthStatusService.prototype, "checkAuthStatus")
|
|
188
|
-
.mockImplementation(async () => userLoggedOutAuthStatus());
|
|
200
|
+
.mockImplementation(async () => new OnlineSessionEntity(userLoggedOutAuthStatus()));
|
|
189
201
|
// process
|
|
190
202
|
await App.attachEvents(port);
|
|
191
203
|
// expectations
|
|
@@ -16,7 +16,7 @@ import { UserEvents } from "../event/userEvents";
|
|
|
16
16
|
import { KeyringEvents } from "../event/keyringEvents";
|
|
17
17
|
import { AuthEvents } from "../event/authEvents";
|
|
18
18
|
import { ConfigEvents } from "../event/configEvents";
|
|
19
|
-
import {
|
|
19
|
+
import { SiteSettingsEvents } from "../event/siteSettingsEvents";
|
|
20
20
|
import { LocaleEvents } from "../event/localeEvents";
|
|
21
21
|
import BuildApiClientOptionsService from "../service/account/buildApiClientOptionsService";
|
|
22
22
|
import { RememberMeEvents } from "../event/rememberMeEvents";
|
|
@@ -35,15 +35,7 @@ class Auth extends Pagemod {
|
|
|
35
35
|
* @inheritDoc
|
|
36
36
|
*/
|
|
37
37
|
get events() {
|
|
38
|
-
return [
|
|
39
|
-
ConfigEvents,
|
|
40
|
-
UserEvents,
|
|
41
|
-
KeyringEvents,
|
|
42
|
-
AuthEvents,
|
|
43
|
-
OrganizationSettingsEvents,
|
|
44
|
-
LocaleEvents,
|
|
45
|
-
RememberMeEvents,
|
|
46
|
-
];
|
|
38
|
+
return [ConfigEvents, UserEvents, KeyringEvents, AuthEvents, SiteSettingsEvents, LocaleEvents, RememberMeEvents];
|
|
47
39
|
}
|
|
48
40
|
|
|
49
41
|
/**
|
|
@@ -16,7 +16,7 @@ import Auth from "./authPagemod";
|
|
|
16
16
|
import { UserEvents } from "../event/userEvents";
|
|
17
17
|
import { KeyringEvents } from "../event/keyringEvents";
|
|
18
18
|
import { AuthEvents } from "../event/authEvents";
|
|
19
|
-
import {
|
|
19
|
+
import { SiteSettingsEvents } from "../event/siteSettingsEvents";
|
|
20
20
|
import { LocaleEvents } from "../event/localeEvents";
|
|
21
21
|
import { v4 as uuid } from "uuid";
|
|
22
22
|
import { enableFetchMocks } from "jest-fetch-mock";
|
|
@@ -28,7 +28,7 @@ jest.spyOn(ConfigEvents, "listen").mockImplementation(jest.fn());
|
|
|
28
28
|
jest.spyOn(UserEvents, "listen").mockImplementation(jest.fn());
|
|
29
29
|
jest.spyOn(KeyringEvents, "listen").mockImplementation(jest.fn());
|
|
30
30
|
jest.spyOn(AuthEvents, "listen").mockImplementation(jest.fn());
|
|
31
|
-
jest.spyOn(
|
|
31
|
+
jest.spyOn(SiteSettingsEvents, "listen").mockImplementation(jest.fn());
|
|
32
32
|
jest.spyOn(LocaleEvents, "listen").mockImplementation(jest.fn());
|
|
33
33
|
jest.spyOn(RememberMeEvents, "listen").mockImplementation(jest.fn());
|
|
34
34
|
|
|
@@ -65,7 +65,7 @@ describe("Auth", () => {
|
|
|
65
65
|
expect(UserEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
66
66
|
expect(KeyringEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
67
67
|
expect(AuthEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
68
|
-
expect(
|
|
68
|
+
expect(SiteSettingsEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
69
69
|
expect(LocaleEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
70
70
|
expect(RememberMeEvents.listen).toHaveBeenCalledWith(expectedPortAndTab, mockApiClient, mockedAccount);
|
|
71
71
|
expect(Auth.events).toStrictEqual([
|
|
@@ -73,7 +73,7 @@ describe("Auth", () => {
|
|
|
73
73
|
UserEvents,
|
|
74
74
|
KeyringEvents,
|
|
75
75
|
AuthEvents,
|
|
76
|
-
|
|
76
|
+
SiteSettingsEvents,
|
|
77
77
|
LocaleEvents,
|
|
78
78
|
RememberMeEvents,
|
|
79
79
|
]);
|
|
@@ -23,6 +23,9 @@ import PublicWebsiteSignInPagemod from "./publicWebsiteSignInPagemod";
|
|
|
23
23
|
import CheckAuthStatusService from "../service/auth/checkAuthStatusService";
|
|
24
24
|
import { userLoggedInAuthStatus } from "../controller/auth/authCheckStatus.test.data";
|
|
25
25
|
import GetActiveAccountService from "../service/account/getActiveAccountService";
|
|
26
|
+
import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
|
|
27
|
+
import AccountEntity from "../model/entity/account/accountEntity";
|
|
28
|
+
import { defaultAccountDto } from "../model/entity/account/accountEntity.test.data";
|
|
26
29
|
|
|
27
30
|
jest.spyOn(pagemod.prototype, "injectFiles").mockImplementation(jest.fn());
|
|
28
31
|
jest.spyOn(pagemod.prototype, "attachEvents").mockImplementation(jest.fn());
|
|
@@ -91,10 +94,10 @@ describe("PagemodManager", () => {
|
|
|
91
94
|
url: "https://passbolt.dev/app",
|
|
92
95
|
};
|
|
93
96
|
// mock functions
|
|
94
|
-
jest.spyOn(GetActiveAccountService, "get").mockImplementation(() =>
|
|
97
|
+
jest.spyOn(GetActiveAccountService, "get").mockImplementation(() => new AccountEntity(defaultAccountDto()));
|
|
95
98
|
jest
|
|
96
99
|
.spyOn(CheckAuthStatusService.prototype, "checkAuthStatus")
|
|
97
|
-
.mockImplementation(async () => userLoggedInAuthStatus());
|
|
100
|
+
.mockImplementation(async () => new OnlineSessionEntity(userLoggedInAuthStatus()));
|
|
98
101
|
jest.spyOn(UserSettings.prototype, "getDomain").mockImplementation(() => "https://passbolt.dev");
|
|
99
102
|
// process
|
|
100
103
|
await PagemodManager.exec(details);
|
|
@@ -19,7 +19,7 @@ import { QuickAccessEvents } from "../event/quickAccessEvents";
|
|
|
19
19
|
import { GroupEvents } from "../event/groupEvents";
|
|
20
20
|
import { ResourceEvents } from "../event/resourceEvents";
|
|
21
21
|
import { SecretEvents } from "../event/secretEvents";
|
|
22
|
-
import {
|
|
22
|
+
import { SiteSettingsEvents } from "../event/siteSettingsEvents";
|
|
23
23
|
import { TabEvents } from "../event/tabEvents";
|
|
24
24
|
import { LocaleEvents } from "../event/localeEvents";
|
|
25
25
|
import { PownedPasswordEvents } from "../event/pownedPasswordEvents";
|
|
@@ -50,7 +50,7 @@ class QuickAccess extends Pagemod {
|
|
|
50
50
|
GroupEvents,
|
|
51
51
|
ResourceEvents,
|
|
52
52
|
SecretEvents,
|
|
53
|
-
|
|
53
|
+
SiteSettingsEvents,
|
|
54
54
|
TabEvents,
|
|
55
55
|
LocaleEvents,
|
|
56
56
|
PownedPasswordEvents,
|