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
@@ -13,7 +13,6 @@
13
13
  */
14
14
 
15
15
  import ResourceModel from "../../model/resource/resourceModel";
16
- import ResourceTypeModel from "../../model/resourceType/resourceTypeModel";
17
16
  import GetPassphraseService from "../../service/passphrase/getPassphraseService";
18
17
  import WorkerService from "../../service/worker/workerService";
19
18
  import GetDecryptedUserPrivateKeyService from "../../service/account/getDecryptedUserPrivateKeyService";
@@ -21,6 +20,7 @@ import DecryptAndParseResourceSecretService from "../../service/secret/decryptAn
21
20
  import InformMenuPagemod from "../../pagemod/informMenuPagemod";
22
21
  import QuickAccessPagemod from "../../pagemod/quickAccessPagemod";
23
22
  import FindSecretService from "../../service/secret/findSecretService";
23
+ import GetSecretSchemaResourceTypeService from "../../service/resourceType/getSecretSchemaResourceTypeService";
24
24
 
25
25
  class AutofillController {
26
26
  /**
@@ -35,7 +35,7 @@ class AutofillController {
35
35
  this.requestId = requestId;
36
36
  this.resourceModel = new ResourceModel(apiClientOptions, account);
37
37
  this.findSecretService = new FindSecretService(account, apiClientOptions);
38
- this.resourceTypeModel = new ResourceTypeModel(apiClientOptions);
38
+ this.getSecretSchemaResourceTypeService = new GetSecretSchemaResourceTypeService(account, apiClientOptions);
39
39
  this.getPassphraseService = new GetPassphraseService(account);
40
40
  }
41
41
 
@@ -71,7 +71,7 @@ class AutofillController {
71
71
  // Get the resource, decrypt the resources password and requests to fill the credentials
72
72
  const resource = await this.resourceModel.getById(resourceId);
73
73
  const secret = await this.findSecretService.findByResourceId(resourceId);
74
- const secretSchema = await this.resourceTypeModel.getSecretSchemaById(resource.resourceTypeId);
74
+ const secretSchema = await this.getSecretSchemaResourceTypeService.getByResourceTypeId(resource.resourceTypeId);
75
75
  const privateKey = await GetDecryptedUserPrivateKeyService.getKey(passphrase);
76
76
  const plaintextSecret = await DecryptAndParseResourceSecretService.decryptAndParse(
77
77
  secret,
@@ -76,7 +76,7 @@ describe("AutofillController", () => {
76
76
  jest.spyOn(controller.getPassphraseService, "getPassphrase").mockResolvedValue(pgpKeys.ada.passphrase);
77
77
  jest.spyOn(controller.resourceModel, "getById").mockResolvedValue(resource);
78
78
  jest.spyOn(controller.findSecretService, "findByResourceId").mockResolvedValue(new SecretEntity(secretDto));
79
- jest.spyOn(controller.resourceTypeModel, "getSecretSchemaById").mockResolvedValue(schema);
79
+ jest.spyOn(controller.getSecretSchemaResourceTypeService, "getByResourceTypeId").mockResolvedValue(schema);
80
80
 
81
81
  await controller.exec(resource.id, worker.tabId);
82
82
 
@@ -88,8 +88,10 @@ describe("AutofillController", () => {
88
88
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledTimes(1);
89
89
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledWith(resource.id);
90
90
 
91
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledTimes(1);
92
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledWith(resource.resourceTypeId);
91
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledTimes(1);
92
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledWith(
93
+ resource.resourceTypeId,
94
+ );
93
95
 
94
96
  expect(portWrapper.emit).toHaveBeenCalledTimes(2);
95
97
  expect(portWrapper.emit).toHaveBeenCalledWith("passbolt.web-integration.fill-credentials", {
@@ -119,7 +121,7 @@ describe("AutofillController", () => {
119
121
  jest.spyOn(controller.getPassphraseService, "getPassphrase").mockResolvedValue(pgpKeys.ada.passphrase);
120
122
  jest.spyOn(controller.resourceModel, "getById").mockResolvedValue(resource);
121
123
  jest.spyOn(controller.findSecretService, "findByResourceId").mockResolvedValue(new SecretEntity(secretDto));
122
- jest.spyOn(controller.resourceTypeModel, "getSecretSchemaById").mockResolvedValue(schema);
124
+ jest.spyOn(controller.getSecretSchemaResourceTypeService, "getByResourceTypeId").mockResolvedValue(schema);
123
125
 
124
126
  await controller.exec(resource.id, worker.tabId);
125
127
 
@@ -133,8 +135,10 @@ describe("AutofillController", () => {
133
135
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledTimes(1);
134
136
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledWith(resource.id);
135
137
 
136
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledTimes(1);
137
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledWith(resource.resourceTypeId);
138
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledTimes(1);
139
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledWith(
140
+ resource.resourceTypeId,
141
+ );
138
142
 
139
143
  expect(portWrapper.emit).toHaveBeenCalledTimes(1);
140
144
  expect(portWrapper.request).toHaveBeenCalledTimes(1);
@@ -165,7 +169,7 @@ describe("AutofillController", () => {
165
169
  jest.spyOn(controller.getPassphraseService, "getPassphrase").mockResolvedValue(pgpKeys.ada.passphrase);
166
170
  jest.spyOn(controller.resourceModel, "getById").mockResolvedValue(resource);
167
171
  jest.spyOn(controller.findSecretService, "findByResourceId").mockResolvedValue(new SecretEntity(secretDto));
168
- jest.spyOn(controller.resourceTypeModel, "getSecretSchemaById").mockResolvedValue(schema);
172
+ jest.spyOn(controller.getSecretSchemaResourceTypeService, "getByResourceTypeId").mockResolvedValue(schema);
169
173
 
170
174
  await controller.exec(resource.id, worker.tabId);
171
175
 
@@ -180,8 +184,10 @@ describe("AutofillController", () => {
180
184
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledTimes(1);
181
185
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledWith(resource.id);
182
186
 
183
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledTimes(1);
184
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledWith(resource.resourceTypeId);
187
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledTimes(1);
188
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledWith(
189
+ resource.resourceTypeId,
190
+ );
185
191
 
186
192
  expect(portWrapper.emit).not.toHaveBeenCalledWith("passbolt.web-integration.fill-credentials", {
187
193
  username: resource.username,
@@ -215,7 +221,7 @@ describe("AutofillController", () => {
215
221
  jest.spyOn(controller.getPassphraseService, "getPassphrase").mockResolvedValue(pgpKeys.ada.passphrase);
216
222
  jest.spyOn(controller.resourceModel, "getById").mockResolvedValue(resource);
217
223
  jest.spyOn(controller.findSecretService, "findByResourceId").mockResolvedValue(new SecretEntity(secretDto));
218
- jest.spyOn(controller.resourceTypeModel, "getSecretSchemaById").mockResolvedValue(schema);
224
+ jest.spyOn(controller.getSecretSchemaResourceTypeService, "getByResourceTypeId").mockResolvedValue(schema);
219
225
 
220
226
  await controller.exec(resource.id, worker.tabId);
221
227
 
@@ -229,8 +235,10 @@ describe("AutofillController", () => {
229
235
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledTimes(1);
230
236
  expect(controller.findSecretService.findByResourceId).toHaveBeenCalledWith(resource.id);
231
237
 
232
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledTimes(1);
233
- expect(controller.resourceTypeModel.getSecretSchemaById).toHaveBeenCalledWith(resource.resourceTypeId);
238
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledTimes(1);
239
+ expect(controller.getSecretSchemaResourceTypeService.getByResourceTypeId).toHaveBeenCalledWith(
240
+ resource.resourceTypeId,
241
+ );
234
242
 
235
243
  expect(portWrapper.emit).not.toHaveBeenCalledWith("passbolt.web-integration.fill-credentials", {
236
244
  username: "",
@@ -52,7 +52,7 @@ class ExportResourcesFileController {
52
52
 
53
53
  /**
54
54
  * Main execution function.
55
- * @return {Promise<ExportResourcesFileEntity>}
55
+ * @return {Promise<{customFieldsConflicts: Array}>} The custom fields renamed to avoid conflicting with reserved field names
56
56
  */
57
57
  async exec(exportResourcesFileDto) {
58
58
  //Assert the param through the entity
@@ -61,7 +61,10 @@ class ExportResourcesFileController {
61
61
  try {
62
62
  const passphrase = await this.getPassphraseService.getPassphrase(this.worker);
63
63
  await this.exportResourcesService.prepareExportContent(exportResourcesFileEntity, passphrase);
64
- await this.exportResourcesService.exportToFile(exportResourcesFileEntity, passphrase);
64
+ const customFieldsConflicts = await this.exportResourcesService.exportToFile(
65
+ exportResourcesFileEntity,
66
+ passphrase,
67
+ );
65
68
  const date = new Date().toISOString().slice(0, 10);
66
69
  const filename = `passbolt-export-${date}.${exportResourcesFileEntity.fileType}`;
67
70
  const mimeType =
@@ -69,7 +72,7 @@ class ExportResourcesFileController {
69
72
  const blobFile = exportResourcesFileEntity.toBlob(mimeType);
70
73
  await FileService.saveFile(filename, blobFile, mimeType, this.worker.tab.id);
71
74
  this.progressService.finishStep(i18n.t("Done"), true);
72
- return exportResourcesFileEntity;
75
+ return { customFieldsConflicts: customFieldsConflicts || [] };
73
76
  } finally {
74
77
  this.progressService.close();
75
78
  }
@@ -51,6 +51,7 @@ import { defaultDecryptedSharedMetadataKeysDtos } from "passbolt-styleguide/src/
51
51
  import MetadataKeysCollection from "passbolt-styleguide/src/shared/models/entity/metadata/metadataKeysCollection";
52
52
  import GetOrFindMetadataKeysService from "../../service/metadata/getOrFindMetadataKeysService";
53
53
  import { mockPassboltResponse } from "passbolt-styleguide/test/mocks/mockApiResponse";
54
+ import GetOrFindResourceTypesService from "../../service/resourceType/getOrFindResourceTypesService";
54
55
 
55
56
  beforeEach(async () => {
56
57
  await MockExtension.withConfiguredAccount();
@@ -118,10 +119,10 @@ describe("ExportResourcesFileController", () => {
118
119
  .mockImplementation(() => mockPassboltResponse(resourceCollectionV4));
119
120
  const result = await controller.exec(file);
120
121
 
121
- const blobFile = new Blob([result.file], { type: "text/csv" });
122
+ const blobFile = new Blob([KdbxCsvFile], { type: "text/csv" });
122
123
 
123
124
  expect(FileService.saveFile).toHaveBeenCalledWith(filename, blobFile, "text/csv", 1);
124
- expect(result.file).toEqual(KdbxCsvFile);
125
+ expect(result).toEqual({ customFieldsConflicts: [] });
125
126
  });
126
127
  });
127
128
  });
@@ -179,11 +180,40 @@ describe("ExportResourcesFileController", () => {
179
180
 
180
181
  const result = await controller.exec(file);
181
182
 
182
- expect(result.file).toEqual(exportResourcesFileEntity.file);
183
+ expect(result).toEqual({ customFieldsConflicts: [] });
183
184
  });
184
185
  });
