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