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
@@ -1,168 +0,0 @@
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 5.13.0
13
- */
14
-
15
- import { v4 as uuidv4 } from "uuid";
16
- import AccountEntity from "../../model/entity/account/accountEntity";
17
- import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
18
- import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
19
- import GetOrFindGroupsService from "./getOrFindGroupsService";
20
- import FindAndUpdateGroupsLocalStorageService from "./findAndUpdateGroupsLocalStorageService";
21
- import FindGroupsService from "./findGroupsService";
22
- import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
23
- import GroupLocalStorage from "../local_storage/groupLocalStorage";
24
- import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
25
-
26
- describe("GetOrFindGroupsService", () => {
27
- let service, account;
28
-
29
- beforeEach(async () => {
30
- jest.clearAllMocks();
31
- account = new AccountEntity(defaultAccountDto());
32
- service = new GetOrFindGroupsService(account, defaultApiClientOptions());
33
- // flush account related storage before each.
34
- await service.groupLocalStorage.flush();
35
- });
36
-
37
- describe("::getOrFindAll", () => {
38
- it("fetches from the API and initializes the local storage with an empty array when the API returns no groups.", async () => {
39
- expect.assertions(4);
40
- jest
41
- .spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
42
- .mockImplementation(() => new GroupsCollection([]));
43
- jest.spyOn(FindAndUpdateGroupsLocalStorageService.prototype, "findAndUpdateAll");
44
-
45
- const groups = await service.getOrFindAll();
46
-
47
- expect(FindAndUpdateGroupsLocalStorageService.prototype.findAndUpdateAll).toHaveBeenCalledTimes(1);
48
- expect(groups).toBeInstanceOf(GroupsCollection);
49
- expect(groups).toHaveLength(0);
50
- expect(await service.groupLocalStorage.get()).toEqual([]);
51
- });
52
-
53
- it("fetches the groups from the API and populates the local storage when the local storage is not initialized.", async () => {
54
- expect.assertions(4);
55
- const groupsDto = defaultGroupsDtos();
56
- jest
57
- .spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
58
- .mockImplementation(() => new GroupsCollection(groupsDto));
59
-
60
- const groups = await service.getOrFindAll();
61
-
62
- expect(groups).toHaveLength(groupsDto.length);
63
- expect(groups.toDto(GroupLocalStorage.DEFAULT_CONTAIN)).toEqual(groupsDto);
64
- expect(GroupLocalStorage.hasCachedData(account.id)).toBeTruthy();
65
- expect(await service.groupLocalStorage.get()).toEqual(groupsDto);
66
- });
67
-
68
- it("retrieves groups from the local storage when the local storage is initialized.", async () => {
69
- expect.assertions(5);
70
- const groupsDto = defaultGroupsDtos();
71
- jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
72
- await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
73
-
74
- const groups = await service.getOrFindAll();
75
-
76
- expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
77
- expect(groups).toHaveLength(groupsDto.length);
78
- expect(groups.toDto(GroupLocalStorage.DEFAULT_CONTAIN)).toEqual(groupsDto);
79
- expect(GroupLocalStorage.hasCachedData(account.id)).toBeTruthy();
80
- expect(await service.groupLocalStorage.get()).toEqual(groupsDto);
81
- });
82
-
83
- it("does not validate the groups collection if the information is retrieved from the runtime cache.", async () => {
84
- expect.assertions(2);
85
- jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
86
- await service.groupLocalStorage.set(new GroupsCollection(defaultGroupsDtos()));
87
- jest.spyOn(GroupsCollection.prototype, "validateSchema");
88
-
89
- await service.getOrFindAll();
90
-
91
- expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
92
- // Validation must not be triggered by getOrFindAll when the data comes from the runtime cache.
93
- expect(GroupsCollection.prototype.validateSchema).not.toHaveBeenCalled();
94
- });
95
-
96
- it("validates groups collection if the local storage has no runtime cache and the information is retrieved from the local storage.", async () => {
97
- expect.assertions(2);
98
- jest.spyOn(FindGroupsService.prototype, "findAllForLocalStorage");
99
- await service.groupLocalStorage.set(new GroupsCollection(defaultGroupsDtos()));
100
- delete GroupLocalStorage._runtimeCachedData[account.id];
101
- jest.spyOn(GroupsCollection.prototype, "validateSchema");
102
-
103
- await service.getOrFindAll();
104
-
105
- expect(FindGroupsService.prototype.findAllForLocalStorage).not.toHaveBeenCalled();
106
- // Validation must be triggered by getOrFindAll when the data is loaded from the disk cache.
107
- expect(GroupsCollection.prototype.validateSchema).toHaveBeenCalled();
108
- });
109
- });
110
-
111
- describe("::getOrFindByIds", () => {
112
- it("returns only the groups whose ids are in the requested set.", async () => {
113
- expect.assertions(2);
114
- const groupsDto = defaultGroupsDtos();
115
- await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
116
- const requestedIds = [groupsDto[1].id, groupsDto[3].id, groupsDto[5].id];
117
-
118
- const groups = await service.getOrFindByIds(requestedIds);
119
-
120
- expect(groups).toHaveLength(3);
121
- expect(groups.extract("id").sort()).toEqual([...requestedIds].sort());
122
- });
123
-
124
- it("returns an empty collection when none of the ids match.", async () => {
125
- expect.assertions(1);
126
- const groupsDto = defaultGroupsDtos();
127
- await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
128
-
129
- const groups = await service.getOrFindByIds([uuidv4(), uuidv4()]);
130
-
131
- expect(groups).toHaveLength(0);
132
- });
133
-
134
- it("returns all groups when every group id is requested.", async () => {
135
- expect.assertions(2);
136
- const groupsDto = defaultGroupsDtos();
137
- await service.groupLocalStorage.set(new GroupsCollection(groupsDto));
138
- const allIds = groupsDto.map((group) => group.id);
139
-
140
- const groups = await service.getOrFindByIds(allIds);
141
-
142
- expect(groups).toHaveLength(groupsDto.length);
143
- expect(groups.extract("id").sort()).toEqual([...allIds].sort());
144
- });
145
-
146
- it("fetches from the API when the local storage is not initialized, then filters.", async () => {
147
- expect.assertions(3);
148
- const groupsDto = defaultGroupsDtos();
149
- jest
150
- .spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
151
- .mockImplementation(() => new GroupsCollection(groupsDto));
152
- const requestedIds = [groupsDto[0].id, groupsDto[2].id];
153
-
154
- const groups = await service.getOrFindByIds(requestedIds);
155
-
156
- expect(FindGroupsService.prototype.findAllForLocalStorage).toHaveBeenCalledTimes(1);
157
- expect(groups).toHaveLength(2);
158
- expect(groups.extract("id").sort()).toEqual([...requestedIds].sort());
159
- });
160
-
161
- it("should assert its parameter.", async () => {
162
- expect.assertions(1);
163
- await expect(() => service.getOrFindByIds(["not-a-uuid"])).rejects.toThrow(
164
- "The given parameter is not a valid array of uuid",
165
- );
166
- });
167
- });
168
- });
@@ -1,51 +0,0 @@
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 5.13.0
13
- */
14
- import GroupsUsersCollection from "passbolt-styleguide/src/shared/models/entity/groupUser/groupsUsersCollection";
15
- import GetOrFindGroupsService from "./getOrFindGroupsService";
16
- import { assertUuid } from "../../utils/assertions";
17
-
18
- /**
19
- * The service aims to retrieve the group members of a given group from the local storage cache
20
- * served by `GetOrFindGroupsService`, falling back to the API on a cold cache.
21
- */
22
- class GetOrFindGroupsUsersService {
23
- /**
24
- * Constructor.
25
- * @param {AccountEntity} account The user account.
26
- * @param {ApiClientOptions} apiClientOptions The api client options.
27
- */
28
- constructor(account, apiClientOptions) {
29
- this.getOrFindGroupsService = new GetOrFindGroupsService(account, apiClientOptions);
30
- }
31
-
32
- /**
33
- * Get or find the members of the group matching the given id.
34
- * @param {string} groupId The id of the group whose members are requested.
35
- * @returns {Promise<GroupsUsersCollection>}
36
- * @throws {Error} If no group is found for the given id.
37
- */
38
- async getOrFindByGroupId(groupId) {
39
- assertUuid(groupId);
40
-
41
- const groupsCollection = await this.getOrFindGroupsService.getOrFindAll();
42
- const group = groupsCollection.getFirst("id", groupId);
43
- if (!group) {
44
- throw new Error(`The group with id ${groupId} could not be found.`);
45
- }
46
-
47
- return group.groupsUsers ?? new GroupsUsersCollection([]);
48
- }
49
- }
50
-
51
- export default GetOrFindGroupsUsersService;
@@ -1,94 +0,0 @@
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 5.13.0
13
- */
14
-
15
- import { v4 as uuidv4 } from "uuid";
16
- import AccountEntity from "../../model/entity/account/accountEntity";
17
- import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
18
- import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
19
- import GetOrFindGroupsUsersService from "./getOrFindGroupsUsersService";
20
- import FindGroupsService from "./findGroupsService";
21
- import GroupsCollection from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection";
22
- import GroupsUsersCollection from "passbolt-styleguide/src/shared/models/entity/groupUser/groupsUsersCollection";
23
- import { defaultGroupsDtos } from "passbolt-styleguide/src/shared/models/entity/group/groupsCollection.test.data";
24
-
25
- describe("GetOrFindGroupsUsersService", () => {
26
- let service, account;
27
-
28
- beforeEach(async () => {
29
- jest.clearAllMocks();
30
- account = new AccountEntity(defaultAccountDto());
31
- service = new GetOrFindGroupsUsersService(account, defaultApiClientOptions());
32
- // flush account related storage before each.
33
- await service.getOrFindGroupsService.groupLocalStorage.flush();
34
- });
35
-
36
- describe("::getOrFindByGroupId", () => {
37
- it("returns the members of the requested group when the local storage is populated.", async () => {
38
- expect.assertions(3);
39
- const groupsDto = defaultGroupsDtos(5, { withGroupsUsers: 3 });
40
- await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
41
- const targetGroup = groupsDto[2];
42
-
43
- const result = await service.getOrFindByGroupId(targetGroup.id);
44
-
45
- expect(result).toBeInstanceOf(GroupsUsersCollection);
46
- expect(result).toHaveLength(3);
47
- expect(result.items.every((groupUser) => groupUser.groupId === targetGroup.id)).toBe(true);
48
- });
49
-
50
- it("returns an empty GroupsUsersCollection when the group has no members.", async () => {
51
- expect.assertions(2);
52
- const groupsDto = defaultGroupsDtos(1, { withGroupsUsers: 0 });
53
- await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
54
-
55
- const result = await service.getOrFindByGroupId(groupsDto[0].id);
56
-
57
- expect(result).toBeInstanceOf(GroupsUsersCollection);
58
- expect(result).toHaveLength(0);
59
- });
60
-
61
- it("fetches from the API when the local storage is not initialized, then returns the requested group's members.", async () => {
62
- expect.assertions(3);
63
- const groupsDto = defaultGroupsDtos(3, { withGroupsUsers: 2 });
64
- jest
65
- .spyOn(FindGroupsService.prototype, "findAllForLocalStorage")
66
- .mockImplementation(() => new GroupsCollection(groupsDto));
67
- const targetGroup = groupsDto[1];
68
-
69
- const result = await service.getOrFindByGroupId(targetGroup.id);
70
-
71
- expect(FindGroupsService.prototype.findAllForLocalStorage).toHaveBeenCalledTimes(1);
72
- expect(result).toBeInstanceOf(GroupsUsersCollection);
73
- expect(result).toHaveLength(2);
74
- });
75
-
76
- it("throws when the group id does not exist.", async () => {
77
- expect.assertions(1);
78
- const groupsDto = defaultGroupsDtos();
79
- await service.getOrFindGroupsService.groupLocalStorage.set(new GroupsCollection(groupsDto));
80
- const missingId = uuidv4();
81
-
82
- await expect(() => service.getOrFindByGroupId(missingId)).rejects.toThrow(
83
- `The group with id ${missingId} could not be found.`,
84
- );
85
- });
86
-
87
- it("should assert its parameter.", async () => {
88
- expect.assertions(1);
89
- await expect(() => service.getOrFindByGroupId("not-a-uuid")).rejects.toThrow(
90
- "The given parameter is not a valid UUID",
91
- );
92
- });
93
- });
94
- });
@@ -1,70 +0,0 @@
1
- /**
2
- * Passbolt ~ Open source password manager for teams
3
- * Copyright (c) Passbolt SARL (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 2.13.4
13
- */
14
- import Log from "../../model/log";
15
-
16
- const AUTH_STATUS_STORAGE_KEY = "auth_status";
17
-
18
- class AuthStatusLocalStorage {
19
- /**
20
- * Get the storage key.
21
- */
22
- static get storageKey() {
23
- return AUTH_STATUS_STORAGE_KEY;
24
- }
25
-
26
- /**
27
- * Flush the folders local storage
28
- *
29
- * @throws {Error} if operation failed
30
- * @return {Promise<void>}
31
- */
32
- static async flush() {
33
- Log.write({ level: "debug", message: "AuthStatusLocalStorage flushed" });
34
- return await browser.storage.local.remove(this.storageKey);
35
- }
36
-
37
- /**
38
- * Set the folders local storage.
39
- *
40
- * @throws {Error} if operation failed
41
- * @return {Promise} results object, containing every object in keys that was found in the storage area.
42
- * If storage is not set, undefined will be returned.
43
- */
44
- static async get() {
45
- const result = await browser.storage.local.get([this.storageKey]);
46
- if (result) {
47
- return result[this.storageKey];
48
- }
49
- return undefined;
50
- }
51
-
52
- /**
53
- * Set the folders local storage.
54
- *
55
- * @param {boolean} isAuthenticated
56
- * @param {boolean} isMfaRequired
57
- * @return {Promise<void>}
58
- */
59
- static async set(isAuthenticated, isMfaRequired) {
60
- await navigator.locks.request(this.storageKey, async () => {
61
- const auth_status = {
62
- isAuthenticated: Boolean(isAuthenticated),
63
- isMfaRequired: Boolean(isMfaRequired),
64
- };
65
- await browser.storage.local.set({ [this.storageKey]: auth_status });
66
- });
67
- }
68
- }
69
-
70
- export default AuthStatusLocalStorage;
@@ -1,94 +0,0 @@
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
-
17
- const USER_ME_STORAGE_KEY_PREFIX = "user-me";
18
-
19
- /**
20
- * A cache service used to store the result of the requests made on the users me entry point.
21
- */
22
- class UserMeSessionStorageService {
23
- /**
24
- * Get the storage key.
25
- * @param {AbstractAccountEntity} account The account to get the key for.
26
- * @returns {string}
27
- * @throws {Error} If it cannot retrieve account id.
28
- */
29
- static getStorageKey(account) {
30
- if (!account.id) {
31
- throw new Error("Cannot retrieve account id, necessary to get a users me storage key.");
32
- }
33
- return `${USER_ME_STORAGE_KEY_PREFIX}-${account.id}`;
34
- }
35
-
36
- /**
37
- * Get a user me cached data for a given account.
38
- * @param {AbstractAccountEntity} account The account to get the cached data for.
39
- * @returns {Promise<UserEntity|null>} Return the user me cached entity or null if the cache was not initialized.
40
- * Note that in case the cache would be invalid, it would return null as well.
41
- * @throws {Error} If it cannot get the storage key.
42
- */
43
- static async get(account) {
44
- const storageKey = this.getStorageKey(account);
45
- let storageData;
46
-
47
- try {
48
- storageData = await browser.storage.session.get(storageKey);
49
- } catch (error) {
50
- throw new Error("Unable to access the user me session storage", { cause: error });
51
- }
52
-
53
- const userMeDto = storageData?.[storageKey];
54
-
55
- if (userMeDto) {
56
- try {
57
- return new UserEntity(userMeDto);
58
- } catch (error) {
59
- console.debug("Unable to instantiate the user entity based on the cached user dto.", error);
60
- }
61
- }
62
-
63
- return null;
64
- }
65
-
66
- /**
67
- * Cache a user me data for a given account.
68
- * @param {AbstractAccountEntity} account The account to get the cached data for.
69
- * @param {UserEntity} user The user me to cache
70
- * @returns {Promise<void>}
71
- */
72
- static async set(account, user) {
73
- const storageKey = this.getStorageKey(account);
74
-
75
- await navigator.locks.request(storageKey, async () => {
76
- await browser.storage.session.set({ [storageKey]: user.toDto(UserEntity.ALL_CONTAIN_OPTIONS) });
77
- });
78
- }
79
-
80
- /**
81
- * Remove the cached data for a given account.
82
- * @param {AbstractAccountEntity} account The account to get the cached data for.
83
- * @returns {Promise<void>}
84
- */
85
- static async remove(account) {
86
- const storageKey = this.getStorageKey(account);
87
-
88
- await navigator.locks.request(storageKey, async () => {
89
- await browser.storage.session.remove(storageKey);
90
- });
91
- }
92
- }
93
-
94
- export default UserMeSessionStorageService;