185
186
  });
186
187
 
188
+ it("should return the custom fields renamed to avoid conflicting with reserved field names", async () => {
189
+ expect.assertions(1);
190
+ const conflicts = [{ resourceName: "GitHub", originalKey: "Password", newKey: "Password (1)" }];
191
+ jest.spyOn(ResourcesKdbxExporter.prototype, "export").mockImplementation(async function () {
192
+ this.exportEntity.file = new ArrayBuffer(0);
193
+ return conflicts;
194
+ });
195
+ const resourceType = resourceTypeCollection.find(
196
+ (resourceType) => resourceType.slug === RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG,
197
+ );
198
+ const file = {
199
+ format: FORMAT_KDBX,
200
+ resources_ids: [uuidv4()],
201
+ folders_ids: [foldersDto[0].id],
202
+ };
203
+ const resourceCollectionV4 = await resourceCollectionV4ToExport({
204
+ resourceType: resourceType,
205
+ folder_parent_id: foldersDto[0].id,
206
+ totp: defaultTotpDto({ secret_key: "THISISASECRET" }),
207
+ });
208
+ jest
209
+ .spyOn(ResourceService.prototype, "findAll")
210
+ .mockImplementation(() => mockPassboltResponse(resourceCollectionV4));
211
+
212
+ const result = await controller.exec(file);
213
+
214
+ expect(result).toEqual({ customFieldsConflicts: conflicts });
215
+ });
216
+
187
217
  describe.each([
188
218
  { scenario: "xls", format: "xls" },
189
219
  { scenario: "xlsx", format: "xlsx" },
@@ -243,7 +273,7 @@ describe("ExportResourcesFileController", () => {
243
273
  expect.assertions(1);
244
274
 
245
275
  jest.spyOn(controller.progressService, "close");
246
- jest.spyOn(ResourceTypeService.prototype, "findAll").mockImplementation(() => {
276
+ jest.spyOn(GetOrFindResourceTypesService.prototype, "getOrFindAll").mockImplementation(() => {
247
277
  throw new Error("API error");
248
278
  });
249
279
  const file = {
@@ -25,6 +25,8 @@ import storage from "../../sdk/storage";
25
25
  import { Config } from "../../model/config";
26
26
  import AuthModel from "../../model/auth/authModel";
27
27
  import AppBootstrapPagemod from "../../pagemod/appBootstrapPagemod";
28
+ import GetActiveAccountService from "../../service/account/getActiveAccountService";
29
+ import BuildApiClientOptionsService from "../../service/account/buildApiClientOptionsService";
28
30
 
29
31
  class OnExtensionInstalledController {
30
32
  /**
@@ -87,7 +89,9 @@ class OnExtensionInstalledController {
87
89
  }
88
90
  let authStatus;
89
91
  try {
90
- const checkAuthStatusService = new CheckAuthStatusService();
92
+ const account = await GetActiveAccountService.get();
93
+ const apiClientOptions = BuildApiClientOptionsService.buildFromAccount(account);
94
+ const checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
91
95
  // use the cached data as the worker could wake up every 30 secondes.
92
96
  authStatus = await checkAuthStatusService.checkAuthStatus(false);
93
97
  } catch (error) {
@@ -130,7 +134,9 @@ class OnExtensionInstalledController {
130
134
 
131
135
  let authStatus;
132
136
  try {
133
- const checkAuthStatusService = new CheckAuthStatusService();
137
+ const account = await GetActiveAccountService.get();
138
+ const apiClientOptions = BuildApiClientOptionsService.buildFromAccount(account);
139
+ const checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
134
140
  // use the cached data as the worker could wake up every 30 secondes.
135
141
  authStatus = await checkAuthStatusService.checkAuthStatus(false);
136
142
  } catch (error) {
@@ -19,6 +19,9 @@ import AuthModel from "../../model/auth/authModel";
19
19
  import CheckAuthStatusService from "../../service/auth/checkAuthStatusService";
20
20
  import GetActiveAccountService from "../../service/account/getActiveAccountService";
21
21
  import User from "../../model/user";
22
+ import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
23
+ import AccountEntity from "../../model/entity/account/accountEntity";
24
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
22
25
 
23
26
  // Reset the modules before each test.
24
27
  beforeEach(() => {
@@ -149,12 +152,13 @@ describe("OnExtensionInstalledController", () => {
149
152
  jest.spyOn(OnExtensionInstalledController, "onBrowserUpdate");
150
153
  jest.spyOn(User.getInstance(), "isValid").mockImplementation(() => true);
151
154
  jest.spyOn(UserSettings.prototype, "getDomain").mockImplementation(() => "https://passbolt.dev");
155
+ jest.spyOn(GetActiveAccountService, "get").mockImplementation(() => new AccountEntity(defaultAccountDto()));
152
156
  jest.spyOn(AuthModel.prototype, "logout").mockImplementation(() => {});
153
157
  jest.spyOn(browser.tabs, "query").mockImplementation(() => Promise.resolve(tabs));
154
158
  jest.spyOn(browser.tabs, "reload");
155
159
  jest
156
160
  .spyOn(CheckAuthStatusService.prototype, "checkAuthStatus")
157
- .mockImplementation(() => ({ isAuthenticated: true }));
161
+ .mockImplementation(() => new OnlineSessionEntity({ is_authenticated: true }));
158
162
  // process
159
163
  await OnExtensionInstalledController.exec(details);
160
164
  // expectation
@@ -9,27 +9,26 @@
9
9
  * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
10
  * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
- * @since 5.13.0
12
+ * @since 5.14.0
13
13
  */
14
- import GetOrFindGroupsService from "../../service/group/getOrFindGroupsService";
14
+ import FindGroupsService from "../../service/group/findGroupsService";
15
15
  import { assertArrayUUID } from "../../utils/assertions";
16
16
 
17
17
  /**
18
- * Controller for the `passbolt.groups.get-by-ids` event. Returns the groups matching the given ids,
19
- * served from the local storage cache when available and otherwise fetched from the API.
18
+ * Controller for the `passbolt.groups.find-by-ids-for-share` event.
19
+ * Returns the groups matching the given ids fetched from the API.
20
20
  */
21
- class GetOrFindGroupsController {
21
+ class FindGroupsByIdsForShareController {
22
22
  /**
23
23
  * Constructor.
24
24
  * @param {Worker} worker The associated worker.
25
25
  * @param {string} requestId The associated request id.
26
26
  * @param {ApiClientOptions} apiClientOptions The api client options.
27
- * @param {AccountEntity} account The user account.
28
27
  */
29
- constructor(worker, requestId, apiClientOptions, account) {
28
+ constructor(worker, requestId, apiClientOptions) {
30
29
  this.worker = worker;
31
30
  this.requestId = requestId;
32
- this.getOrFindGroupsService = new GetOrFindGroupsService(account, apiClientOptions);
31
+ this.findGroupsService = new FindGroupsService(apiClientOptions);
33
32
  }
34
33
 
35
34
  /**
@@ -54,8 +53,8 @@ class GetOrFindGroupsController {
54
53
  */
55
54
  async exec(groupIds) {
56
55
  assertArrayUUID(groupIds);
57
- return this.getOrFindGroupsService.getOrFindByIds(groupIds);
56
+ return this.findGroupsService.findAllByIdsForShare(groupIds);
58
57
  }
59
58
  }
60
59
 
61
- export default GetOrFindGroupsController;
60
+ export default FindGroupsByIdsForShareController;
@@ -15,7 +15,7 @@
15
15
  import AccountEntity from "../../model/entity/account/accountEntity";
16
16
  import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
17
17
  import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
18
- import GetOrFindGroupsController from "./getOrFindGroupsController";
18
+ import FindGroupsByIdsForShareController from "./findGroupsByIdsForShareController";
19
19
  import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
20
20
  import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
21
21
 
@@ -23,7 +23,7 @@ beforeEach(() => {
23
23
  jest.clearAllMocks();
24
24
  });
25
25
 
26
- describe("GetOrFindGroupsController", () => {
26
+ describe("FindGroupsByIdsForShareController", () => {
27
27
  describe("::exec", () => {
28
28
  it("Should retrieve the groups matching the given ids.", async () => {
29
29
  expect.assertions(3);
@@ -32,23 +32,23 @@ describe("GetOrFindGroupsController", () => {
32
32
  const groupsDto = defaultGroupsDtos();
33
33
  const groupsCollection = new GroupsCollection(groupsDto);
34
34
  const requestedIds = [groupsDto[1].id, groupsDto[3].id];
35
- const controller = new GetOrFindGroupsController(null, null, defaultApiClientOptions(), account);
36
- jest.spyOn(controller.getOrFindGroupsService, "getOrFindByIds").mockImplementation(() => groupsCollection);
35
+ const controller = new FindGroupsByIdsForShareController(null, null, defaultApiClientOptions(), account);
36
+ jest.spyOn(controller.findGroupsService, "findAllByIdsForShare").mockImplementation(() => groupsCollection);
37
37
 
38
38
  const result = await controller.exec(requestedIds);
39
39
 
40
40
  expect(result).toBeInstanceOf(GroupsCollection);
41
41
  expect(result).toStrictEqual(groupsCollection);
42
- expect(controller.getOrFindGroupsService.getOrFindByIds).toHaveBeenCalledWith(requestedIds);
42
+ expect(controller.findGroupsService.findAllByIdsForShare).toHaveBeenCalledWith(requestedIds);
43
43
  });
44
44
 
45
45
  it("Should let error been thrown from the service if any.", async () => {
46
46
  expect.assertions(1);
47
47
 
48
48
  const account = new AccountEntity(defaultAccountDto());
49
- const controller = new GetOrFindGroupsController(null, null, defaultApiClientOptions(), account);
49
+ const controller = new FindGroupsByIdsForShareController(null, null, defaultApiClientOptions(), account);
50
50
  const requestedIds = [defaultGroupsDtos()[0].id];
51
- jest.spyOn(controller.getOrFindGroupsService, "getOrFindByIds").mockImplementation(() => {
51
+ jest.spyOn(controller.findGroupsService, "findAllByIdsForShare").mockImplementation(() => {
52
52
  throw new Error("Something went wrong!");
53
53
  });
54
54
 
@@ -59,7 +59,7 @@ describe("GetOrFindGroupsController", () => {
59
59
  expect.assertions(1);
60
60
 
61
61
  const account = new AccountEntity(defaultAccountDto());
62
- const controller = new GetOrFindGroupsController(null, null, defaultApiClientOptions(), account);
62
+ const controller = new FindGroupsByIdsForShareController(null, null, defaultApiClientOptions(), account);
63
63
 
64
64
  await expect(() => controller.exec(["not-a-uuid"])).rejects.toThrow(
65
65
  "The given parameter is not a valid array of uuid",
@@ -96,6 +96,7 @@ describe("GroupsUpdateController", () => {
96
96
  it("Add 2 users in a group with 1 secret being unknown for both users and 2 other secrets known by only one user each", async () => {
97
97
  expect.assertions(20);
98
98
 
99
+ chrome.runtime.getManifest.mockImplementation(() => ({ manifest_version: 2 }));
99
100
  const getResourceId = (data, index) => data["dry-run"].Secrets[index].Secret[0].resource_id;
100
101
  const findSecret = (secrets, userId, resource1Id) => {
101
102
  for (const i in secrets) {
@@ -68,10 +68,17 @@ import {
68
68
  RESOURCE_TYPE_V5_DEFAULT_TOTP_SLUG,
69
69
  } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypeSchemasDefinition";
70
70
  import GetOrFindMetadataSettingsService from "../../service/metadata/getOrFindMetadataSettingsService";
71
+ import GetOrFindResourceTypesService from "../../service/resourceType/getOrFindResourceTypesService";
72
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
73
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
74
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
71
75
 
72
76
  beforeEach(async () => {
73
77
  await MockExtension.withConfiguredAccount();
74
78
  jest.clearAllMocks();
79
+ jest
80
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
81
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
75
82
  });
76
83
 
77
84
  describe("ImportResourcesFileController", () => {
@@ -808,7 +815,7 @@ describe("ImportResourcesFileController", () => {
808
815
  expect.assertions(1);
809
816
 
810
817
  jest.spyOn(controller.progressService, "close");
811
- jest.spyOn(ResourceTypeService.prototype, "findAll").mockImplementation(() => {
818
+ jest.spyOn(GetOrFindResourceTypesService.prototype, "getOrFindAll").mockImplementationOnce(() => {
812
819
  throw new Error("API error");
813
820
  });
814
821
  const file = btoa(BinaryConvert.toBinary(defaultCsvData));
@@ -31,7 +31,7 @@ class InformCallToActionController {
31
31
  constructor(worker, apiClientOptions, account) {
32
32
  this.worker = worker;
33
33
  this.resourceModel = new ResourceModel(apiClientOptions, account);
34
- this.checkAuthStatusService = new CheckAuthStatusService();
34
+ this.checkAuthStatusService = new CheckAuthStatusService(account, apiClientOptions);
35
35
  this.getOrFindResourcesService = new GetOrFindResourcesService(account, apiClientOptions);
36
36
  this.openTrustedDomainTabService = new OpenTrustedDomainTabService();
37
37
  }
@@ -65,7 +65,7 @@ class InformCallToActionController {
65
65
  const queryParameters = [{ name: "feature", value: "login" }];
66
66
  await QuickAccessService.open(queryParameters);
67
67
  this.worker.port.emit(requestId, "SUCCESS");
68
- } else if (status.isMfaRequired) {
68
+ } else if (!status.isMfaAuthenticated) {
69
69
  await this.openTrustedDomainTabService.openTab();
70
70
  this.worker.port.emit(requestId, "SUCCESS");
71
71
  } else {
@@ -22,6 +22,7 @@ import WorkerService from "../../service/worker/workerService";
22
22
  import { readWorker } from "../../model/entity/worker/workerEntity.test.data";
23
23
  import MockPort from "passbolt-styleguide/src/react-extension/test/mock/MockPort";
24
24
  import { defaultResourceDtosCollection } from "passbolt-styleguide/src/shared/models/entity/resource/resourcesCollection.test.data";
25
+ import OnlineSessionEntity from "passbolt-styleguide/src/shared/models/entity/session/onlineSessionEntity";
25
26
 
26
27
  describe("InformCallToActionController", () => {
27
28
  let requestId, worker, port, controller, suggestedResources;
@@ -123,7 +124,7 @@ describe("InformCallToActionController", () => {
123
124
 
124
125
  jest
125
126
  .spyOn(controller.checkAuthStatusService, "checkAuthStatus")
126
- .mockResolvedValue({ isAuthenticated: true, isMfaRequired: false });
127
+ .mockResolvedValue(new OnlineSessionEntity({ is_authenticated: true, is_mfa_authenticated: true }));
127
128
  jest.spyOn(WorkerService, "get").mockResolvedValue({ port });
128
129
 
129
130
  await controller.execute(requestId);
@@ -150,7 +151,9 @@ describe("InformCallToActionController", () => {
150
151
  expect.assertions(1);
151
152
 
152
153
  const error = new Error();
153
- jest.spyOn(controller.checkAuthStatusService, "checkAuthStatus").mockResolvedValue({ isAuthenticated: false });
154
+ jest
155
+ .spyOn(controller.checkAuthStatusService, "checkAuthStatus")
156
+ .mockResolvedValue(new OnlineSessionEntity({ is_authenticated: false }));
154
157
  jest.spyOn(QuickAccessService, "open").mockRejectedValue(error);
155
158
 
156
159
  await controller.execute();
@@ -164,7 +167,7 @@ describe("InformCallToActionController", () => {
164
167
  const error = new Error();
165
168
  jest
166
169
  .spyOn(controller.checkAuthStatusService, "checkAuthStatus")
167
- .mockResolvedValue({ isAuthenticated: true, isMfaRequired: true });
170
+ .mockResolvedValue(new OnlineSessionEntity({ is_authenticated: true, is_mfa_authenticated: false }));
168
171
  jest.spyOn(controller.openTrustedDomainTabService, "openTab").mockRejectedValue(error);
169
172
 
170
173
  await controller.execute();
@@ -178,7 +181,7 @@ describe("InformCallToActionController", () => {
178
181
  const error = new Error();
179
182
  jest
180
183
  .spyOn(controller.checkAuthStatusService, "checkAuthStatus")
181
- .mockResolvedValue({ isAuthenticated: true, isMfaRequired: false });
184
+ .mockResolvedValue(new OnlineSessionEntity({ is_authenticated: true, is_mfa_authenticated: true }));
182
185
  jest.spyOn(WorkerService, "get").mockRejectedValue(error);
183
186
 
184
187
  await controller.execute();
@@ -23,10 +23,11 @@ class GetLocaleController {
23
23
  * GetLocaleController constructor.
24
24
  * @param {Worker} worker
25
25
  * @param {ApiClientOptions} apiClientOptions The api client options.
26
+ * @param {AccountEntity} [account] The account, used to read the organization locale from the site settings.
26
27
  */
27
- constructor(worker, apiClientOptions) {
28
+ constructor(worker, apiClientOptions, account) {
28
29
  this.worker = worker;
29
- this.localeModel = new LocaleModel(apiClientOptions);
30
+ this.localeModel = new LocaleModel(apiClientOptions, account);
30
31
  }
31
32
 
32
33
  /**
@@ -22,7 +22,9 @@ import {
22
22
  } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity.test.data";
23
23
  import MetadataTypesSettingsEntity from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity";
24
24
  import { enableFetchMocks } from "jest-fetch-mock";
25
- import { defaultCeOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
25
+ import { defaultCeSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
26
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
27
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
26
28
 
27
29
  beforeEach(() => {
28
30
  enableFetchMocks();
@@ -46,7 +48,7 @@ describe("FindMetadataTypesSettingsController", () => {
46
48
  expect.assertions(3);
47
49
 
48
50
  const metadataTypesSettingsDto = defaultMetadataTypesSettingsV50FreshDto();
49
- const siteSettingsDto = defaultCeOrganizationSettings();
51
+ const siteSettingsDto = defaultCeSiteSettings();
50
52
  jest
51
53
  .spyOn(
52
54
  controller.findAndUpdateMetadataSettingsLocalStorageService.findMetadataSettingsService,
@@ -54,12 +56,8 @@ describe("FindMetadataTypesSettingsController", () => {
54
56
  )
55
57
  .mockImplementationOnce(() => new MetadataTypesSettingsEntity(metadataTypesSettingsDto));
56
58
  jest
57
- .spyOn(
58
- controller.findAndUpdateMetadataSettingsLocalStorageService.organisationSettingsModel
59
- .organizationSettingsService,
60
- "find",
61
- )
62
- .mockImplementation(() => siteSettingsDto);
59
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
60
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
63
61
 
64
62
  const metadataTypesSettings = await controller.exec();
65
63
 
@@ -73,16 +71,12 @@ describe("FindMetadataTypesSettingsController", () => {
73
71
  it("get or find metadata types settings for a v4.", async () => {
74
72
  expect.assertions(3);
75
73
 
76
- const siteSettingsDto = defaultCeOrganizationSettings();
74
+ const siteSettingsDto = defaultCeSiteSettings();
77
75
  // disable the plugin metadata.
78
76
  delete siteSettingsDto.passbolt.plugins.metadata;
79
77
  jest
80
- .spyOn(
81
- controller.findAndUpdateMetadataSettingsLocalStorageService.organisationSettingsModel
82
- .organizationSettingsService,
83
- "find",
84
- )
85
- .mockImplementation(() => siteSettingsDto);
78
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
79
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
86
80
 
87
81
  const metadataTypesSettings = await controller.exec();
88
82
 
@@ -22,7 +22,9 @@ import {
22
22
  } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity.test.data";
23
23
  import MetadataTypesSettingsEntity from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity";
24
24
  import { enableFetchMocks } from "jest-fetch-mock";
25
- import { defaultCeOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
25
+ import { defaultCeSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
26
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
27
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
26
28
 
27
29
  beforeEach(() => {
28
30
  enableFetchMocks();
@@ -46,7 +48,7 @@ describe("GetResourceTypesController", () => {
46
48
  expect.assertions(3);
47
49
 
48
50
  const metadataTypesSettingsDto = defaultMetadataTypesSettingsV50FreshDto();
49
- const siteSettingsDto = defaultCeOrganizationSettings();
51
+ const siteSettingsDto = defaultCeSiteSettings();
50
52
  jest
51
53
  .spyOn(
52
54
  controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
@@ -55,12 +57,8 @@ describe("GetResourceTypesController", () => {
55
57
  )
56
58
  .mockImplementationOnce(() => new MetadataTypesSettingsEntity(metadataTypesSettingsDto));
57
59
  jest
58
- .spyOn(
59
- controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
60
- .organisationSettingsModel.organizationSettingsService,
61
- "find",
62
- )
63
- .mockImplementation(() => siteSettingsDto);
60
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
61
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
64
62
 
65
63
  const metadataTypesSettings = await controller.exec();
66
64
 
@@ -73,16 +71,12 @@ describe("GetResourceTypesController", () => {
73
71
  it("get or find metadata types settings for a v4.", async () => {
74
72
  expect.assertions(3);
75
73
 
76
- const siteSettingsDto = defaultCeOrganizationSettings();
74
+ const siteSettingsDto = defaultCeSiteSettings();
77
75
  // disable the plugin metadata.
78
76
  delete siteSettingsDto.passbolt.plugins.metadata;
79
77
  jest
80
- .spyOn(
81
- controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
82
- .organisationSettingsModel.organizationSettingsService,
83
- "find",
84
- )
85
- .mockImplementation(() => siteSettingsDto);
78
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
79
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
86
80
 
87
81
  const metadataTypesSettings = await controller.exec();
88
82