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
@@ -11,59 +11,26 @@
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
12
  * @since 3.0.0
13
13
  */
14
- import Log from "../../model/log";
15
14
  import ResourceTypesCollection from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection";
16
- import { assertType } from "../../utils/assertions";
15
+ import AbstractLocalStorage from "./abstractLocalStorage";
17
16
 
18
- const RESOURCE_TYPES_LOCAL_STORAGE_KEY = "resourceTypes";
17
+ export const RESOURCE_TYPES_LOCAL_STORAGE_KEY = "resource_types";
19
18
 
20
- class ResourceTypeLocalStorage {
19
+ class ResourceTypeLocalStorage extends AbstractLocalStorage {
21
20
  /**
22
- * Get the storage key.
23
- * @private
21
+ * Get the key property
22
+ * @return {string}
24
23
  */
25
- static get storageKey() {
24
+ get key() {
26
25
  return RESOURCE_TYPES_LOCAL_STORAGE_KEY;
27
26
  }
28
27
 
29
28
  /**
30
- * Flush the resourceTypes local storage
31
- *
32
- * @throws {Error} if operation failed
33
- * @return {Promise<void>}
29
+ * Get the entityClass
30
+ * @return {ResourceTypesCollection}
34
31
  */
35
- static async flush() {
36
- Log.write({ level: "debug", message: "ResourceTypeLocalStorage flushed" });
37
- return await browser.storage.local.remove(this.storageKey);
38
- }
39
-
40
- /**
41
- * Set the resourceTypes local storage.
42
- *
43
- * @throws {Error} if operation failed
44
- * @return {Promise<ResourceTypesCollectionDto>} results object, containing every object in keys that was found in the storage area.
45
- * If storage is not set, undefined will be returned.
46
- */
47
- static async get() {
48
- const { resourceTypes } = await browser.storage.local.get([this.storageKey]);
49
- return resourceTypes;
50
- }
51
-
52
- /**
53
- * Set the resourceTypes in local storage.
54
- * @param {ResourceTypesCollection} resourceTypesCollection The folders to insert in the local storage.
55
- * @return {Promise<void>}
56
- * @throws {TypeError} if the given argument is not a ResourceTypesCollection
57
- */
58
- static async set(resourceTypesCollection) {
59
- assertType(
60
- resourceTypesCollection,
61
- ResourceTypesCollection,
62
- "ResourceTypeLocalStorage::set expects a ResourceTypesCollection",
63
- );
64
- await navigator.locks.request(this.storageKey, async () => {
65
- await browser.storage.local.set({ [this.storageKey]: resourceTypesCollection.toDto() });
66
- });
32
+ get entityClass() {
33
+ return ResourceTypesCollection;
67
34
  }
68
35
  }
69
36
 
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2023 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2023 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 4.1.0
13
+ */
14
+ import ResourceTypeLocalStorage from "./resourceTypeLocalStorage";
15
+ import { resourceTypeV5DefaultDto } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypeEntity.test.data";
16
+ import ResourceTypeEntity from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypeEntity";
17
+ import ResourceTypesCollection from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection";
18
+ import GetLegacyAccountService from "../account/getLegacyAccountService";
19
+ import AccountEntity from "../../model/entity/account/accountEntity";
20
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
21
+
22
+ describe("ResourceTypeLocalStorage", () => {
23
+ // mock data
24
+ const account = new AccountEntity(defaultAccountDto());
25
+ // spy on
26
+ jest.spyOn(GetLegacyAccountService, "get").mockImplementation(() => account);
27
+
28
+ describe("ResourceTypeLocalStorage::get", () => {
29
+ it("Should return undefined if nothing stored in the storage", async () => {
30
+ expect.assertions(1);
31
+ const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
32
+ const result = await resourceTypeLocalstorage.getData();
33
+ expect(result).toEqual(undefined);
34
+ });
35
+
36
+ it("Should return content stored in the local storage", async () => {
37
+ const resourceTypes = [resourceTypeV5DefaultDto()];
38
+ expect.assertions(1);
39
+ const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
40
+ browser.storage.local.set({ [resourceTypeLocalstorage.storageDataKey]: resourceTypes });
41
+ const result = await resourceTypeLocalstorage.getData();
42
+ expect(result).toEqual(resourceTypes);
43
+ });
44
+ });
45
+
46
+ describe("ResourceTypeLocalStorage::setData", () => {
47
+ it("Should setData a resourceType colection in the local storage", async () => {
48
+ expect.assertions(2);
49
+ const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
50
+ const resourceType = new ResourceTypeEntity(resourceTypeV5DefaultDto());
51
+ const resourceTypesCollection = new ResourceTypesCollection([resourceType]);
52
+ await resourceTypeLocalstorage.setData(resourceTypesCollection);
53
+ const resourceTypes = await resourceTypeLocalstorage.getData();
54
+ expect(resourceTypes).toHaveLength(1);
55
+ expect(resourceTypes[0]).toEqual(resourceType.toDto(ResourceTypeEntity.ALL_CONTAIN_OPTIONS));
56
+ });
57
+ });
58
+
59
+ describe("ResourceTypeLocalStorage::flush", () => {
60
+ it("Should flush all the resourceType from the local storage", async () => {
61
+ expect.assertions(1);
62
+ const resourceTypeLocalstorage = new ResourceTypeLocalStorage(account);
63
+ await resourceTypeLocalstorage.flush();
64
+ const resourceTypes = await resourceTypeLocalstorage.getData();
65
+ expect(resourceTypes).toEqual(undefined);
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 6.0.0
13
+ */
14
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
15
+ import AbstractAccountEntity from "../../model/entity/account/abstractAccountEntity";
16
+
17
+ export const SITE_SETTINGS = "site-settings";
18
+
19
+ /**
20
+ * Per-account local storage for site settings, backed by `browser.storage.local`
21
+ * under the key `site-settings-{accountId}`, with an in-memory runtime cache.
22
+ */
23
+ class SiteSettingsLocalStorage {
24
+ /**
25
+ * Runtime cached data.
26
+ * @key {string} account id
27
+ * @value {object} site settings dto
28
+ * @private
29
+ */
30
+ static _runtimeCachedData = {};
31
+
32
+ /**
33
+ * @param {AccountEntity} account The user account.
34
+ */
35
+ constructor(account) {
36
+ if (!account || !(account instanceof AbstractAccountEntity)) {
37
+ throw new TypeError("Parameter `account` should be of type AbstractAccountEntity.");
38
+ }
39
+ this.account = account;
40
+ this.storageKey = this.getStorageKey(account);
41
+ }
42
+
43
+ /**
44
+ * Build the storage key for the given account.
45
+ * @param {AccountEntity} account
46
+ * @returns {string}
47
+ */
48
+ getStorageKey(account) {
49
+ return `${SITE_SETTINGS}-${account.id}`;
50
+ }
51
+
52
+ /**
53
+ * Flush site settings from the local storage and runtime cache.
54
+ * @returns {Promise<void>}
55
+ */
56
+ async flush() {
57
+ await browser.storage.local.remove(this.storageKey);
58
+ delete SiteSettingsLocalStorage._runtimeCachedData[this.account.id];
59
+ console.debug(`Site settings flushed for (${this.account.id})`);
60
+ }
61
+
62
+ /**
63
+ * Get the site settings dto from local storage (or in-memory cache).
64
+ * @returns {Promise<object|undefined>}
65
+ */
66
+ async get() {
67
+ if (!SiteSettingsLocalStorage._runtimeCachedData[this.account.id]) {
68
+ const data = await browser.storage.local.get([this.storageKey]);
69
+ if (!data[this.storageKey]) {
70
+ return;
71
+ }
72
+ SiteSettingsLocalStorage._runtimeCachedData[this.account.id] = data[this.storageKey];
73
+ }
74
+ return SiteSettingsLocalStorage._runtimeCachedData[this.account.id];
75
+ }
76
+
77
+ /**
78
+ * Set the site settings in local storage.
79
+ * @param {SiteSettingsEntity} settings
80
+ * @returns {Promise<void>}
81
+ * @throws {TypeError} If parameter settings is not of type SiteSettingsEntity.
82
+ */
83
+ async set(settings) {
84
+ if (!settings || !(settings instanceof SiteSettingsEntity)) {
85
+ throw new TypeError("Parameter `settings` should be of type SiteSettingsEntity.");
86
+ }
87
+ await navigator.locks.request(this.storageKey, async () => {
88
+ const settingsDto = settings.toDto();
89
+ await this._setBrowserStorage({ [this.storageKey]: settingsDto });
90
+ SiteSettingsLocalStorage._runtimeCachedData[this.account.id] = settingsDto;
91
+ });
92
+ }
93
+
94
+ /**
95
+ * @param {object} data
96
+ * @returns {Promise<void>}
97
+ * @private
98
+ */
99
+ async _setBrowserStorage(data) {
100
+ await browser.storage.local.set(data);
101
+ }
102
+ }
103
+
104
+ export default SiteSettingsLocalStorage;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 6.0.0
13
+ */
14
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
15
+ import AccountEntity from "../../model/entity/account/accountEntity";
16
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
17
+ import { defaultProSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
18
+ import SiteSettingsLocalStorage, { SITE_SETTINGS } from "./siteSettingsLocalStorage";
19
+
20
+ beforeEach(() => {
21
+ jest.clearAllMocks();
22
+ });
23
+
24
+ describe("SiteSettingsLocalStorage", () => {
25
+ let account, storage;
26
+
27
+ beforeEach(async () => {
28
+ account = new AccountEntity(defaultAccountDto());
29
+ storage = new SiteSettingsLocalStorage(account);
30
+ await storage.flush();
31
+ });
32
+
33
+ describe("::constructor", () => {
34
+ it("derives a per-account storage key", () => {
35
+ expect.assertions(1);
36
+ expect(storage.storageKey).toBe(`${SITE_SETTINGS}-${account.id}`);
37
+ });
38
+
39
+ it("throws when account is missing", () => {
40
+ expect.assertions(1);
41
+ expect(() => new SiteSettingsLocalStorage(null)).toThrow(TypeError);
42
+ });
43
+
44
+ it("throws when account is not an AccountEntity", () => {
45
+ expect.assertions(1);
46
+ expect(() => new SiteSettingsLocalStorage({ id: "abc" })).toThrow(TypeError);
47
+ });
48
+ });
49
+
50
+ describe("::get", () => {
51
+ it("returns undefined when nothing is stored", async () => {
52
+ expect.assertions(1);
53
+ const result = await storage.get();
54
+ expect(result).toBeUndefined();
55
+ });
56
+
57
+ it("returns content stored in the local storage", async () => {
58
+ expect.assertions(1);
59
+ const dto = defaultProSiteSettings();
60
+ await browser.storage.local.set({ [storage.storageKey]: dto });
61
+ const result = await storage.get();
62
+ expect(result).toEqual(dto);
63
+ });
64
+
65
+ it("populates the runtime cache on the first read", async () => {
66
+ expect.assertions(2);
67
+ const dto = defaultProSiteSettings();
68
+ await browser.storage.local.set({ [storage.storageKey]: dto });
69
+ expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toBeUndefined();
70
+ await storage.get();
71
+ expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toEqual(dto);
72
+ });
73
+
74
+ it("subsequent reads come from the runtime cache and skip browser.storage", async () => {
75
+ expect.assertions(2);
76
+ const dto = defaultProSiteSettings();
77
+ await browser.storage.local.set({ [storage.storageKey]: dto });
78
+ await storage.get();
79
+ const spy = jest.spyOn(browser.storage.local, "get");
80
+ const result = await storage.get();
81
+ expect(spy).not.toHaveBeenCalled();
82
+ expect(result).toEqual(dto);
83
+ });
84
+ });
85
+
86
+ describe("::set", () => {
87
+ it("writes the entity dto to local storage and runtime cache", async () => {
88
+ expect.assertions(3);
89
+ const entity = new SiteSettingsEntity(defaultProSiteSettings());
90
+ await storage.set(entity);
91
+ expect(browser.storage.local.store[storage.storageKey]).toEqual(entity.toDto());
92
+ expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toEqual(entity.toDto());
93
+ const result = await storage.get();
94
+ expect(result).toEqual(entity.toDto());
95
+ });
96
+
97
+ it("throws when settings is not a SiteSettingsEntity", async () => {
98
+ expect.assertions(2);
99
+ await expect(storage.set(null)).rejects.toThrow(TypeError);
100
+ await expect(storage.set({ status: "enabled" })).rejects.toThrow(TypeError);
101
+ });
102
+ });
103
+
104
+ describe("::flush", () => {
105
+ it("clears both browser.storage and the runtime cache", async () => {
106
+ expect.assertions(2);
107
+ const entity = new SiteSettingsEntity(defaultProSiteSettings());
108
+ await storage.set(entity);
109
+ await storage.flush();
110
+ expect(browser.storage.local.store[storage.storageKey]).toBeUndefined();
111
+ expect(SiteSettingsLocalStorage._runtimeCachedData[account.id]).toBeUndefined();
112
+ });
113
+ });
114
+ });
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 4.1.0
13
+ */
14
+
15
+ import UserEntity from "../../model/entity/user/userEntity";
16
+ import AbstractLocalStorage from "./abstractLocalStorage";
17
+
18
+ export const USER_ME_STORAGE_KEY_PREFIX = "user-me";
19
+
20
+ /**
21
+ * A cache service used to store the result of the requests made on the users me entry point.
22
+ */
23
+ class UserMeLocalStorage extends AbstractLocalStorage {
24
+ /**
25
+ * Get the key property
26
+ * @return {string}
27
+ */
28
+ get key() {
29
+ return USER_ME_STORAGE_KEY_PREFIX;
30
+ }
31
+
32
+ /**
33
+ * Get the en
34
+ * @return {BextUserEntity}
35
+ */
36
+ get entityClass() {
37
+ return UserEntity;
38
+ }
39
+
40
+ /**
41
+ * Get the contain options
42
+ * @return {{profile: function(): {avatar: boolean}, role: boolean, gpgkey: boolean, groups_users: boolean, account_recovery_user_setting: boolean, pending_account_recovery_request: boolean}}
43
+ * @constructor
44
+ */
45
+ static get DEFAULT_CONTAIN() {
46
+ return UserEntity.ALL_CONTAIN_OPTIONS;
47
+ }
48
+ }
49
+
50
+ export default UserMeLocalStorage;
@@ -12,38 +12,42 @@
12
12
  * @since 4.1.0
13
13
  */
14
14
 
15
- import UserMeSessionStorageService from "./userMeSessionStorageService";
15
+ import UserMeLocalStorage from "./userMeLocalStorage";
16
16
  import AccountEntity from "../../model/entity/account/accountEntity";
17
17
  import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
18
18
  import { defaultUserDto } from "passbolt-styleguide/src/shared/models/entity/user/userEntity.test.data";
19
19
  import UserEntity from "../../model/entity/user/userEntity";
20
20
  import ProfileEntity from "passbolt-styleguide/src/shared/models/entity/profile/profileEntity";
21
21
  import { v4 as uuidv4 } from "uuid";
22
+ import browser from "../../../common/polyfill/browserPolyfill";
22
23
 
23
- describe("UserMeSessionStorageService", () => {
24
+ describe("UserMeLocalStorage", () => {
24
25
  beforeEach(async () => {
25
- await browser.storage.session.clear();
26
+ await browser.storage.local.clear();
26
27
  });
27
28
 
28
- describe("UserMeSessionStorageService::get", () => {
29
+ describe("UserMeLocalStorage::get", () => {
29
30
  it("should return null if there is no data in the storage", async () => {
30
31
  expect.assertions(1);
31
32
  const account = new AccountEntity(defaultAccountDto());
32
- const cachedUser = await UserMeSessionStorageService.get(account);
33
- expect(cachedUser).toBeNull();
33
+ const userMeLocalStorage = new UserMeLocalStorage(account);
34
+ const cachedUser = await userMeLocalStorage.getData();
35
+ expect(cachedUser).toBeUndefined();
34
36
  });
35
37
 
36
38
  it("should return the user in cache associated to the passed account if one in cache", async () => {
37
39
  expect.assertions(4);
38
40
  const account = new AccountEntity(defaultAccountDto());
39
41
  const user = new UserEntity(defaultUserDto());
40
- await UserMeSessionStorageService.set(account, user);
42
+ const userMeLocalStorage = new UserMeLocalStorage(account);
43
+ await userMeLocalStorage.setData(user);
41
44
 
42
- const cachedUser = await UserMeSessionStorageService.get(account);
45
+ const cachedUser = new UserEntity(await userMeLocalStorage.getData());
43
46
  expect(cachedUser).not.toBeNull();
44
47
  expect(cachedUser).toBeInstanceOf(UserEntity);
45
48
  expect(cachedUser.id).toEqual(user.id);
46
49
  expect(cachedUser.profile).toBeInstanceOf(ProfileEntity);
50
+ await userMeLocalStorage.flush();
47
51
  });
48
52
 
49
53
  it("should return null if trying to access the cache of another account", async () => {
@@ -55,64 +59,74 @@ describe("UserMeSessionStorageService", () => {
55
59
  user_id: uuidv4(),
56
60
  }),
57
61
  );
62
+
63
+ const userMeLocalStorage = new UserMeLocalStorage(account);
64
+ const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
58
65
  const user = new UserEntity(defaultUserDto());
59
- await UserMeSessionStorageService.set(account, user);
66
+ await userMeLocalStorage.setData(user);
60
67
 
61
- const cachedUserOtherAccount = await UserMeSessionStorageService.get(otherAccount);
62
- expect(cachedUserOtherAccount).toBeNull();
68
+ const cachedUserOtherAccount = await userMeLocalStorageOtherAccount.getData();
69
+ expect(cachedUserOtherAccount).toBeUndefined();
63
70
  });
64
71
 
65
72
  it("should return the cached user for the given account even if there are other cached users for other accounts", async () => {
66
73
  expect.assertions(2);
67
74
  const otherAccount = new AccountEntity(defaultAccountDto());
68
75
  const userOtherAccount = new UserEntity(defaultUserDto());
69
- await UserMeSessionStorageService.set(otherAccount, userOtherAccount);
76
+ const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
77
+ await userMeLocalStorageOtherAccount.setData(userOtherAccount);
70
78
 
71
79
  const account = new AccountEntity(defaultAccountDto());
72
80
  const user = new UserEntity(defaultUserDto());
73
- await UserMeSessionStorageService.set(account, user);
81
+ const userMeLocalStorage = new UserMeLocalStorage(account);
82
+ await userMeLocalStorage.setData(user);
74
83
 
75
- const cachedUser = await UserMeSessionStorageService.get(account);
84
+ const cachedUser = await userMeLocalStorage.getData();
76
85
  expect(cachedUser).not.toBeNull();
77
86
  expect(cachedUser.id).toEqual(user.id);
78
87
  });
79
88
  });
80
89
 
81
- describe("UserMeSessionStorageService::set", () => {
90
+ describe("UserMeLocalStorage::set", () => {
82
91
  it("should override an existing cached user if one already present", async () => {
83
92
  expect.assertions(3);
84
93
 
85
94
  const account = new AccountEntity(defaultAccountDto());
86
95
  const user = new UserEntity(defaultUserDto());
87
- await UserMeSessionStorageService.set(account, user);
88
- await UserMeSessionStorageService.set(account, user);
96
+ const userMeLocalStorage = new UserMeLocalStorage(account);
97
+ await userMeLocalStorage.setData(user);
98
+ await userMeLocalStorage.setData(user);
89
99
 
90
- expect(Object.keys(await browser.storage.session.get()).length).toEqual(1);
91
- const cachedUser = await UserMeSessionStorageService.get(account);
100
+ // One for data and another one for metadata
101
+ expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
102
+ const cachedUser = await userMeLocalStorage.getData();
92
103
  expect(cachedUser).not.toBeNull();
93
104
  expect(cachedUser.id).toEqual(user.id);
94
105
  });
95
106
  });
96
107
 
97
- describe("UserMeSessionStorageService::remove", () => {
98
- it("should not crash if nothing to remove", async () => {
108
+ describe("UserMeLocalStorage::flush", () => {
109
+ it("should not crash if nothing to flush", async () => {
99
110
  expect.assertions(1);
100
111
 
101
112
  const account = new AccountEntity(defaultAccountDto());
102
- await UserMeSessionStorageService.remove(account);
103
- expect(true).toBeTruthy();
113
+ const userMeLocalStorage = new UserMeLocalStorage(account);
114
+ await userMeLocalStorage.flush();
115
+ const cachedUser = await userMeLocalStorage.getData();
116
+ expect(cachedUser).toBeUndefined();
104
117
  });
105
118
 
106
- it("should remove a cached user", async () => {
119
+ it("should flush a cached user", async () => {
107
120
  expect.assertions(1);
108
121
 
109
122
  const account = new AccountEntity(defaultAccountDto());
110
123
  const user = new UserEntity(defaultUserDto());
111
- await UserMeSessionStorageService.set(account, user);
124
+ const userMeLocalStorage = new UserMeLocalStorage(account);
125
+ await userMeLocalStorage.setData(user);
112
126
 
113
- await UserMeSessionStorageService.remove(account);
127
+ await userMeLocalStorage.flush();
114
128
 
115
- expect(Object.keys(await browser.storage.session.get()).length).toEqual(0);
129
+ expect(Object.keys(await browser.storage.local.get()).length).toEqual(0);
116
130
  });
117
131
 
118
132
  it("should not remove another cached user if there is none for the given account", async () => {
@@ -124,13 +138,15 @@ describe("UserMeSessionStorageService", () => {
124
138
  }),
125
139
  );
126
140
  const userOtherAccount = new UserEntity(defaultUserDto());
127
- await UserMeSessionStorageService.set(otherAccount, userOtherAccount);
141
+ const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
142
+ await userMeLocalStorageOtherAccount.setData(userOtherAccount);
128
143
 
129
144
  const account = new AccountEntity(defaultAccountDto());
145
+ const userMeLocalStorage = new UserMeLocalStorage(account);
146
+ await userMeLocalStorage.flush();
130
147
 
131
- await UserMeSessionStorageService.remove(account);
132
-
133
- expect(Object.keys(await browser.storage.session.get()).length).toEqual(1);
148
+ // One for data and another one for metadata
149
+ expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
134
150
  });
135
151
 
136
152
  it("should not remove another cached user if there is a cached user for the given account", async () => {
@@ -142,16 +158,19 @@ describe("UserMeSessionStorageService", () => {
142
158
  }),
143
159
  );
144
160
  const userOtherAccount = new UserEntity(defaultUserDto());
145
- await UserMeSessionStorageService.set(otherAccount, userOtherAccount);
161
+ const userMeLocalStorageOtherAccount = new UserMeLocalStorage(otherAccount);
162
+ await userMeLocalStorageOtherAccount.setData(userOtherAccount);
146
163
 
147
164
  const account = new AccountEntity(defaultAccountDto());
148
165
  const user = new UserEntity(defaultUserDto());
149
- await UserMeSessionStorageService.set(account, user);
166
+ const userMeLocalStorage = new UserMeLocalStorage(account);
167
+ await userMeLocalStorage.setData(user);
150
168
 
151
- await UserMeSessionStorageService.remove(account);
169
+ await userMeLocalStorage.flush();
152
170
 
153
- expect(Object.keys(await browser.storage.session.get()).length).toEqual(1);
154
- const cachedUserOtherAccount = await UserMeSessionStorageService.get(otherAccount);
171
+ // One for data and another one for metadata
172
+ expect(Object.keys(await browser.storage.local.get()).length).toEqual(2);
173
+ const cachedUserOtherAccount = await userMeLocalStorageOtherAccount.getData();
155
174
  expect(cachedUserOtherAccount).not.toBeNull();
156
175
  expect(cachedUserOtherAccount.id).toEqual(userOtherAccount.id);
157
176
  });
@@ -25,13 +25,13 @@ import FolderEntity from "../../model/entity/folder/folderEntity";
25
25
  import GetOrFindMetadataSettingsService from "./getOrFindMetadataSettingsService";
26
26
  import FoldersCollection from "../../model/entity/folder/foldersCollection";
27
27
  import ResourcesCollection from "../../model/entity/resource/resourcesCollection";
28
- import ResourceTypeModel from "../../model/resourceType/resourceTypeModel";
29
28
  import { RESOURCE_TYPE_VERSION_5 } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataTypesSettingsEntity";
30
29
  import Keyring from "../../model/keyring";
31
30
  import ExternalGpgKeyEntity from "passbolt-styleguide/src/shared/models/entity/gpgkey/externalGpgKeyEntity";
32
31
  import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
33
32
  import CollectionValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/collectionValidationError";
34
33
  import EntityValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/entityValidationError";
34
+ import GetOrFindResourceTypesService from "../resourceType/getOrFindResourceTypesService";
35
35
 
36
36
  class EncryptMetadataService {
37
37
  /**
@@ -42,7 +42,7 @@ class EncryptMetadataService {
42
42
  constructor(apiClientOptions, account) {
43
43
  this.getOrFindMetadataSettingsService = new GetOrFindMetadataSettingsService(account, apiClientOptions);
44
44
  this.getOrFindMetadataKeysService = new GetOrFindMetadataKeysService(account, apiClientOptions);
45
- this.resourceTypesModel = new ResourceTypeModel(apiClientOptions);
45
+ this.getOrFindResourceTypesService = new GetOrFindResourceTypesService(account, apiClientOptions);
46
46
  this.account = account;
47
47
  this.keyring = new Keyring();
48
48
  this._usersPublicGpgKeys = {};
@@ -123,7 +123,7 @@ class EncryptMetadataService {
123
123
  throw new Error("Unable to encrypt the collection metadata, a resource metadata is already encrypted.");
124
124
  }
125
125
 
126
- const resourceTypesV5Collection = await this.resourceTypesModel.getOrFindAll();
126
+ const resourceTypesV5Collection = await this.getOrFindResourceTypesService.getOrFindAll();
127
127
  resourceTypesV5Collection.filterByResourceTypeVersion(RESOURCE_TYPE_VERSION_5);
128
128
  // No need to encrypt metadata of resource type v4.
129
129
  if (