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.
Files changed (282) hide show
  1. package/.devcontainer/Dockerfile +33 -3
  2. package/.devcontainer/devcontainer-lock.json +9 -0
  3. package/.devcontainer/post-start.sh +1 -2
  4. package/.github/workflows/codeql-analysis.yml +2 -1
  5. package/.github/workflows/release_candidate.yaml +3 -1
  6. package/.gitlab-ci.yml +1 -0
  7. package/CHANGELOG.md +202 -70
  8. package/CODEOWNERS +2 -0
  9. package/RELEASE_NOTES.md +4 -2
  10. package/package.json +9 -7
  11. package/renovate.json +6 -0
  12. package/src/all/background_page/controller/InformMenuController/InformMenuController.js +2 -5
  13. package/src/all/background_page/controller/InformMenuController/InformMenuController.test.js +31 -1
  14. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.js +1 -1
  15. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.test.js +6 -14
  16. package/src/all/background_page/controller/account/updatePrivateKeyController.js +7 -5
  17. package/src/all/background_page/controller/account/updatePrivateKeyController.test.js +18 -13
  18. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.js +4 -2
  19. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.test.js +25 -2
  20. package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.js +1 -1
  21. package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.test.js +10 -5
  22. package/src/all/background_page/controller/accountRecovery/recoverAccountController.js +6 -2
  23. package/src/all/background_page/controller/accountRecovery/recoverAccountController.test.js +11 -4
  24. package/src/all/background_page/controller/auth/authCheckStatus.test.data.js +6 -6
  25. package/src/all/background_page/controller/auth/authCheckStatusController.js +11 -3
  26. package/src/all/background_page/controller/auth/authCheckStatusController.test.js +74 -44
  27. package/src/all/background_page/controller/auth/authIsMfaRequiredController.js +11 -3
  28. package/src/all/background_page/controller/auth/authIsMfaRequiredController.test.js +18 -9
  29. package/src/all/background_page/controller/auth/authLoginController.js +1 -1
  30. package/src/all/background_page/controller/auth/authLoginController.test.js +10 -5
  31. package/src/all/background_page/controller/autofill/AutofillController.js +3 -3
  32. package/src/all/background_page/controller/autofill/AutofillController.test.js +20 -12
  33. package/src/all/background_page/controller/export/exportResourcesFileController.js +6 -3
  34. package/src/all/background_page/controller/export/exportResourcesFileController.test.js +34 -4
  35. package/src/all/background_page/controller/extension/onExtensionInstalledController.js +8 -2
  36. package/src/all/background_page/controller/extension/onExtensionInstalledController.test.js +5 -1
  37. package/src/all/background_page/controller/group/{getOrFindGroupsController.js → findGroupsByIdsForShareController.js} +9 -10
  38. package/src/all/background_page/controller/group/{getOrFindGroupsController.test.js → findGroupsByIdsForShareController.test.js} +8 -8
  39. package/src/all/background_page/controller/group/groupUpdateController.test.js +1 -0
  40. package/src/all/background_page/controller/import/importResourcesFileController.test.js +8 -1
  41. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.js +2 -2
  42. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.test.js +7 -4
  43. package/src/all/background_page/controller/locale/getLocaleController.js +3 -2
  44. package/src/all/background_page/controller/metadata/findMetadataTypesSettingsController.test.js +9 -15
  45. package/src/all/background_page/controller/metadata/getMetadataTypesSettingsController.test.js +9 -15
  46. package/src/all/background_page/controller/metadata/getOrFindMetadataKeysSettingsController.test.js +12 -22
  47. package/src/all/background_page/controller/metadata/shareMetadataKeyPrivateController.test.js +14 -2
  48. package/src/all/background_page/controller/move/moveFolderController.test.js +8 -0
  49. package/src/all/background_page/controller/move/moveResourcesController.test.js +8 -0
  50. package/src/all/background_page/controller/passwordExpiry/getOrFindPasswordExpirySettingsController.test.js +13 -8
  51. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.js +4 -4
  52. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.test.js +8 -10
  53. package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.js +62 -0
  54. package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.test.js +71 -0
  55. package/src/all/background_page/controller/recover/generateRecoverAccountRecoveryRequestKeyController.js +1 -1
  56. package/src/all/background_page/controller/resource/resourceCreateController.js +11 -4
  57. package/src/all/background_page/controller/resource/resourceCreateController.test.js +12 -1
  58. package/src/all/background_page/controller/resource/resourceUpdateController.js +11 -4
  59. package/src/all/background_page/controller/resource/resourceUpdateController.test.js +35 -2
  60. package/src/all/background_page/controller/resourceType/getResourceTypesController.js +5 -4
  61. package/src/all/background_page/controller/resourceType/getResourceTypesController.test.js +5 -2
  62. package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.js +3 -2
  63. package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.test.js +16 -3
  64. package/src/all/background_page/controller/secret/findSecretByResourceIdController.js +3 -3
  65. package/src/all/background_page/controller/secret/findSecretByResourceIdController.test.js +24 -0
  66. package/src/all/background_page/controller/secretRevision/findResourceSecretRevisionsForDisplayController.js +2 -1
  67. package/src/all/background_page/controller/setup/generateSetupKeyPairController.js +6 -3
  68. package/src/all/background_page/controller/setup/generateSetupKeyPairController.test.js +11 -1
  69. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.js +1 -1
  70. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.test.js +14 -18
  71. package/src/all/background_page/controller/setup/setSetupLocaleController.js +1 -1
  72. package/src/all/background_page/controller/setup/setSetupLocaleController.test.js +6 -10
  73. package/src/all/background_page/controller/setup/signInSetupController.js +6 -2
  74. package/src/all/background_page/controller/setup/signInSetupController.test.js +10 -5
  75. package/src/all/background_page/controller/share/shareOneFolderController.test.js +8 -0
  76. package/src/all/background_page/controller/share/shareResourcesController.test.js +9 -1
  77. package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.js +59 -0
  78. package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.test.js +150 -0
  79. package/src/all/background_page/controller/{group/getOrFindGroupsUsersController.js → user/getOrFindAllUsersController.js} +12 -17
  80. package/src/all/background_page/controller/user/getOrFindAllUsersController.test.js +55 -0
  81. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.js +3 -3
  82. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.test.js +19 -15
  83. package/src/all/background_page/controller/user/updateUserLocalStorageController.test.js +8 -5
  84. package/src/all/background_page/event/accountRecoveryEvents.js +4 -4
  85. package/src/all/background_page/event/appEvents.js +7 -2
  86. package/src/all/background_page/event/authEvents.js +2 -2
  87. package/src/all/background_page/event/groupEvents.js +4 -17
  88. package/src/all/background_page/event/informCallToActionEvents.js +1 -1
  89. package/src/all/background_page/event/informMenuEvents.js +1 -1
  90. package/src/all/background_page/event/localeEvents.js +4 -3
  91. package/src/all/background_page/event/permissionEvents.js +13 -0
  92. package/src/all/background_page/event/recoverEvents.js +4 -4
  93. package/src/all/background_page/event/resourceEvents.js +6 -15
  94. package/src/all/background_page/event/resourceTypeEvents.js +4 -3
  95. package/src/all/background_page/event/setupEvents.js +4 -4
  96. package/src/all/background_page/event/siteSettingsEvents.js +29 -0
  97. package/src/all/background_page/event/userEvents.js +4 -8
  98. package/src/all/background_page/index.js +0 -37
  99. package/src/all/background_page/model/entity/account/abstractAccountEntity.js +2 -2
  100. package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.js +7 -17
  101. package/src/all/background_page/model/entity/account/accountEntity.js +7 -14
  102. package/src/all/background_page/model/entity/account/accountKitEntity.js +1 -2
  103. package/src/all/background_page/model/entity/account/accountRecoverEntity.js +4 -14
  104. package/src/all/background_page/model/entity/account/accountSetupEntity.js +4 -14
  105. package/src/all/background_page/model/entity/account/accountTemporaryEntity.js +2 -5
  106. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.test.js +5 -5
  107. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.js +49 -0
  108. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.data.js +23 -0
  109. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.js +51 -0
  110. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.js → siteSettings/siteSettingsEntity.js} +17 -24
  111. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.data.js → siteSettings/siteSettingsEntity.test.data.js} +9 -9
  112. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.js → siteSettings/siteSettingsEntity.test.js} +30 -39
  113. package/src/all/background_page/model/entity/user/userEntity.test.js +6 -6
  114. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.js +40 -3
  115. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.test.js +122 -0
  116. package/src/all/background_page/model/import/resources/resourcesKdbxImportParser.js +1 -1
  117. package/src/all/background_page/model/locale/localeModel.js +13 -8
  118. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.js +6 -6
  119. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.test.js +3 -2
  120. package/src/all/background_page/model/resource/resourceModel.js +4 -4
  121. package/src/all/background_page/model/user/userModel.js +7 -28
  122. package/src/all/background_page/model/user/userModel.test.js +51 -99
  123. package/src/all/background_page/pagemod/appBootstrapPagemod.js +4 -1
  124. package/src/all/background_page/pagemod/appBootstrapPagemod.test.js +5 -2
  125. package/src/all/background_page/pagemod/appPagemod.js +32 -6
  126. package/src/all/background_page/pagemod/appPagemod.test.js +22 -10
  127. package/src/all/background_page/pagemod/authPagemod.js +2 -10
  128. package/src/all/background_page/pagemod/authPagemod.test.js +4 -4
  129. package/src/all/background_page/pagemod/pagemodManager.test.js +5 -2
  130. package/src/all/background_page/pagemod/quickAccessPagemod.js +2 -2
  131. package/src/all/background_page/pagemod/quickAccessPagemod.test.js +4 -4
  132. package/src/all/background_page/pagemod/recoverPagemod.js +2 -2
  133. package/src/all/background_page/pagemod/recoverPagemod.test.js +6 -0
  134. package/src/all/background_page/pagemod/setupPagemod.js +2 -2
  135. package/src/all/background_page/pagemod/setupPagemod.test.js +6 -0
  136. package/src/all/background_page/pagemod/webIntegrationPagemod.js +21 -2
  137. package/src/all/background_page/pagemod/webIntegrationPagemod.test.js +16 -25
  138. package/src/all/background_page/service/account/getActiveAccountService.js +2 -3
  139. package/src/all/background_page/service/account/getLegacyAccountService.js +3 -14
  140. package/src/all/background_page/service/account/updateSsoCredentialsService.js +9 -5
  141. package/src/all/background_page/service/api/group/groupApiService.js +9 -16
  142. package/src/all/background_page/service/api/group/groupApiService.test.js +59 -26
  143. package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.js +46 -0
  144. package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.test.js +63 -0
  145. package/src/all/background_page/service/auth/checkAuthStatusService.js +27 -14
  146. package/src/all/background_page/service/auth/checkAuthStatusService.test.js +80 -62
  147. package/src/all/background_page/service/auth/postLoginService.js +3 -3
  148. package/src/all/background_page/service/auth/postLoginService.test.js +4 -4
  149. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.js +5 -1
  150. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.test.js +14 -8
  151. package/src/all/background_page/service/authenticationStatusService.js +13 -18
  152. package/src/all/background_page/service/authenticationStatusService.test.js +9 -6
  153. package/src/all/background_page/service/crypto/generateGpgKeyPairService.test.js +5 -5
  154. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.js +7 -6
  155. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.test.js +10 -7
  156. package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.js +7 -2
  157. package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.test.js +5 -5
  158. package/src/all/background_page/service/group/findGroupsService.js +42 -1
  159. package/src/all/background_page/service/group/findGroupsService.test.js +82 -0
  160. package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.js +82 -0
  161. package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.test.js +102 -0
  162. package/src/all/background_page/service/group/groupUpdateService.js +49 -78
  163. package/src/all/background_page/service/group/groupUpdateService.test.js +136 -0
  164. package/src/all/background_page/service/localStorage/localStorageService.js +8 -6
  165. package/src/all/background_page/service/localStorage/localStorageService.test.js +33 -15
  166. package/src/all/background_page/service/local_storage/abstractLocalStorage.js +193 -0
  167. package/src/all/background_page/service/local_storage/abstractLocalStorage.test.data.js +45 -0
  168. package/src/all/background_page/service/local_storage/abstractLocalStorage.test.js +271 -0
  169. package/src/all/background_page/service/local_storage/activeSessionLocalStorage.js +105 -0
  170. package/src/all/background_page/service/local_storage/activeSessionLocalStorage.test.js +153 -0
  171. package/src/all/background_page/service/local_storage/rbacLocalStorage.js +10 -82
  172. package/src/all/background_page/service/local_storage/rbacLocalStorage.test.js +8 -8
  173. package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.js +10 -43
  174. package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.test.js +68 -0
  175. package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.js +104 -0
  176. package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.test.js +114 -0
  177. package/src/all/background_page/service/local_storage/userMeLocalStorage.js +50 -0
  178. package/src/all/background_page/service/{sessionStorage/userMeSessionStorageService.test.js → local_storage/userMeLocalStorage.test.js} +55 -36
  179. package/src/all/background_page/service/metadata/encryptMetadataService.js +3 -3
  180. package/src/all/background_page/service/metadata/encryptMetadataService.test.js +11 -11
  181. package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.js +4 -4
  182. package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.test.js +18 -16
  183. package/src/all/background_page/service/metadata/getOrFindMetadataSettingsService.test.js +6 -8
  184. package/src/all/background_page/service/metadata/rotateMetadata/rotateResourcesMetadataKeyService.test.js +4 -4
  185. package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.js +3 -3
  186. package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.test.js +1 -1
  187. package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.js +4 -4
  188. package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.test.js +9 -7
  189. package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.js +4 -4
  190. package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.test.js +6 -6
  191. package/src/all/background_page/service/rbac/findAndUpdateRbacsLocalStorageService.js +2 -2
  192. package/src/all/background_page/service/rbac/getOrFindRbacService.js +1 -1
  193. package/src/all/background_page/service/resource/create/resourceCreateService.js +41 -51
  194. package/src/all/background_page/service/resource/create/resourceCreateService.test.js +100 -98
  195. package/src/all/background_page/service/resource/export/exportResourcesService.js +7 -7
  196. package/src/all/background_page/service/resource/findAndUpdateResourcesLocalStorageService.js +4 -4
  197. package/src/all/background_page/service/resource/findResourcesService.js +13 -16
  198. package/src/all/background_page/service/resource/findResourcesService.test.js +12 -11
  199. package/src/all/background_page/service/resource/getOrFindResourcesService.js +3 -3
  200. package/src/all/background_page/service/resource/import/ImportResourcesService.js +9 -9
  201. package/src/all/background_page/service/resource/import/ImportResourcesService.test.js +30 -15
  202. package/src/all/background_page/service/resource/update/resourceUpdateService.js +38 -19
  203. package/src/all/background_page/service/resource/update/resourceUpdateService.test.js +64 -31
  204. package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.js +49 -0
  205. package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.test.js +61 -0
  206. package/src/all/background_page/service/resourceType/getSecretSchemaResourceTypeService.js +44 -0
  207. package/src/all/background_page/service/resourceType/updateResourceTypesService.js +6 -4
  208. package/src/all/background_page/service/resourceType/updateResourceTypesService.test.js +19 -14
  209. package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.js +5 -4
  210. package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.test.js +16 -9
  211. package/src/all/background_page/service/share/shareResourceService.js +4 -4
  212. package/src/all/background_page/service/share/shareResourceService.test.js +6 -6
  213. package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.js +77 -0
  214. package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.test.js +130 -0
  215. package/src/all/background_page/service/siteSettings/findSiteSettingsService.js +47 -0
  216. package/src/all/background_page/service/siteSettings/findSiteSettingsService.test.js +68 -0
  217. package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.js +84 -0
  218. package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.test.js +175 -0
  219. package/src/all/background_page/service/siteSettings/siteSettingsRuntimeCache.js +70 -0
  220. package/src/all/background_page/service/sso/generateSsoKitService.test.js +2 -2
  221. package/src/all/background_page/service/toolbar/toolbarService.js +6 -4
  222. package/src/all/background_page/service/toolbar/toolbarService.test.js +14 -13
  223. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.js +4 -4
  224. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.test.js +3 -3
  225. package/src/all/background_page/service/user/getOrFindMeService.js +64 -0
  226. package/src/all/background_page/service/user/getOrFindMeService.test.js +65 -0
  227. package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.js +5 -4
  228. package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.test.js +12 -11
  229. package/src/all/background_page/service/validator/appEmailValidatorService.js +11 -6
  230. package/src/all/background_page/service/validator/appEmailValidatorService.test.js +11 -11
  231. package/src/all/common/polyfill/browserPolyfill.js +8 -8
  232. package/src/all/locales/cs-CZ/common.json +1 -4
  233. package/src/all/locales/de-DE/common.json +1 -4
  234. package/src/all/locales/en-UK/common.json +0 -3
  235. package/src/all/locales/es-ES/common.json +1 -4
  236. package/src/all/locales/fr-FR/common.json +1 -4
  237. package/src/all/locales/it-IT/common.json +1 -4
  238. package/src/all/locales/ja-JP/common.json +1 -4
  239. package/src/all/locales/ko-KR/common.json +0 -3
  240. package/src/all/locales/lt-LT/common.json +1 -4
  241. package/src/all/locales/nl-NL/common.json +1 -4
  242. package/src/all/locales/pl-PL/common.json +1 -4
  243. package/src/all/locales/pt-BR/common.json +1 -4
  244. package/src/all/locales/ro-RO/common.json +1 -4
  245. package/src/all/locales/ru-RU/common.json +1 -4
  246. package/src/all/locales/sl-SI/common.json +1 -4
  247. package/src/all/locales/sv-SE/common.json +1 -4
  248. package/src/all/locales/uk-UA/common.json +1 -4
  249. package/src/all/webAccessibleResources/js/app/QuickAccess.js +7 -0
  250. package/src/chrome/manifest.json +1 -1
  251. package/src/chrome-mv3/manifest.json +1 -1
  252. package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.js +132 -0
  253. package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.test.js +125 -0
  254. package/src/chrome-mv3/offscreens/service/offscreen/handleOffscreenRequestService.js +4 -0
  255. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.js +83 -0
  256. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.test.js +116 -0
  257. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.js +99 -0
  258. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.data.js +45 -0
  259. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.js +87 -0
  260. package/src/chrome-mv3/serviceWorker/service/network/requestFetchOffscreenService.js +0 -1
  261. package/src/chrome-mv3/serviceWorker/service/offscreen/handleOffscreenResponseService.js +15 -0
  262. package/src/firefox/manifest.json +1 -1
  263. package/src/safari/background_page/index.js +0 -37
  264. package/src/safari/common/polyfill/safariBrowserPolyfill.js +10 -10
  265. package/src/safari/manifest.json +1 -1
  266. package/test/jest.setup.js +4 -2
  267. package/src/all/background_page/controller/group/getOrFindGroupsUsersController.test.js +0 -69
  268. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.js +0 -55
  269. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.test.js +0 -45
  270. package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.js +0 -76
  271. package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.test.js +0 -102
  272. package/src/all/background_page/event/organizationSettingsEvents.js +0 -37
  273. package/src/all/background_page/model/organizationSettings/organizationSettingsModel.js +0 -93
  274. package/src/all/background_page/model/resourceType/resourceTypeModel.js +0 -72
  275. package/src/all/background_page/model/resourceType/resourceTypeModel.test.js +0 -101
  276. package/src/all/background_page/service/api/organizationSettings/organizationSettingsService.js +0 -58
  277. package/src/all/background_page/service/group/getOrFindGroupsService.js +0 -65
  278. package/src/all/background_page/service/group/getOrFindGroupsService.test.js +0 -168
  279. package/src/all/background_page/service/group/getOrFindGroupsUsersService.js +0 -51
  280. package/src/all/background_page/service/group/getOrFindGroupsUsersService.test.js +0 -94
  281. package/src/all/background_page/service/local_storage/authStatusLocalStorage.js +0 -70
  282. 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 { anonymousOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
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 = anonymousOrganizationSettings();
51
+ const organizationSettings = anonymousSiteSettings();
47
52
  if (ssoEnabled) {
48
53
  organizationSettings.passbolt.plugins.sso = { enabled: true };
49
54
  }
50
- fetch.doMockOnceIf(new RegExp("/settings.json"), () =>
51
- mockApiResponse(organizationSettings, { servertime: Date.now() / 1000 }),
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 controller = new AccountRecoveryGenerateOrganizationKeyController(null, null, defaultApiClientOptions());
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 controller = new AccountRecoveryGenerateOrganizationKeyController(null, null, defaultApiClientOptions());
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",
@@ -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
  }
@@ -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 { anonymousOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
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 = anonymousOrganizationSettings();
52
+ const organizationSettings = anonymousSiteSettings();
48
53
  organizationSettings.passbolt.plugins.sso = {
49
54
  enabled: withSsoEnabled,
50
55
  };
51
- fetch.doMockOnceIf(new RegExp("/settings.json"), () =>
52
- mockApiResponse(organizationSettings, { servertime: Date.now() / 1000 }),
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.updateSsoCredentialsService = new UpdateSsoCredentialsService(apiClientOptions);
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
- await this.updateSsoCredentialsService.updateSsoKitIfNeeded(passphrase);
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 { anonymousOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
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 = anonymousOrganizationSettings();
56
+ const organizationSettings = anonymousSiteSettings();
52
57
  if (isSsoEnabled) {
53
58
  organizationSettings.passbolt.plugins.sso = { enabled: true };
54
59
  }
55
- fetch.doMockOnce(() => mockApiResponse(organizationSettings, { servertime: Date.now() / 1000 }));
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 = anonymousOrganizationSettings();
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
- isAuthenticated: false,
17
- isMfaRequired: false,
16
+ is_authenticated: false,
17
+ is_mfa_authenticated: true,
18
18
  });
19
19
 
20
20
  export const userLoggedInAuthStatus = () => ({
21
- isAuthenticated: true,
22
- isMfaRequired: false,
21
+ is_authenticated: true,
22
+ is_mfa_authenticated: true,
23
23
  });
24
24
 
25
25
  export const userRequireMfaAuthStatus = () => ({
26
- isAuthenticated: true,
27
- isMfaRequired: true,
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
- constructor(worker, requestId) {
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<{isAuthenticated: {bool}, isMfaRequired: {bool}}>}
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 controller = new AuthCheckStatusController();
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(AuthStatusLocalStorage.get).not.toHaveBeenCalled();
35
- expect(AuthStatusLocalStorage.flush).not.toHaveBeenCalled();
36
- expect(authStatus).toStrictEqual({
37
- isAuthenticated: false,
38
- isMfaRequired: false,
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 controller = new AuthCheckStatusController();
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(AuthStatusLocalStorage.get).not.toHaveBeenCalled();
52
- expect(AuthStatusLocalStorage.flush).not.toHaveBeenCalled();
53
- expect(authStatus).toStrictEqual({
54
- isAuthenticated: true,
55
- isMfaRequired: false,
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 controller = new AuthCheckStatusController();
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(AuthStatusLocalStorage.get).not.toHaveBeenCalled();
71
- expect(AuthStatusLocalStorage.flush).not.toHaveBeenCalled();
72
- expect(authStatus).toStrictEqual({
73
- isAuthenticated: true,
74
- isMfaRequired: true,
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
- isAuthenticated: false,
82
- isMfaRequired: false,
104
+ is_authenticated: false,
105
+ is_mfa_authenticated: true,
83
106
  };
84
- jest.spyOn(AuthStatusLocalStorage, "get").mockImplementation(() => expectedAuthStatus);
85
- jest.spyOn(AuthStatusLocalStorage, "flush");
86
- jest.spyOn(AuthenticationStatusService, "isAuthenticated");
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(AuthStatusLocalStorage.get).toHaveBeenCalledTimes(1);
92
- expect(AuthStatusLocalStorage.flush).not.toHaveBeenCalled();
93
- expect(AuthenticationStatusService.isAuthenticated).not.toHaveBeenCalled();
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
- constructor(worker, requestId) {
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.isMfaRequired;
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 controller = new AuthIsMfaRequiredController();
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).toStrictEqual(true);
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 controller = new AuthIsMfaRequiredController();
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).toStrictEqual(false);
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 controller = new AuthIsMfaRequiredController();
56
+ const account = new AccountEntity(defaultAccountDto());
57
+ const controller = new AuthIsMfaRequiredController(null, null, defaultApiClientOptions(), account);
51
58
 
52
59
  const authStatus = userLoggedOutAuthStatus();
53
- jest.spyOn(controller.checkAuthStatusService, "checkAuthStatus").mockImplementation(async () => authStatus);
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.isMfaRequired);
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 { anonymousOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
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 = anonymousOrganizationSettings();
47
+ const organizationSettings = anonymousSiteSettings();
43
48
  organizationSettings.passbolt.plugins.sso = {
44
49
  enabled: withSsoEnabled,
45
50
  };
46
- fetch.doMockOnceIf(new RegExp("/settings.json"), () =>
47
- mockApiResponse(organizationSettings, { servertime: Date.now() / 1000 }),
48
- );
51
+ jest
52
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
53
+ .mockImplementation(() => new SiteSettingsEntity(organizationSettings));
49
54
  };
50
55
 
51
56
  const mockOrganisationSettingsSsoSettings = (ssoSettings) => {