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
|
@@ -24,7 +24,11 @@ import FileService from "../../service/file/fileService";
|
|
|
24
24
|
import SsoDataStorage from "../../service/indexedDB_storage/ssoDataStorage";
|
|
25
25
|
import { clientSsoKit } from "../../model/entity/sso/ssoKitClientPart.test.data";
|
|
26
26
|
import GenerateSsoKitService from "../../service/sso/generateSsoKitService";
|
|
27
|
-
import {
|
|
27
|
+
import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
28
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
29
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
30
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
31
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
28
32
|
import { mockApiResponse, mockApiResponseError } from "../../../../../test/mocks/mockApiResponse";
|
|
29
33
|
import { enableFetchMocks } from "jest-fetch-mock";
|
|
30
34
|
import SsoKitClientPartEntity from "../../model/entity/sso/ssoKitClientPartEntity";
|
|
@@ -42,14 +46,15 @@ beforeEach(() => {
|
|
|
42
46
|
});
|
|
43
47
|
|
|
44
48
|
describe("UpdatePrivateKeyController", () => {
|
|
49
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
45
50
|
const mockOrganisationSettingCall = (ssoEnabled = false) => {
|
|
46
|
-
const organizationSettings =
|
|
51
|
+
const organizationSettings = anonymousSiteSettings();
|
|
47
52
|
if (ssoEnabled) {
|
|
48
53
|
organizationSettings.passbolt.plugins.sso = { enabled: true };
|
|
49
54
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
jest
|
|
56
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
57
|
+
.mockImplementation(() => new SiteSettingsEntity(organizationSettings));
|
|
53
58
|
};
|
|
54
59
|
|
|
55
60
|
describe("UpdatePrivateKeyController::exec", () => {
|
|
@@ -76,7 +81,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
76
81
|
},
|
|
77
82
|
};
|
|
78
83
|
|
|
79
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
84
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
80
85
|
const oldPassphrase = pgpKeys.ada.passphrase;
|
|
81
86
|
const newPassphrase = "newPassphrase";
|
|
82
87
|
await controller.exec(oldPassphrase, newPassphrase);
|
|
@@ -85,7 +90,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
85
90
|
it("Should throw an error if no passphrase is provided.", async () => {
|
|
86
91
|
expect.assertions(2);
|
|
87
92
|
await MockExtension.withConfiguredAccount();
|
|
88
|
-
const controller = new UpdatePrivateKeyController(null, null, defaultApiClientOptions());
|
|
93
|
+
const controller = new UpdatePrivateKeyController(null, null, defaultApiClientOptions(), account);
|
|
89
94
|
|
|
90
95
|
const nullPassphrase = null;
|
|
91
96
|
const stringPassphrase = "stringPassphrase";
|
|
@@ -106,7 +111,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
106
111
|
it("Should throw an error if passphrases are not strings.", async () => {
|
|
107
112
|
expect.assertions(2);
|
|
108
113
|
await MockExtension.withConfiguredAccount();
|
|
109
|
-
const controller = new UpdatePrivateKeyController(null, null, defaultApiClientOptions());
|
|
114
|
+
const controller = new UpdatePrivateKeyController(null, null, defaultApiClientOptions(), account);
|
|
110
115
|
|
|
111
116
|
const notStringPassphrase = {};
|
|
112
117
|
const stringPassphrase = "stringPassphrase";
|
|
@@ -164,7 +169,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
164
169
|
|
|
165
170
|
mockedSaveFile.mockImplementation(async () => {});
|
|
166
171
|
|
|
167
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
172
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
168
173
|
const oldPassphrase = pgpKeys.ada.passphrase;
|
|
169
174
|
await controller.exec(oldPassphrase, newPassphrase);
|
|
170
175
|
});
|
|
@@ -195,7 +200,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
195
200
|
|
|
196
201
|
mockedSaveFile.mockImplementation(() => {});
|
|
197
202
|
|
|
198
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
203
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
199
204
|
await controller.exec(pgpKeys.ada.passphrase, "newPassphrase");
|
|
200
205
|
|
|
201
206
|
expect(GenerateSsoKitService.generateSsoKits).not.toHaveBeenCalled();
|
|
@@ -235,7 +240,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
235
240
|
|
|
236
241
|
mockedSaveFile.mockImplementation(async () => {});
|
|
237
242
|
|
|
238
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
243
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
239
244
|
const oldPassphrase = pgpKeys.ada.passphrase;
|
|
240
245
|
try {
|
|
241
246
|
await controller.exec(oldPassphrase, newPassphrase);
|
|
@@ -281,7 +286,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
281
286
|
|
|
282
287
|
mockedSaveFile.mockImplementation(async () => {});
|
|
283
288
|
|
|
284
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
289
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
285
290
|
const oldPassphrase = pgpKeys.ada.passphrase;
|
|
286
291
|
await controller.exec(oldPassphrase, newPassphrase);
|
|
287
292
|
});
|
|
@@ -320,7 +325,7 @@ describe("UpdatePrivateKeyController", () => {
|
|
|
320
325
|
|
|
321
326
|
mockedSaveFile.mockImplementation(async () => {});
|
|
322
327
|
|
|
323
|
-
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions());
|
|
328
|
+
const controller = new UpdatePrivateKeyController(worker, null, defaultApiClientOptions(), account);
|
|
324
329
|
try {
|
|
325
330
|
await controller.exec("wrong passphrase", newPassphrase);
|
|
326
331
|
} catch (e) {
|
|
@@ -24,11 +24,13 @@ class AccountRecoveryGenerateOrganizationKeyController {
|
|
|
24
24
|
* @param {Worker} worker
|
|
25
25
|
* @param {string} requestId uuid
|
|
26
26
|
* @param {ApiClientOptions} apiClientOptions The api client options.
|
|
27
|
+
* @param {AccountEntity} account The user account.
|
|
27
28
|
*/
|
|
28
|
-
constructor(worker, requestId, apiClientOptions) {
|
|
29
|
+
constructor(worker, requestId, apiClientOptions, account) {
|
|
29
30
|
this.worker = worker;
|
|
30
31
|
this.requestId = requestId;
|
|
31
32
|
this.apiClientOptions = apiClientOptions;
|
|
33
|
+
this.account = account;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
/**
|
|
@@ -54,7 +56,7 @@ class AccountRecoveryGenerateOrganizationKeyController {
|
|
|
54
56
|
async exec(generateGpgKeyPairOptionsDto = {}) {
|
|
55
57
|
generateGpgKeyPairOptionsDto = {
|
|
56
58
|
...generateGpgKeyPairOptionsDto,
|
|
57
|
-
date: await GetGpgKeyCreationDateService.getDate(this.apiClientOptions),
|
|
59
|
+
date: await GetGpgKeyCreationDateService.getDate(this.account, this.apiClientOptions),
|
|
58
60
|
};
|
|
59
61
|
const generateKeyPairOptions =
|
|
60
62
|
GenerateGpgKeyPairOptionsEntity.createForOrkKeyGeneration(generateGpgKeyPairOptionsDto);
|
|
@@ -16,12 +16,29 @@ import AccountRecoveryGenerateOrganizationKeyController from "./accountRecoveryG
|
|
|
16
16
|
import MockExtension from "../../../../../test/mocks/mockExtension";
|
|
17
17
|
import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
|
|
18
18
|
import * as openpgp from "openpgp";
|
|
19
|
+
import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
20
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
21
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
22
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
23
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
19
24
|
|
|
20
25
|
describe("AccountRecoveryGenerateOrganizationKeyController", () => {
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
jest
|
|
28
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
29
|
+
.mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
|
|
30
|
+
});
|
|
31
|
+
|
|
21
32
|
describe("AccountRecoveryGenerateOrganizationKeyController::exec", () => {
|
|
22
33
|
it("Should assert provided generate key pair dto is valid.", async () => {
|
|
23
34
|
await MockExtension.withConfiguredAccount();
|
|
24
|
-
const
|
|
35
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
36
|
+
const controller = new AccountRecoveryGenerateOrganizationKeyController(
|
|
37
|
+
null,
|
|
38
|
+
null,
|
|
39
|
+
defaultApiClientOptions(),
|
|
40
|
+
account,
|
|
41
|
+
);
|
|
25
42
|
const promise = controller.exec();
|
|
26
43
|
|
|
27
44
|
expect.assertions(1);
|
|
@@ -30,7 +47,13 @@ describe("AccountRecoveryGenerateOrganizationKeyController", () => {
|
|
|
30
47
|
|
|
31
48
|
it("Should generate an account recovery organization key pair.", async () => {
|
|
32
49
|
await MockExtension.withConfiguredAccount();
|
|
33
|
-
const
|
|
50
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
51
|
+
const controller = new AccountRecoveryGenerateOrganizationKeyController(
|
|
52
|
+
null,
|
|
53
|
+
null,
|
|
54
|
+
defaultApiClientOptions(),
|
|
55
|
+
account,
|
|
56
|
+
);
|
|
34
57
|
const generateKeyPairDto = {
|
|
35
58
|
name: "key name",
|
|
36
59
|
email: "key@email.com",
|
package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.js
CHANGED
|
@@ -38,7 +38,7 @@ class AccountRecoveryLoginController {
|
|
|
38
38
|
this.worker = worker;
|
|
39
39
|
this.requestId = requestId;
|
|
40
40
|
this.authVerifyLoginChallengeService = new AuthVerifyLoginChallengeService(apiClientOptions);
|
|
41
|
-
this.updateSsoCredentialsService = new UpdateSsoCredentialsService(apiClientOptions);
|
|
41
|
+
this.updateSsoCredentialsService = new UpdateSsoCredentialsService(apiClientOptions, account);
|
|
42
42
|
this.checkPassphraseService = new CheckPassphraseService(new Keyring());
|
|
43
43
|
this.userRememberMeLatestChoiceLocalStorage = new UserRememberMeLatestChoiceLocalStorage(account);
|
|
44
44
|
}
|
package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.test.js
CHANGED
|
@@ -20,7 +20,9 @@ import SsoDataStorage from "../../service/indexedDB_storage/ssoDataStorage";
|
|
|
20
20
|
import GenerateSsoKitService from "../../service/sso/generateSsoKitService";
|
|
21
21
|
import AccountRecoveryLoginController from "./accountRecoveryLoginController";
|
|
22
22
|
import { enableFetchMocks } from "jest-fetch-mock";
|
|
23
|
-
import {
|
|
23
|
+
import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
24
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
25
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
24
26
|
import { mockApiResponse } from "../../../../../test/mocks/mockApiResponse";
|
|
25
27
|
import { defaultEmptySettings, withAzureSsoSettings } from "../sso/getCurrentSsoSettingsController.test.data";
|
|
26
28
|
import { clientSsoKit } from "../../model/entity/sso/ssoKitClientPart.test.data";
|
|
@@ -38,19 +40,22 @@ beforeEach(async () => {
|
|
|
38
40
|
enableFetchMocks();
|
|
39
41
|
jest.clearAllMocks();
|
|
40
42
|
await MockExtension.withConfiguredAccount();
|
|
43
|
+
jest
|
|
44
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
45
|
+
.mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
|
|
41
46
|
});
|
|
42
47
|
|
|
43
48
|
describe("AccountRecoveryLoginController", () => {
|
|
44
49
|
describe("AccountRecoveryLoginController::exec", () => {
|
|
45
50
|
const passphrase = "ada@passbolt.com";
|
|
46
51
|
const mockOrganisationSettings = (withSsoEnabled = true) => {
|
|
47
|
-
const organizationSettings =
|
|
52
|
+
const organizationSettings = anonymousSiteSettings();
|
|
48
53
|
organizationSettings.passbolt.plugins.sso = {
|
|
49
54
|
enabled: withSsoEnabled,
|
|
50
55
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
jest
|
|
57
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
58
|
+
.mockImplementation(() => new SiteSettingsEntity(organizationSettings));
|
|
54
59
|
};
|
|
55
60
|
|
|
56
61
|
const mockOrganisationSettingsSsoSettings = (ssoSettings) => {
|
|
@@ -40,7 +40,7 @@ class RecoverAccountController {
|
|
|
40
40
|
this.accountRecoveryModel = new AccountRecoveryModel(apiClientOptions);
|
|
41
41
|
this.setupModel = new SetupModel(apiClientOptions);
|
|
42
42
|
this.accountModel = new AccountModel(apiClientOptions);
|
|
43
|
-
this.
|
|
43
|
+
this.apiClientOptions = apiClientOptions;
|
|
44
44
|
// The temporary account stored in the session storage
|
|
45
45
|
this.temporaryAccount = null;
|
|
46
46
|
}
|
|
@@ -210,7 +210,11 @@ class RecoverAccountController {
|
|
|
210
210
|
* The server part is kept as the user needs to be logged in to request a DELETE on the API.
|
|
211
211
|
*/
|
|
212
212
|
await SsoDataStorage.flush();
|
|
213
|
-
|
|
213
|
+
const updateSsoCredentialsService = new UpdateSsoCredentialsService(
|
|
214
|
+
this.apiClientOptions,
|
|
215
|
+
this.temporaryAccount.account,
|
|
216
|
+
);
|
|
217
|
+
await updateSsoCredentialsService.updateSsoKitIfNeeded(passphrase);
|
|
214
218
|
}
|
|
215
219
|
}
|
|
216
220
|
|
|
@@ -30,12 +30,17 @@ import InvalidMasterPasswordError from "../../error/invalidMasterPasswordError";
|
|
|
30
30
|
import { OpenpgpAssertion } from "../../utils/openpgp/openpgpAssertions";
|
|
31
31
|
import SsoDataStorage from "../../service/indexedDB_storage/ssoDataStorage";
|
|
32
32
|
import GenerateSsoKitService from "../../service/sso/generateSsoKitService";
|
|
33
|
-
import {
|
|
33
|
+
import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
34
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
35
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
34
36
|
import AccountTemporarySessionStorageService from "../../service/sessionStorage/accountTemporarySessionStorageService";
|
|
35
37
|
|
|
36
38
|
beforeEach(() => {
|
|
37
39
|
enableFetchMocks();
|
|
38
40
|
jest.clearAllMocks();
|
|
41
|
+
jest
|
|
42
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
43
|
+
.mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
|
|
39
44
|
});
|
|
40
45
|
|
|
41
46
|
describe("RecoverAccountController", () => {
|
|
@@ -48,11 +53,13 @@ describe("RecoverAccountController", () => {
|
|
|
48
53
|
const passphrase = pgpKeys.account_recovery_request.passphrase;
|
|
49
54
|
|
|
50
55
|
const mockOrganisationSettings = (isSsoEnabled) => {
|
|
51
|
-
const organizationSettings =
|
|
56
|
+
const organizationSettings = anonymousSiteSettings();
|
|
52
57
|
if (isSsoEnabled) {
|
|
53
58
|
organizationSettings.passbolt.plugins.sso = { enabled: true };
|
|
54
59
|
}
|
|
55
|
-
|
|
60
|
+
jest
|
|
61
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
62
|
+
.mockImplementation(() => new SiteSettingsEntity(organizationSettings));
|
|
56
63
|
};
|
|
57
64
|
|
|
58
65
|
it("Should perform the account recovery.", async () => {
|
|
@@ -198,7 +205,7 @@ describe("RecoverAccountController", () => {
|
|
|
198
205
|
|
|
199
206
|
expect.assertions(3);
|
|
200
207
|
const expetedProvider = "azure";
|
|
201
|
-
const organizationSettings =
|
|
208
|
+
const organizationSettings = anonymousSiteSettings();
|
|
202
209
|
organizationSettings.passbolt.plugins.sso = { enabled: true };
|
|
203
210
|
|
|
204
211
|
// Mock API fetch account recovery request get response.
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
export const userLoggedOutAuthStatus = () => ({
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
is_authenticated: false,
|
|
17
|
+
is_mfa_authenticated: true,
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
export const userLoggedInAuthStatus = () => ({
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
is_authenticated: true,
|
|
22
|
+
is_mfa_authenticated: true,
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
export const userRequireMfaAuthStatus = () => ({
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
is_authenticated: true,
|
|
27
|
+
is_mfa_authenticated: false,
|
|
28
28
|
});
|
|
@@ -14,10 +14,18 @@
|
|
|
14
14
|
import CheckAuthStatusService from "../../service/auth/checkAuthStatusService";
|
|
15
15
|
|
|
16
16
|
class AuthCheckStatusController {
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* AuthCheckStatusController Constructor
|
|
19
|
+
*
|
|
20
|
+
* @param {Worker} worker
|
|
21
|
+
* @param {string} requestId
|
|
22
|
+
* @param {ApiClientOptions} apiClientOptions
|
|
23
|
+
* @param {AccountEntity} account
|
|
24
|
+
*/
|
|
25
|
+
constructor(worker, requestId, apiClientOptions, account) {
|
|
18
26
|
this.worker = worker;
|
|
19
27
|
this.requestId = requestId;
|
|
20
|
-
this.checkAuthStatusService = new CheckAuthStatusService();
|
|
28
|
+
this.checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
/**
|
|
@@ -38,7 +46,7 @@ class AuthCheckStatusController {
|
|
|
38
46
|
/**
|
|
39
47
|
* Controller executor.
|
|
40
48
|
* @param {boolean} flushCache should the cache be flushed before
|
|
41
|
-
* @returns {Promise<
|
|
49
|
+
* @returns {Promise<OnlineSessionEntity>}
|
|
42
50
|
*/
|
|
43
51
|
async exec(flushCache) {
|
|
44
52
|
return await this.checkAuthStatusService.checkAuthStatus(flushCache);
|
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import MfaAuthenticationRequiredError from "../../error/mfaAuthenticationRequiredError";
|
|
16
|
-
import AuthenticationStatusService from "../../service/authenticationStatusService";
|
|
17
|
-
import AuthStatusLocalStorage from "../../service/local_storage/authStatusLocalStorage";
|
|
18
16
|
import AuthCheckStatusController from "./authCheckStatusController";
|
|
17
|
+
import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
|
|
18
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
19
|
+
import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
|
|
20
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
19
21
|
|
|
20
22
|
beforeEach(() => {
|
|
21
23
|
jest.clearAllMocks();
|
|
@@ -24,73 +26,101 @@ beforeEach(() => {
|
|
|
24
26
|
describe("AuthCheckStatusController", () => {
|
|
25
27
|
it("should return the auth status matching the unauthanticated state", async () => {
|
|
26
28
|
expect.assertions(3);
|
|
27
|
-
jest.spyOn(AuthStatusLocalStorage, "get").mockImplementation(() => undefined);
|
|
28
|
-
jest.spyOn(AuthStatusLocalStorage, "flush");
|
|
29
|
-
jest.spyOn(AuthenticationStatusService, "isAuthenticated").mockImplementation(() => false);
|
|
30
29
|
|
|
31
|
-
const
|
|
30
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
31
|
+
const controller = new AuthCheckStatusController(null, null, defaultApiClientOptions(), account);
|
|
32
|
+
|
|
33
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "get").mockImplementation(() => undefined);
|
|
34
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "flush");
|
|
35
|
+
jest
|
|
36
|
+
.spyOn(controller.checkAuthStatusService.authenticationStatusService, "isAuthenticated")
|
|
37
|
+
.mockImplementation(() => false);
|
|
38
|
+
|
|
32
39
|
const authStatus = await controller.exec(true);
|
|
33
40
|
|
|
34
|
-
expect(
|
|
35
|
-
expect(
|
|
36
|
-
expect(authStatus).toStrictEqual(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.get).toHaveBeenCalledTimes(1);
|
|
42
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.flush).not.toHaveBeenCalled();
|
|
43
|
+
expect(authStatus).toStrictEqual(
|
|
44
|
+
new OnlineSessionEntity({
|
|
45
|
+
is_authenticated: false,
|
|
46
|
+
is_mfa_authenticated: true,
|
|
47
|
+
}),
|
|
48
|
+
);
|
|
40
49
|
});
|
|
41
50
|
|
|
42
51
|
it("expects the user to be fully authenticated", async () => {
|
|
43
52
|
expect.assertions(3);
|
|
44
|
-
jest.spyOn(AuthStatusLocalStorage, "get").mockImplementation(() => undefined);
|
|
45
|
-
jest.spyOn(AuthStatusLocalStorage, "flush");
|
|
46
|
-
jest.spyOn(AuthenticationStatusService, "isAuthenticated").mockImplementation(() => true);
|
|
47
53
|
|
|
48
|
-
const
|
|
54
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
55
|
+
const controller = new AuthCheckStatusController(null, null, defaultApiClientOptions(), account);
|
|
56
|
+
|
|
57
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "get").mockImplementation(() => undefined);
|
|
58
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "flush");
|
|
59
|
+
jest
|
|
60
|
+
.spyOn(controller.checkAuthStatusService.authenticationStatusService, "isAuthenticated")
|
|
61
|
+
.mockImplementation(() => true);
|
|
62
|
+
|
|
49
63
|
const authStatus = await controller.exec(true);
|
|
50
64
|
|
|
51
|
-
expect(
|
|
52
|
-
expect(
|
|
53
|
-
expect(authStatus).toStrictEqual(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.get).toHaveBeenCalledTimes(1);
|
|
66
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.flush).not.toHaveBeenCalled();
|
|
67
|
+
expect(authStatus).toStrictEqual(
|
|
68
|
+
new OnlineSessionEntity({
|
|
69
|
+
is_authenticated: true,
|
|
70
|
+
is_mfa_authenticated: true,
|
|
71
|
+
}),
|
|
72
|
+
);
|
|
57
73
|
});
|
|
58
74
|
|
|
59
75
|
it("expects the user to require MFA authentication", async () => {
|
|
60
76
|
expect.assertions(3);
|
|
61
|
-
jest.spyOn(AuthStatusLocalStorage, "get").mockImplementation(() => undefined);
|
|
62
|
-
jest.spyOn(AuthStatusLocalStorage, "flush");
|
|
63
|
-
jest.spyOn(AuthenticationStatusService, "isAuthenticated").mockImplementation(() => {
|
|
64
|
-
throw new MfaAuthenticationRequiredError();
|
|
65
|
-
});
|
|
66
77
|
|
|
67
|
-
const
|
|
78
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
79
|
+
const controller = new AuthCheckStatusController(null, null, defaultApiClientOptions(), account);
|
|
80
|
+
|
|
81
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "get").mockImplementation(() => undefined);
|
|
82
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "flush");
|
|
83
|
+
jest
|
|
84
|
+
.spyOn(controller.checkAuthStatusService.authenticationStatusService, "isAuthenticated")
|
|
85
|
+
.mockImplementation(() => {
|
|
86
|
+
throw new MfaAuthenticationRequiredError();
|
|
87
|
+
});
|
|
88
|
+
|
|
68
89
|
const authStatus = await controller.exec(true);
|
|
69
90
|
|
|
70
|
-
expect(
|
|
71
|
-
expect(
|
|
72
|
-
expect(authStatus).toStrictEqual(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
91
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.get).toHaveBeenCalledTimes(1);
|
|
92
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.flush).not.toHaveBeenCalled();
|
|
93
|
+
expect(authStatus).toStrictEqual(
|
|
94
|
+
new OnlineSessionEntity({
|
|
95
|
+
is_authenticated: true,
|
|
96
|
+
is_mfa_authenticated: false,
|
|
97
|
+
}),
|
|
98
|
+
);
|
|
76
99
|
});
|
|
77
100
|
|
|
78
101
|
it("should return the auth status from the local storage", async () => {
|
|
79
102
|
expect.assertions(4);
|
|
80
103
|
const expectedAuthStatus = {
|
|
81
|
-
|
|
82
|
-
|
|
104
|
+
is_authenticated: false,
|
|
105
|
+
is_mfa_authenticated: true,
|
|
83
106
|
};
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
107
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
108
|
+
|
|
109
|
+
const controller = new AuthCheckStatusController(null, null, defaultApiClientOptions(), account);
|
|
110
|
+
|
|
111
|
+
jest
|
|
112
|
+
.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "get")
|
|
113
|
+
.mockImplementation(() => expectedAuthStatus);
|
|
114
|
+
jest.spyOn(controller.checkAuthStatusService.activeSessionLocalStorage, "flush");
|
|
115
|
+
jest
|
|
116
|
+
.spyOn(controller.checkAuthStatusService.authenticationStatusService, "isAuthenticated")
|
|
117
|
+
.mockImplementation(() => true);
|
|
87
118
|
|
|
88
|
-
const controller = new AuthCheckStatusController();
|
|
89
119
|
const authStatus = await controller.exec(false);
|
|
90
120
|
|
|
91
|
-
expect(
|
|
92
|
-
expect(
|
|
93
|
-
expect(
|
|
94
|
-
expect(authStatus).toStrictEqual(expectedAuthStatus);
|
|
121
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.get).toHaveBeenCalledTimes(1);
|
|
122
|
+
expect(controller.checkAuthStatusService.activeSessionLocalStorage.flush).not.toHaveBeenCalled();
|
|
123
|
+
expect(controller.checkAuthStatusService.authenticationStatusService.isAuthenticated).not.toHaveBeenCalled();
|
|
124
|
+
expect(authStatus.toDto()).toStrictEqual(expectedAuthStatus);
|
|
95
125
|
});
|
|
96
126
|
});
|
|
@@ -14,10 +14,18 @@
|
|
|
14
14
|
import CheckAuthStatusService from "../../service/auth/checkAuthStatusService";
|
|
15
15
|
|
|
16
16
|
class AuthIsMfaRequiredController {
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* AuthCheckStatusController Constructor
|
|
19
|
+
*
|
|
20
|
+
* @param {Worker} worker
|
|
21
|
+
* @param {string} requestId
|
|
22
|
+
* @param {ApiClientOptions} apiClientOptions
|
|
23
|
+
* @param {AccountEntity} account
|
|
24
|
+
*/
|
|
25
|
+
constructor(worker, requestId, apiClientOptions, account) {
|
|
18
26
|
this.worker = worker;
|
|
19
27
|
this.requestId = requestId;
|
|
20
|
-
this.checkAuthStatusService = new CheckAuthStatusService();
|
|
28
|
+
this.checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
/**
|
|
@@ -38,7 +46,7 @@ class AuthIsMfaRequiredController {
|
|
|
38
46
|
*/
|
|
39
47
|
async exec() {
|
|
40
48
|
const authStatus = await this.checkAuthStatusService.checkAuthStatus(true);
|
|
41
|
-
return authStatus.
|
|
49
|
+
return !authStatus.isMfaAuthenticated;
|
|
42
50
|
}
|
|
43
51
|
}
|
|
44
52
|
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
import { userLoggedInAuthStatus, userLoggedOutAuthStatus, userRequireMfaAuthStatus } from "./authCheckStatus.test.data";
|
|
16
16
|
import AuthIsMfaRequiredController from "./authIsMfaRequiredController";
|
|
17
|
+
import AccountEntity from "../../model/entity/account/accountEntity";
|
|
18
|
+
import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
|
|
19
|
+
import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
|
|
20
|
+
import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
|
|
17
21
|
|
|
18
22
|
beforeEach(() => {
|
|
19
23
|
jest.clearAllMocks();
|
|
@@ -23,36 +27,41 @@ describe("AuthIsMfaRequiredController", () => {
|
|
|
23
27
|
it("should return true if the user needs to authenticate with MFA", async () => {
|
|
24
28
|
expect.assertions(1);
|
|
25
29
|
|
|
26
|
-
const
|
|
30
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
31
|
+
const controller = new AuthIsMfaRequiredController(null, null, defaultApiClientOptions(), account);
|
|
27
32
|
jest
|
|
28
33
|
.spyOn(controller.checkAuthStatusService, "checkAuthStatus")
|
|
29
|
-
.mockImplementation(async () => userRequireMfaAuthStatus());
|
|
34
|
+
.mockImplementation(async () => new OnlineSessionEntity(userRequireMfaAuthStatus()));
|
|
30
35
|
|
|
31
36
|
const isMfaRequired = await controller.exec();
|
|
32
|
-
expect(isMfaRequired).
|
|
37
|
+
expect(isMfaRequired).toBeTruthy();
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
it("should return false if the user does not need to authenticate with MFA", async () => {
|
|
36
41
|
expect.assertions(1);
|
|
37
42
|
|
|
38
|
-
const
|
|
43
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
44
|
+
const controller = new AuthIsMfaRequiredController(null, null, defaultApiClientOptions(), account);
|
|
39
45
|
jest
|
|
40
46
|
.spyOn(controller.checkAuthStatusService, "checkAuthStatus")
|
|
41
|
-
.mockImplementation(async () => userLoggedInAuthStatus());
|
|
47
|
+
.mockImplementation(async () => new OnlineSessionEntity(userLoggedInAuthStatus()));
|
|
42
48
|
|
|
43
49
|
const isMfaRequired = await controller.exec();
|
|
44
|
-
expect(isMfaRequired).
|
|
50
|
+
expect(isMfaRequired).toBeFalsy();
|
|
45
51
|
});
|
|
46
52
|
|
|
47
53
|
it("should return the MFA status part of the authentication status", async () => {
|
|
48
54
|
expect.assertions(1);
|
|
49
55
|
|
|
50
|
-
const
|
|
56
|
+
const account = new AccountEntity(defaultAccountDto());
|
|
57
|
+
const controller = new AuthIsMfaRequiredController(null, null, defaultApiClientOptions(), account);
|
|
51
58
|
|
|
52
59
|
const authStatus = userLoggedOutAuthStatus();
|
|
53
|
-
jest
|
|
60
|
+
jest
|
|
61
|
+
.spyOn(controller.checkAuthStatusService, "checkAuthStatus")
|
|
62
|
+
.mockImplementation(async () => new OnlineSessionEntity(authStatus));
|
|
54
63
|
|
|
55
64
|
const isMfaRequired = await controller.exec();
|
|
56
|
-
expect(isMfaRequired).toStrictEqual(authStatus.
|
|
65
|
+
expect(isMfaRequired).toStrictEqual(!authStatus.is_mfa_authenticated);
|
|
57
66
|
});
|
|
58
67
|
});
|
|
@@ -35,7 +35,7 @@ class AuthLoginController {
|
|
|
35
35
|
this.requestId = requestId;
|
|
36
36
|
this.account = account;
|
|
37
37
|
this.authVerifyLoginChallengeService = new AuthVerifyLoginChallengeService(apiClientOptions);
|
|
38
|
-
this.updateSsoCredentialsService = new UpdateSsoCredentialsService(apiClientOptions);
|
|
38
|
+
this.updateSsoCredentialsService = new UpdateSsoCredentialsService(apiClientOptions, account);
|
|
39
39
|
this.checkPassphraseService = new CheckPassphraseService(new Keyring());
|
|
40
40
|
this.userRememberMeLatestChoiceLocalStorage = new UserRememberMeLatestChoiceLocalStorage(account);
|
|
41
41
|
}
|
|
@@ -20,7 +20,9 @@ import SsoDataStorage from "../../service/indexedDB_storage/ssoDataStorage";
|
|
|
20
20
|
import GenerateSsoKitService from "../../service/sso/generateSsoKitService";
|
|
21
21
|
import AuthLoginController from "./authLoginController";
|
|
22
22
|
import { enableFetchMocks } from "jest-fetch-mock";
|
|
23
|
-
import {
|
|
23
|
+
import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
|
|
24
|
+
import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
|
|
25
|
+
import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
|
|
24
26
|
import { mockApiResponse } from "../../../../../test/mocks/mockApiResponse";
|
|
25
27
|
import { defaultEmptySettings, withAzureSsoSettings } from "../sso/getCurrentSsoSettingsController.test.data";
|
|
26
28
|
import { clientSsoKit } from "../../model/entity/sso/ssoKitClientPart.test.data";
|
|
@@ -33,19 +35,22 @@ beforeEach(async () => {
|
|
|
33
35
|
enableFetchMocks();
|
|
34
36
|
jest.clearAllMocks();
|
|
35
37
|
await MockExtension.withConfiguredAccount();
|
|
38
|
+
jest
|
|
39
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
40
|
+
.mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
|
|
36
41
|
});
|
|
37
42
|
|
|
38
43
|
describe("AuthLoginController", () => {
|
|
39
44
|
describe("AuthLoginController::exec", () => {
|
|
40
45
|
const passphrase = "ada@passbolt.com";
|
|
41
46
|
const mockOrganisationSettings = (withSsoEnabled = true) => {
|
|
42
|
-
const organizationSettings =
|
|
47
|
+
const organizationSettings = anonymousSiteSettings();
|
|
43
48
|
organizationSettings.passbolt.plugins.sso = {
|
|
44
49
|
enabled: withSsoEnabled,
|
|
45
50
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
jest
|
|
52
|
+
.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
|
|
53
|
+
.mockImplementation(() => new SiteSettingsEntity(organizationSettings));
|
|
49
54
|
};
|
|
50
55
|
|
|
51
56
|
const mockOrganisationSettingsSsoSettings = (ssoSettings) => {
|