passbolt-browser-extension 5.13.0 → 5.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/.devcontainer/Dockerfile +33 -3
  2. package/.devcontainer/devcontainer-lock.json +9 -0
  3. package/.devcontainer/post-start.sh +1 -2
  4. package/.github/workflows/codeql-analysis.yml +2 -1
  5. package/.github/workflows/release_candidate.yaml +3 -1
  6. package/.gitlab-ci.yml +1 -0
  7. package/CHANGELOG.md +202 -70
  8. package/CODEOWNERS +2 -0
  9. package/RELEASE_NOTES.md +4 -2
  10. package/package.json +9 -7
  11. package/renovate.json +6 -0
  12. package/src/all/background_page/controller/InformMenuController/InformMenuController.js +2 -5
  13. package/src/all/background_page/controller/InformMenuController/InformMenuController.test.js +31 -1
  14. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.js +1 -1
  15. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.test.js +6 -14
  16. package/src/all/background_page/controller/account/updatePrivateKeyController.js +7 -5
  17. package/src/all/background_page/controller/account/updatePrivateKeyController.test.js +18 -13
  18. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.js +4 -2
  19. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.test.js +25 -2
  20. package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.js +1 -1
  21. package/src/all/background_page/controller/accountRecovery/accountRecoveryLoginController.test.js +10 -5
  22. package/src/all/background_page/controller/accountRecovery/recoverAccountController.js +6 -2
  23. package/src/all/background_page/controller/accountRecovery/recoverAccountController.test.js +11 -4
  24. package/src/all/background_page/controller/auth/authCheckStatus.test.data.js +6 -6
  25. package/src/all/background_page/controller/auth/authCheckStatusController.js +11 -3
  26. package/src/all/background_page/controller/auth/authCheckStatusController.test.js +74 -44
  27. package/src/all/background_page/controller/auth/authIsMfaRequiredController.js +11 -3
  28. package/src/all/background_page/controller/auth/authIsMfaRequiredController.test.js +18 -9
  29. package/src/all/background_page/controller/auth/authLoginController.js +1 -1
  30. package/src/all/background_page/controller/auth/authLoginController.test.js +10 -5
  31. package/src/all/background_page/controller/autofill/AutofillController.js +3 -3
  32. package/src/all/background_page/controller/autofill/AutofillController.test.js +20 -12
  33. package/src/all/background_page/controller/export/exportResourcesFileController.js +6 -3
  34. package/src/all/background_page/controller/export/exportResourcesFileController.test.js +34 -4
  35. package/src/all/background_page/controller/extension/onExtensionInstalledController.js +8 -2
  36. package/src/all/background_page/controller/extension/onExtensionInstalledController.test.js +5 -1
  37. package/src/all/background_page/controller/group/{getOrFindGroupsController.js → findGroupsByIdsForShareController.js} +9 -10
  38. package/src/all/background_page/controller/group/{getOrFindGroupsController.test.js → findGroupsByIdsForShareController.test.js} +8 -8
  39. package/src/all/background_page/controller/group/groupUpdateController.test.js +1 -0
  40. package/src/all/background_page/controller/import/importResourcesFileController.test.js +8 -1
  41. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.js +2 -2
  42. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.test.js +7 -4
  43. package/src/all/background_page/controller/locale/getLocaleController.js +3 -2
  44. package/src/all/background_page/controller/metadata/findMetadataTypesSettingsController.test.js +9 -15
  45. package/src/all/background_page/controller/metadata/getMetadataTypesSettingsController.test.js +9 -15
  46. package/src/all/background_page/controller/metadata/getOrFindMetadataKeysSettingsController.test.js +12 -22
  47. package/src/all/background_page/controller/metadata/shareMetadataKeyPrivateController.test.js +14 -2
  48. package/src/all/background_page/controller/move/moveFolderController.test.js +8 -0
  49. package/src/all/background_page/controller/move/moveResourcesController.test.js +8 -0
  50. package/src/all/background_page/controller/passwordExpiry/getOrFindPasswordExpirySettingsController.test.js +13 -8
  51. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.js +4 -4
  52. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.test.js +8 -10
  53. package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.js +62 -0
  54. package/src/all/background_page/controller/permission/findPermissionsByIdsForShareController.test.js +71 -0
  55. package/src/all/background_page/controller/recover/generateRecoverAccountRecoveryRequestKeyController.js +1 -1
  56. package/src/all/background_page/controller/resource/resourceCreateController.js +11 -4
  57. package/src/all/background_page/controller/resource/resourceCreateController.test.js +12 -1
  58. package/src/all/background_page/controller/resource/resourceUpdateController.js +11 -4
  59. package/src/all/background_page/controller/resource/resourceUpdateController.test.js +35 -2
  60. package/src/all/background_page/controller/resourceType/getResourceTypesController.js +5 -4
  61. package/src/all/background_page/controller/resourceType/getResourceTypesController.test.js +5 -2
  62. package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.js +3 -2
  63. package/src/all/background_page/controller/resourceType/updateAllResourceTypesDeletedStatusController.test.js +16 -3
  64. package/src/all/background_page/controller/secret/findSecretByResourceIdController.js +3 -3
  65. package/src/all/background_page/controller/secret/findSecretByResourceIdController.test.js +24 -0
  66. package/src/all/background_page/controller/secretRevision/findResourceSecretRevisionsForDisplayController.js +2 -1
  67. package/src/all/background_page/controller/setup/generateSetupKeyPairController.js +6 -3
  68. package/src/all/background_page/controller/setup/generateSetupKeyPairController.test.js +11 -1
  69. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.js +1 -1
  70. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.test.js +14 -18
  71. package/src/all/background_page/controller/setup/setSetupLocaleController.js +1 -1
  72. package/src/all/background_page/controller/setup/setSetupLocaleController.test.js +6 -10
  73. package/src/all/background_page/controller/setup/signInSetupController.js +6 -2
  74. package/src/all/background_page/controller/setup/signInSetupController.test.js +10 -5
  75. package/src/all/background_page/controller/share/shareOneFolderController.test.js +8 -0
  76. package/src/all/background_page/controller/share/shareResourcesController.test.js +9 -1
  77. package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.js +59 -0
  78. package/src/all/background_page/controller/siteSettings/getOrFindSiteSettingsController.test.js +150 -0
  79. package/src/all/background_page/controller/{group/getOrFindGroupsUsersController.js → user/getOrFindAllUsersController.js} +12 -17
  80. package/src/all/background_page/controller/user/getOrFindAllUsersController.test.js +55 -0
  81. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.js +3 -3
  82. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.test.js +19 -15
  83. package/src/all/background_page/controller/user/updateUserLocalStorageController.test.js +8 -5
  84. package/src/all/background_page/event/accountRecoveryEvents.js +4 -4
  85. package/src/all/background_page/event/appEvents.js +7 -2
  86. package/src/all/background_page/event/authEvents.js +2 -2
  87. package/src/all/background_page/event/groupEvents.js +4 -17
  88. package/src/all/background_page/event/informCallToActionEvents.js +1 -1
  89. package/src/all/background_page/event/informMenuEvents.js +1 -1
  90. package/src/all/background_page/event/localeEvents.js +4 -3
  91. package/src/all/background_page/event/permissionEvents.js +13 -0
  92. package/src/all/background_page/event/recoverEvents.js +4 -4
  93. package/src/all/background_page/event/resourceEvents.js +6 -15
  94. package/src/all/background_page/event/resourceTypeEvents.js +4 -3
  95. package/src/all/background_page/event/setupEvents.js +4 -4
  96. package/src/all/background_page/event/siteSettingsEvents.js +29 -0
  97. package/src/all/background_page/event/userEvents.js +4 -8
  98. package/src/all/background_page/index.js +0 -37
  99. package/src/all/background_page/model/entity/account/abstractAccountEntity.js +2 -2
  100. package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.js +7 -17
  101. package/src/all/background_page/model/entity/account/accountEntity.js +7 -14
  102. package/src/all/background_page/model/entity/account/accountKitEntity.js +1 -2
  103. package/src/all/background_page/model/entity/account/accountRecoverEntity.js +4 -14
  104. package/src/all/background_page/model/entity/account/accountSetupEntity.js +4 -14
  105. package/src/all/background_page/model/entity/account/accountTemporaryEntity.js +2 -5
  106. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.test.js +5 -5
  107. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.js +49 -0
  108. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.data.js +23 -0
  109. package/src/all/background_page/model/entity/localStorage/localStorageMetadataEntity.test.js +51 -0
  110. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.js → siteSettings/siteSettingsEntity.js} +17 -24
  111. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.data.js → siteSettings/siteSettingsEntity.test.data.js} +9 -9
  112. package/src/all/background_page/model/entity/{organizationSettings/organizationSettingsEntity.test.js → siteSettings/siteSettingsEntity.test.js} +30 -39
  113. package/src/all/background_page/model/entity/user/userEntity.test.js +6 -6
  114. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.js +40 -3
  115. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.test.js +122 -0
  116. package/src/all/background_page/model/import/resources/resourcesKdbxImportParser.js +1 -1
  117. package/src/all/background_page/model/locale/localeModel.js +13 -8
  118. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.js +6 -6
  119. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.test.js +3 -2
  120. package/src/all/background_page/model/resource/resourceModel.js +4 -4
  121. package/src/all/background_page/model/user/userModel.js +7 -28
  122. package/src/all/background_page/model/user/userModel.test.js +51 -99
  123. package/src/all/background_page/pagemod/appBootstrapPagemod.js +4 -1
  124. package/src/all/background_page/pagemod/appBootstrapPagemod.test.js +5 -2
  125. package/src/all/background_page/pagemod/appPagemod.js +32 -6
  126. package/src/all/background_page/pagemod/appPagemod.test.js +22 -10
  127. package/src/all/background_page/pagemod/authPagemod.js +2 -10
  128. package/src/all/background_page/pagemod/authPagemod.test.js +4 -4
  129. package/src/all/background_page/pagemod/pagemodManager.test.js +5 -2
  130. package/src/all/background_page/pagemod/quickAccessPagemod.js +2 -2
  131. package/src/all/background_page/pagemod/quickAccessPagemod.test.js +4 -4
  132. package/src/all/background_page/pagemod/recoverPagemod.js +2 -2
  133. package/src/all/background_page/pagemod/recoverPagemod.test.js +6 -0
  134. package/src/all/background_page/pagemod/setupPagemod.js +2 -2
  135. package/src/all/background_page/pagemod/setupPagemod.test.js +6 -0
  136. package/src/all/background_page/pagemod/webIntegrationPagemod.js +21 -2
  137. package/src/all/background_page/pagemod/webIntegrationPagemod.test.js +16 -25
  138. package/src/all/background_page/service/account/getActiveAccountService.js +2 -3
  139. package/src/all/background_page/service/account/getLegacyAccountService.js +3 -14
  140. package/src/all/background_page/service/account/updateSsoCredentialsService.js +9 -5
  141. package/src/all/background_page/service/api/group/groupApiService.js +9 -16
  142. package/src/all/background_page/service/api/group/groupApiService.test.js +59 -26
  143. package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.js +46 -0
  144. package/src/all/background_page/service/api/siteSettings/siteSettingsApiService.test.js +63 -0
  145. package/src/all/background_page/service/auth/checkAuthStatusService.js +27 -14
  146. package/src/all/background_page/service/auth/checkAuthStatusService.test.js +80 -62
  147. package/src/all/background_page/service/auth/postLoginService.js +3 -3
  148. package/src/all/background_page/service/auth/postLoginService.test.js +4 -4
  149. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.js +5 -1
  150. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.test.js +14 -8
  151. package/src/all/background_page/service/authenticationStatusService.js +13 -18
  152. package/src/all/background_page/service/authenticationStatusService.test.js +9 -6
  153. package/src/all/background_page/service/crypto/generateGpgKeyPairService.test.js +5 -5
  154. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.js +7 -6
  155. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.test.js +10 -7
  156. package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.js +7 -2
  157. package/src/all/background_page/service/extension/onExtensionUpdateAvailableService.test.js +5 -5
  158. package/src/all/background_page/service/group/findGroupsService.js +42 -1
  159. package/src/all/background_page/service/group/findGroupsService.test.js +82 -0
  160. package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.js +82 -0
  161. package/src/all/background_page/service/group/groupUpdateSecretsCryptoService.test.js +102 -0
  162. package/src/all/background_page/service/group/groupUpdateService.js +49 -78
  163. package/src/all/background_page/service/group/groupUpdateService.test.js +136 -0
  164. package/src/all/background_page/service/localStorage/localStorageService.js +8 -6
  165. package/src/all/background_page/service/localStorage/localStorageService.test.js +33 -15
  166. package/src/all/background_page/service/local_storage/abstractLocalStorage.js +193 -0
  167. package/src/all/background_page/service/local_storage/abstractLocalStorage.test.data.js +45 -0
  168. package/src/all/background_page/service/local_storage/abstractLocalStorage.test.js +271 -0
  169. package/src/all/background_page/service/local_storage/activeSessionLocalStorage.js +105 -0
  170. package/src/all/background_page/service/local_storage/activeSessionLocalStorage.test.js +153 -0
  171. package/src/all/background_page/service/local_storage/rbacLocalStorage.js +10 -82
  172. package/src/all/background_page/service/local_storage/rbacLocalStorage.test.js +8 -8
  173. package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.js +10 -43
  174. package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.test.js +68 -0
  175. package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.js +104 -0
  176. package/src/all/background_page/service/local_storage/siteSettingsLocalStorage.test.js +114 -0
  177. package/src/all/background_page/service/local_storage/userMeLocalStorage.js +50 -0
  178. package/src/all/background_page/service/{sessionStorage/userMeSessionStorageService.test.js → local_storage/userMeLocalStorage.test.js} +55 -36
  179. package/src/all/background_page/service/metadata/encryptMetadataService.js +3 -3
  180. package/src/all/background_page/service/metadata/encryptMetadataService.test.js +11 -11
  181. package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.js +4 -4
  182. package/src/all/background_page/service/metadata/findAndUpdateMetadataSettingsLocalStorageService.test.js +18 -16
  183. package/src/all/background_page/service/metadata/getOrFindMetadataSettingsService.test.js +6 -8
  184. package/src/all/background_page/service/metadata/rotateMetadata/rotateResourcesMetadataKeyService.test.js +4 -4
  185. package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.js +3 -3
  186. package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.test.js +1 -1
  187. package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.js +4 -4
  188. package/src/all/background_page/service/metadata/verifyOrTrustMetadataKeyService.test.js +9 -7
  189. package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.js +4 -4
  190. package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.test.js +6 -6
  191. package/src/all/background_page/service/rbac/findAndUpdateRbacsLocalStorageService.js +2 -2
  192. package/src/all/background_page/service/rbac/getOrFindRbacService.js +1 -1
  193. package/src/all/background_page/service/resource/create/resourceCreateService.js +41 -51
  194. package/src/all/background_page/service/resource/create/resourceCreateService.test.js +100 -98
  195. package/src/all/background_page/service/resource/export/exportResourcesService.js +7 -7
  196. package/src/all/background_page/service/resource/findAndUpdateResourcesLocalStorageService.js +4 -4
  197. package/src/all/background_page/service/resource/findResourcesService.js +13 -16
  198. package/src/all/background_page/service/resource/findResourcesService.test.js +12 -11
  199. package/src/all/background_page/service/resource/getOrFindResourcesService.js +3 -3
  200. package/src/all/background_page/service/resource/import/ImportResourcesService.js +9 -9
  201. package/src/all/background_page/service/resource/import/ImportResourcesService.test.js +30 -15
  202. package/src/all/background_page/service/resource/update/resourceUpdateService.js +38 -19
  203. package/src/all/background_page/service/resource/update/resourceUpdateService.test.js +64 -31
  204. package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.js +49 -0
  205. package/src/all/background_page/service/resourceType/getOrFindResourceTypesService.test.js +61 -0
  206. package/src/all/background_page/service/resourceType/getSecretSchemaResourceTypeService.js +44 -0
  207. package/src/all/background_page/service/resourceType/updateResourceTypesService.js +6 -4
  208. package/src/all/background_page/service/resourceType/updateResourceTypesService.test.js +19 -14
  209. package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.js +5 -4
  210. package/src/all/background_page/service/secretRevisions/findAndDecryptSecretRevisionsService.test.js +16 -9
  211. package/src/all/background_page/service/share/shareResourceService.js +4 -4
  212. package/src/all/background_page/service/share/shareResourceService.test.js +6 -6
  213. package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.js +77 -0
  214. package/src/all/background_page/service/siteSettings/findAndUpdateSiteSettingsLocalStorageService.test.js +130 -0
  215. package/src/all/background_page/service/siteSettings/findSiteSettingsService.js +47 -0
  216. package/src/all/background_page/service/siteSettings/findSiteSettingsService.test.js +68 -0
  217. package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.js +84 -0
  218. package/src/all/background_page/service/siteSettings/getOrFindSiteSettingsService.test.js +175 -0
  219. package/src/all/background_page/service/siteSettings/siteSettingsRuntimeCache.js +70 -0
  220. package/src/all/background_page/service/sso/generateSsoKitService.test.js +2 -2
  221. package/src/all/background_page/service/toolbar/toolbarService.js +6 -4
  222. package/src/all/background_page/service/toolbar/toolbarService.test.js +14 -13
  223. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.js +4 -4
  224. package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.test.js +3 -3
  225. package/src/all/background_page/service/user/getOrFindMeService.js +64 -0
  226. package/src/all/background_page/service/user/getOrFindMeService.test.js +65 -0
  227. package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.js +5 -4
  228. package/src/all/background_page/service/userKeyPolicies/findUserKeyPoliciesSettingsService.test.js +12 -11
  229. package/src/all/background_page/service/validator/appEmailValidatorService.js +11 -6
  230. package/src/all/background_page/service/validator/appEmailValidatorService.test.js +11 -11
  231. package/src/all/common/polyfill/browserPolyfill.js +8 -8
  232. package/src/all/locales/cs-CZ/common.json +1 -4
  233. package/src/all/locales/de-DE/common.json +1 -4
  234. package/src/all/locales/en-UK/common.json +0 -3
  235. package/src/all/locales/es-ES/common.json +1 -4
  236. package/src/all/locales/fr-FR/common.json +1 -4
  237. package/src/all/locales/it-IT/common.json +1 -4
  238. package/src/all/locales/ja-JP/common.json +1 -4
  239. package/src/all/locales/ko-KR/common.json +0 -3
  240. package/src/all/locales/lt-LT/common.json +1 -4
  241. package/src/all/locales/nl-NL/common.json +1 -4
  242. package/src/all/locales/pl-PL/common.json +1 -4
  243. package/src/all/locales/pt-BR/common.json +1 -4
  244. package/src/all/locales/ro-RO/common.json +1 -4
  245. package/src/all/locales/ru-RU/common.json +1 -4
  246. package/src/all/locales/sl-SI/common.json +1 -4
  247. package/src/all/locales/sv-SE/common.json +1 -4
  248. package/src/all/locales/uk-UA/common.json +1 -4
  249. package/src/all/webAccessibleResources/js/app/QuickAccess.js +7 -0
  250. package/src/chrome/manifest.json +1 -1
  251. package/src/chrome-mv3/manifest.json +1 -1
  252. package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.js +132 -0
  253. package/src/chrome-mv3/offscreens/service/group/addUsersToGroupOffscreenService.test.js +125 -0
  254. package/src/chrome-mv3/offscreens/service/offscreen/handleOffscreenRequestService.js +4 -0
  255. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.js +83 -0
  256. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/requestAddUsersToGroupOffscreenService.test.js +116 -0
  257. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.js +99 -0
  258. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.data.js +45 -0
  259. package/src/chrome-mv3/serviceWorker/service/addUsersToGroup/responseAddUsersToGroupOffscreenService.test.js +87 -0
  260. package/src/chrome-mv3/serviceWorker/service/network/requestFetchOffscreenService.js +0 -1
  261. package/src/chrome-mv3/serviceWorker/service/offscreen/handleOffscreenResponseService.js +15 -0
  262. package/src/firefox/manifest.json +1 -1
  263. package/src/safari/background_page/index.js +0 -37
  264. package/src/safari/common/polyfill/safariBrowserPolyfill.js +10 -10
  265. package/src/safari/manifest.json +1 -1
  266. package/test/jest.setup.js +4 -2
  267. package/src/all/background_page/controller/group/getOrFindGroupsUsersController.test.js +0 -69
  268. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.js +0 -55
  269. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.test.js +0 -45
  270. package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.js +0 -76
  271. package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.test.js +0 -102
  272. package/src/all/background_page/event/organizationSettingsEvents.js +0 -37
  273. package/src/all/background_page/model/organizationSettings/organizationSettingsModel.js +0 -93
  274. package/src/all/background_page/model/resourceType/resourceTypeModel.js +0 -72
  275. package/src/all/background_page/model/resourceType/resourceTypeModel.test.js +0 -101
  276. package/src/all/background_page/service/api/organizationSettings/organizationSettingsService.js +0 -58
  277. package/src/all/background_page/service/group/getOrFindGroupsService.js +0 -65
  278. package/src/all/background_page/service/group/getOrFindGroupsService.test.js +0 -168
  279. package/src/all/background_page/service/group/getOrFindGroupsUsersService.js +0 -51
  280. package/src/all/background_page/service/group/getOrFindGroupsUsersService.test.js +0 -94
  281. package/src/all/background_page/service/local_storage/authStatusLocalStorage.js +0 -70
  282. package/src/all/background_page/service/sessionStorage/userMeSessionStorageService.js +0 -94
@@ -13,7 +13,6 @@ import SetResourcesExpiryDateController from "../controller/resource/setResource
13
13
  import FindResourceDetailsController from "../controller/resource/findResourceDetailsController";
14
14
  import ResourceUpdateLocalStorageController from "../controller/resourceLocalStorage/resourceUpdateLocalStorageController";
15
15
  import FindAllIdsByIsSharedWithGroupController from "../controller/resource/findAllIdsByIsSharedWithGroupController";
16
- import FindAllByIdsForDisplayPermissionsController from "../controller/resource/findAllByIdsForDisplayPermissionsController";
17
16
  import MoveResourcesController from "../controller/move/moveResourcesController";
18
17
  import ResetResourceGridUserSettingController from "../controller/resourceGridSetting/resetResourceGridUserSettingController";
19
18
  import UpdateResourceLocalStorageByFolderParentIdController from "../controller/resource/updateResourceLocalStorageByFolderParentIdController";
@@ -63,10 +62,11 @@ const listen = function (worker, apiClientOptions, account) {
63
62
  * @param requestId {uuid} The request identifier
64
63
  * @param resourceDto {object} The resource meta data
65
64
  * @param plaintextDto {string|object} The plaintext data to encrypt
65
+ * @param permissionChanges {Array<object>} Optional permission changes applied after create
66
66
  */
67
- worker.port.on("passbolt.resources.create", async (requestId, resourceDto, plaintextDto) => {
67
+ worker.port.on("passbolt.resources.create", async (requestId, resourceDto, plaintextDto, permissionChanges) => {
68
68
  const controller = new ResourceCreateController(worker, requestId, apiClientOptions, account);
69
- await controller._exec(resourceDto, plaintextDto);
69
+ await controller._exec(resourceDto, plaintextDto, permissionChanges);
70
70
  });
71
71
 
72
72
  /*
@@ -88,10 +88,11 @@ const listen = function (worker, apiClientOptions, account) {
88
88
  * @param requestId {uuid} The request identifier
89
89
  * @param resource {array} The resource
90
90
  * @param plaintextDto {} The resource secret
91
+ * @param permissionChanges {Array<object>} Optional permission changes applied after the update
91
92
  */
92
- worker.port.on("passbolt.resources.update", async (requestId, resourceDto, plaintextDto) => {
93
+ worker.port.on("passbolt.resources.update", async (requestId, resourceDto, plaintextDto, permissionChanges) => {
93
94
  const controller = new ResourceUpdateController(worker, requestId, apiClientOptions, account);
94
- await controller._exec(resourceDto, plaintextDto);
95
+ await controller._exec(resourceDto, plaintextDto, permissionChanges);
95
96
  });
96
97
 
97
98
  /*
@@ -144,16 +145,6 @@ const listen = function (worker, apiClientOptions, account) {
144
145
  await controller._exec(passwordExpiryResourcesCollectionDto);
145
146
  });
146
147
 
147
- /*
148
- * Retrieve all resources by ids with their permissions.
149
- * @listens passbolt.resources.find-all-by-ids-with-permissions
150
- * @param {array} resourcesIds The ids of the resources to retrieve.
151
- */
152
- worker.port.on("passbolt.resources.find-all-by-ids-for-display-permissions", async (requestId, resourcesIds) => {
153
- const controller = new FindAllByIdsForDisplayPermissionsController(worker, requestId, apiClientOptions, account);
154
- await controller._exec(resourcesIds);
155
- });
156
-
157
148
  /*
158
149
  * Moves the given resources to a new folder.
159
150
  *
@@ -19,8 +19,9 @@ import UpdateAllResourceTypesDeletedStatusController from "../controller/resourc
19
19
  * Listens the resource type events
20
20
  * @param {Worker} worker
21
21
  * @param {ApiClientOptions} apiClientOptions the api client options
22
+ * @param {AccountEntity} account The account
22
23
  */
23
- const listen = function (worker, apiClientOptions) {
24
+ const listen = function (worker, apiClientOptions, account) {
24
25
  /*
25
26
  * Get the resource types from the local storage.
26
27
  *
@@ -28,7 +29,7 @@ const listen = function (worker, apiClientOptions) {
28
29
  * @param requestId {uuid} The request identifier
29
30
  */
30
31
  worker.port.on("passbolt.resource-type.get-or-find-all", async (requestId) => {
31
- const controller = new GetResourceTypesController(worker, requestId, apiClientOptions);
32
+ const controller = new GetResourceTypesController(worker, requestId, apiClientOptions, account);
32
33
  await controller._exec();
33
34
  });
34
35
 
@@ -51,7 +52,7 @@ const listen = function (worker, apiClientOptions) {
51
52
  * @param resourceTypesCollectionDto {Array} the collection to update
52
53
  */
53
54
  worker.port.on("passbolt.resource-types.update-all-deleted-status", async (requestId, resourceTypesCollectionDto) => {
54
- const controller = new UpdateAllResourceTypesDeletedStatusController(worker, requestId, apiClientOptions);
55
+ const controller = new UpdateAllResourceTypesDeletedStatusController(worker, requestId, apiClientOptions, account);
55
56
  await controller._exec(resourceTypesCollectionDto);
56
57
  });
57
58
  };
@@ -22,7 +22,7 @@ import DownloadRecoveryKitController from "../controller/setup/downloadRecoverKi
22
22
  import CompleteSetupController from "../controller/setup/completeSetupController";
23
23
  import ValidatePrivateGpgKeySetupController from "../controller/crypto/validatePrivateGpgKeySetupController";
24
24
  import SetSetupLocaleController from "../controller/setup/setSetupLocaleController";
25
- import GetOrganizationSettingsController from "../controller/organizationSettings/getOrganizationSettingsController";
25
+ import GetOrFindSiteSettingsController from "../controller/siteSettings/getOrFindSiteSettingsController";
26
26
  import GenerateSetupKeyPairController from "../controller/setup/generateSetupKeyPairController";
27
27
  import GetAndInitSetupLocaleController from "../controller/setup/getAndInitSetupLocaleController";
28
28
  import IsExtensionFirstInstallController from "../controller/extension/isExtensionFirstInstallController";
@@ -47,9 +47,9 @@ const listen = function (worker, apiClientOptions, account) {
47
47
  await controller._exec();
48
48
  });
49
49
 
50
- worker.port.on("passbolt.organization-settings.get", async (requestId) => {
51
- const controller = new GetOrganizationSettingsController(worker, requestId, apiClientOptions);
52
- await controller._exec();
50
+ worker.port.on("passbolt.site-settings.get-or-find", async (requestId, refreshCache = true) => {
51
+ const controller = new GetOrFindSiteSettingsController(worker, requestId, apiClientOptions, account);
52
+ await controller._exec(refreshCache);
53
53
  });
54
54
 
55
55
  worker.port.on("passbolt.setup.start", async (requestId) => {
@@ -0,0 +1,29 @@
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 SARL (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 3.2.0
13
+ */
14
+ import GetOrFindSiteSettingsController from "../controller/siteSettings/getOrFindSiteSettingsController";
15
+
16
+ const listen = function (worker, apiClientOptions, account) {
17
+ /*
18
+ * Return cached site settings or fetch from the API. Same `refreshCache` semantics as the
19
+ * legacy `passbolt.organization-settings.get` event.
20
+ * @listens passbolt.site-settings.get-or-find
21
+ * @param {string} requestId
22
+ * @param {boolean} [refreshCache=true]
23
+ */
24
+ worker.port.on("passbolt.site-settings.get-or-find", async (requestId, refreshCache = true) => {
25
+ const controller = new GetOrFindSiteSettingsController(worker, requestId, apiClientOptions, account);
26
+ await controller._exec(refreshCache);
27
+ });
28
+ };
29
+ export const SiteSettingsEvents = { listen };
@@ -15,6 +15,7 @@ import AvatarUpdateEntity from "../model/entity/avatar/update/avatarUpdateEntity
15
15
  import UpdateUserLocalStorageController from "../controller/user/updateUserLocalStorageController";
16
16
  import GetOrFindLoggedInUserController from "../controller/user/getOrFindLoggedInUserController";
17
17
  import GetOrFindUsersController from "../controller/user/getOrFindUsersController";
18
+ import GetOrFindAllUsersController from "../controller/user/getOrFindAllUsersController";
18
19
  import UpdateUserController from "../controller/user/updateUserController";
19
20
  import DeleteDryRunUserController from "../controller/user/deleteDryRunUserController";
20
21
  import DeleteUserController from "../controller/user/deleteUserController";
@@ -38,13 +39,8 @@ const listen = function (worker, apiClientOptions, account) {
38
39
  * @param requestId {uuid} The request identifier
39
40
  */
40
41
  worker.port.on("passbolt.users.get-all", async (requestId) => {
41
- try {
42
- const userModel = new UserModel(apiClientOptions, account);
43
- const users = await userModel.getOrFindAll();
44
- worker.port.emit(requestId, "SUCCESS", users);
45
- } catch (error) {
46
- worker.port.emit(requestId, "ERROR", error);
47
- }
42
+ const controller = new GetOrFindAllUsersController(worker, requestId, apiClientOptions, account);
43
+ await controller._exec();
48
44
  });
49
45
 
50
46
  /*
@@ -158,7 +154,7 @@ const listen = function (worker, apiClientOptions, account) {
158
154
  * @param newPassphrase {string} The new passphrase
159
155
  */
160
156
  worker.port.on("passbolt.user.update-private-key", async (requestId, oldPassphrase, newPassphrase) => {
161
- const controller = new UpdatePrivateKeyController(worker, requestId, apiClientOptions);
157
+ const controller = new UpdatePrivateKeyController(worker, requestId, apiClientOptions, account);
162
158
  await controller._exec(oldPassphrase, newPassphrase);
163
159
  });
164
160
 
@@ -8,13 +8,8 @@ import PortManager from "./sdk/port/portManager";
8
8
  import SystemRequirementService from "./service/systemRequirementService/systemRequirementService";
9
9
  import OnExtensionInstalledController from "./controller/extension/onExtensionInstalledController";
10
10
  import TabService from "./service/tab/tabService";
11
- import User from "./model/user";
12
- import Log from "./model/log";
13
11
  import OnExtensionUpdateAvailableService from "./service/extension/onExtensionUpdateAvailableService";
14
- import CheckAuthStatusService from "./service/auth/checkAuthStatusService";
15
12
  import GlobalAlarmService from "./service/alarm/globalAlarmService";
16
- import PostLoginService from "./service/auth/postLoginService";
17
- import PostLogoutService from "./service/auth/postLogoutService";
18
13
  import OnStartUpService from "./service/extension/onStartUpService";
19
14
  import ToolbarService from "./service/toolbar/toolbarService";
20
15
 
@@ -23,38 +18,6 @@ const main = async () => {
23
18
  * Load all system requirement
24
19
  */
25
20
  await SystemRequirementService.get();
26
-
27
- // When the extension is updated and the user is still connected, an event needs to be sent
28
- checkAndProcessIfUserAuthenticated();
29
- };
30
-
31
- /**
32
- * Check and process event if the user is authenticated
33
- * @return {Promise<void>}
34
- */
35
- const checkAndProcessIfUserAuthenticated = async () => {
36
- const user = User.getInstance();
37
- // Check if user is valid
38
- if (!user.isValid()) {
39
- return;
40
- }
41
-
42
- let authStatus;
43
- try {
44
- const checkAuthStatusService = new CheckAuthStatusService();
45
- authStatus = await checkAuthStatusService.checkAuthStatus(true);
46
- } catch (error) {
47
- console.error(error);
48
- // Service is unavailable, do nothing...
49
- Log.write({ level: "debug", message: "The Service is unavailable to check if the user is authenticated" });
50
- return;
51
- }
52
-
53
- if (authStatus.isAuthenticated) {
54
- PostLoginService.exec();
55
- } else {
56
- PostLogoutService.exec();
57
- }
58
21
  };
59
22
 
60
23
  main();
@@ -10,7 +10,7 @@
10
10
  * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
11
  * @link https://www.passbolt.com Passbolt(tm)
12
12
  */
13
- import Entity from "passbolt-styleguide/src/shared/models/entity/abstract/entity";
13
+ import EntityV2 from "passbolt-styleguide/src/shared/models/entity/abstract/entityV2";
14
14
  import ProfileEntity from "passbolt-styleguide/src/shared/models/entity/profile/profileEntity";
15
15
  import UserEntity from "../user/userEntity";
16
16
  import SecurityTokenEntity from "../securityToken/securityTokenEntity";
@@ -24,7 +24,7 @@ const FINGERPRINT_MAX_LENGTH = 40;
24
24
 
25
25
  const UUID_PASSBOLT_NAMESPACE = "d5447ca1-950f-459d-8b20-86ddfdd0f922";
26
26
 
27
- class AbstractAccountEntity extends Entity {
27
+ class AbstractAccountEntity extends EntityV2 {
28
28
  /**
29
29
  * @inheritDoc
30
30
  */
@@ -26,19 +26,13 @@ class AccountAccountRecoveryEntity extends AbstractAccountEntity {
26
26
  * @param {boolean} [options.validateUsername=true] Validate the username
27
27
  */
28
28
  constructor(accountAccountRecoveryDto, options = {}) {
29
- AccountAccountRecoveryEntity.marshal(accountAccountRecoveryDto);
30
-
31
29
  // Should the username be validated.
32
30
  const isUsernameValidated = options?.validateUsername !== false;
31
+ if (!isUsernameValidated) {
32
+ options.schema = AccountAccountRecoveryEntity.getSchema(isUsernameValidated);
33
+ }
33
34
 
34
- super(
35
- EntitySchema.validate(
36
- AccountAccountRecoveryEntity.ENTITY_NAME,
37
- accountAccountRecoveryDto,
38
- AccountAccountRecoveryEntity.getSchema(isUsernameValidated),
39
- ),
40
- options,
41
- );
35
+ super(accountAccountRecoveryDto, options);
42
36
 
43
37
  this.isUsernameValidated = isUsernameValidated;
44
38
 
@@ -52,14 +46,10 @@ class AccountAccountRecoveryEntity extends AbstractAccountEntity {
52
46
  }
53
47
 
54
48
  /**
55
- * Marshal the dto
56
- * @param {Object} accountAccountRecoveryDto account account recovery DTO
57
- * @return {Object}
49
+ * @inheritDoc
58
50
  */
59
- static marshal(accountAccountRecoveryDto) {
60
- Object.assign(accountAccountRecoveryDto, {
61
- type: AccountAccountRecoveryEntity.TYPE_ACCOUNT_ACCOUNT_RECOVERY,
62
- });
51
+ marshall() {
52
+ this._props.type = AccountAccountRecoveryEntity.TYPE_ACCOUNT_ACCOUNT_RECOVERY;
63
53
  }
64
54
 
65
55
  /**
@@ -12,7 +12,6 @@
12
12
  */
13
13
 
14
14
  import AbstractAccountEntity from "./abstractAccountEntity";
15
- import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
16
15
  import RoleEntity from "passbolt-styleguide/src/shared/models/entity/role/roleEntity";
17
16
 
18
17
  const ENTITY_NAME = "Account";
@@ -26,28 +25,22 @@ class AccountEntity extends AbstractAccountEntity {
26
25
  * @param {boolean} [options.validateUsername=true] Validate the username
27
26
  */
28
27
  constructor(accountDto, options = {}) {
29
- AccountEntity.marshal(accountDto);
30
-
31
28
  // Should the username be validated.
32
29
  const isUsernameValidated = options?.validateUsername !== false;
30
+ if (!isUsernameValidated) {
31
+ options.schema = AccountEntity.getSchema(isUsernameValidated);
32
+ }
33
33
 
34
- super(
35
- EntitySchema.validate(AccountEntity.ENTITY_NAME, accountDto, AccountEntity.getSchema(isUsernameValidated)),
36
- options,
37
- );
34
+ super(accountDto, options);
38
35
 
39
36
  this.isUsernameValidated = isUsernameValidated;
40
37
  }
41
38
 
42
39
  /**
43
- * Marshal the dto
44
- * @param {Object} accountDto account DTO
45
- * @return {Object}
40
+ * @inheritDoc
46
41
  */
47
- static marshal(accountDto) {
48
- Object.assign(accountDto, {
49
- type: AccountEntity.TYPE_ACCOUNT,
50
- });
42
+ marshall() {
43
+ this._props.type = AccountEntity.TYPE_ACCOUNT;
51
44
  }
52
45
 
53
46
  /**
@@ -12,7 +12,6 @@
12
12
  */
13
13
 
14
14
  import AbstractAccountEntity from "./abstractAccountEntity";
15
- import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
16
15
 
17
16
  const ENTITY_NAME = "AccountKit";
18
17
  const PGP_KEY_MAX_LENGTH = 50000;
@@ -23,7 +22,7 @@ class AccountKitEntity extends AbstractAccountEntity {
23
22
  * @inheritDoc
24
23
  */
25
24
  constructor(accountDto, options = {}) {
26
- super(EntitySchema.validate(AccountKitEntity.ENTITY_NAME, accountDto, AccountKitEntity.getSchema()), options);
25
+ super(accountDto, options);
27
26
  }
28
27
 
29
28
  /**
@@ -14,7 +14,6 @@
14
14
  import UserEntity from "../user/userEntity";
15
15
  import AbstractAccountEntity from "./abstractAccountEntity";
16
16
  import AuthenticationTokenEntity from "../authenticationToken/authenticationTokenEntity";
17
- import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
18
17
  import AccountRecoveryUserSettingEntity from "passbolt-styleguide/src/shared/models/entity/accountRecovery/accountRecoveryUserSettingEntity";
19
18
 
20
19
  const ENTITY_NAME = "AccountRecover";
@@ -25,12 +24,7 @@ class AccountRecoverEntity extends AbstractAccountEntity {
25
24
  * @inheritDoc
26
25
  */
27
26
  constructor(accountRecoverDto, options = {}) {
28
- AccountRecoverEntity.marshal(accountRecoverDto);
29
-
30
- super(
31
- EntitySchema.validate(AccountRecoverEntity.ENTITY_NAME, accountRecoverDto, AccountRecoverEntity.getSchema()),
32
- options,
33
- );
27
+ super(accountRecoverDto, options);
34
28
 
35
29
  // Recover account associations.
36
30
  if (this._props.account_recovery_user_setting) {
@@ -47,14 +41,10 @@ class AccountRecoverEntity extends AbstractAccountEntity {
47
41
  }
48
42
 
49
43
  /**
50
- * Marshal the dto
51
- * @param {Object} accountRecoverDto account recover DTO
52
- * @return {Object}
44
+ * @inheritDoc
53
45
  */
54
- static marshal(accountRecoverDto) {
55
- Object.assign(accountRecoverDto, {
56
- type: AccountRecoverEntity.TYPE_ACCOUNT_RECOVER,
57
- });
46
+ marshall() {
47
+ this._props.type = AccountRecoverEntity.TYPE_ACCOUNT_RECOVER;
58
48
  }
59
49
 
60
50
  /**
@@ -15,7 +15,6 @@
15
15
  import UserEntity from "../user/userEntity";
16
16
  import AbstractAccountEntity from "./abstractAccountEntity";
17
17
  import AuthenticationTokenEntity from "../authenticationToken/authenticationTokenEntity";
18
- import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
19
18
  import AccountRecoveryUserSettingEntity from "passbolt-styleguide/src/shared/models/entity/accountRecovery/accountRecoveryUserSettingEntity";
20
19
 
21
20
  const ENTITY_NAME = "AccountSetup";
@@ -26,12 +25,7 @@ class AccountSetupEntity extends AbstractAccountEntity {
26
25
  * @inheritDoc
27
26
  */
28
27
  constructor(accountSetupDto, options = {}) {
29
- AccountSetupEntity.marshal(accountSetupDto);
30
-
31
- super(
32
- EntitySchema.validate(AccountSetupEntity.ENTITY_NAME, accountSetupDto, AccountSetupEntity.getSchema()),
33
- options,
34
- );
28
+ super(accountSetupDto, options);
35
29
 
36
30
  // Setup account associations.
37
31
  if (this._props.account_recovery_user_setting) {
@@ -48,14 +42,10 @@ class AccountSetupEntity extends AbstractAccountEntity {
48
42
  }
49
43
 
50
44
  /**
51
- * Marshal the dto
52
- * @param {Object} accountSetupDto account setup DTO
53
- * @return {Object}
45
+ * @inheritDoc
54
46
  */
55
- static marshal(accountSetupDto) {
56
- Object.assign(accountSetupDto, {
57
- type: AccountSetupEntity.TYPE_ACCOUNT_SETUP,
58
- });
47
+ marshall() {
48
+ this._props.type = AccountSetupEntity.TYPE_ACCOUNT_SETUP;
59
49
  }
60
50
 
61
51
  /**
@@ -13,7 +13,6 @@
13
13
  */
14
14
 
15
15
  import AbstractAccountEntity from "./abstractAccountEntity";
16
- import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
17
16
  import AccountAccountRecoveryEntity from "./accountAccountRecoveryEntity";
18
17
  import AccountSetupEntity from "./accountSetupEntity";
19
18
  import AccountRecoverEntity from "./accountRecoverEntity";
@@ -26,10 +25,8 @@ class AccountTemporaryEntity extends AbstractAccountEntity {
26
25
  /**
27
26
  * @inheritDoc
28
27
  */
29
- constructor(AccountEntityDto) {
30
- super(
31
- EntitySchema.validate(AccountTemporaryEntity.ENTITY_NAME, AccountEntityDto, AccountTemporaryEntity.getSchema()),
32
- );
28
+ constructor(accountEntityDto, options = {}) {
29
+ super(accountEntityDto, options);
33
30
 
34
31
  // Associations
35
32
  if (this._props.account) {
@@ -15,9 +15,8 @@
15
15
  import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
16
16
  import EntityValidationError from "passbolt-styleguide/src/shared/models/entity/abstract/entityValidationError";
17
17
  import * as assertEntityProperty from "passbolt-styleguide/test/assert/assertEntityProperty";
18
- import OrganizationSettingsModel from "../../../organizationSettings/organizationSettingsModel";
19
- import OrganizationSettingsEntity from "../../organizationSettings/organizationSettingsEntity";
20
- import { customEmailValidationProOrganizationSettings } from "../../organizationSettings/organizationSettingsEntity.test.data";
18
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
19
+ import { customEmailValidationProSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
21
20
  import GenerateGpgKeyPairOptionsEntity from "./generateGpgKeyPairOptionsEntity";
22
21
  import { defaultDto, minimalDto } from "./generateGpgKeyPairOptionsEntity.test.data";
23
22
  import {
@@ -25,6 +24,7 @@ import {
25
24
  rsaUserKeyPoliciesSettingsDto,
26
25
  } from "passbolt-styleguide/src/shared/models/entity/userKeyPolicies/UserKeyPoliciesSettingsEntity.test.data";
27
26
  import UserKeyPoliciesSettingsEntity from "passbolt-styleguide/src/shared/models/entity/userKeyPolicies/UserKeyPoliciesSettingsEntity";
27
+ import SiteSettingsRuntimeCache from "../../../../service/siteSettings/siteSettingsRuntimeCache";
28
28
 
29
29
  beforeEach(() => {
30
30
  jest.useFakeTimers(); //avoid slight nano seconds shift in test when comparing dates that makes test failing while they shouldn't
@@ -147,8 +147,8 @@ describe("GenerateGpgKeyPairOptionsEntity", () => {
147
147
 
148
148
  it("allows non-standard email if custom validation is configured", () => {
149
149
  expect.assertions(1);
150
- const organizationSettings = customEmailValidationProOrganizationSettings();
151
- OrganizationSettingsModel.set(new OrganizationSettingsEntity(organizationSettings));
150
+ const organizationSettings = customEmailValidationProSiteSettings();
151
+ SiteSettingsRuntimeCache.set(new SiteSettingsEntity(organizationSettings));
152
152
  const dto = defaultDto({ email: "ada@passbolt.c" });
153
153
  const entity = new GenerateGpgKeyPairOptionsEntity(dto);
154
154
  expect(entity.email).toEqual("ada@passbolt.c");
@@ -0,0 +1,49 @@
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 EntityV2 from "passbolt-styleguide/src/shared/models/entity/abstract/entityV2";
15
+
16
+ class LocalStorageMetadataEntity extends EntityV2 {
17
+ /**
18
+ * Get local storage metadata entity schema
19
+ * @returns {object} schema
20
+ */
21
+ static getSchema() {
22
+ return {
23
+ type: "object",
24
+ required: ["last_updated"],
25
+ properties: {
26
+ last_updated: {
27
+ type: "string",
28
+ format: "date-time",
29
+ },
30
+ },
31
+ };
32
+ }
33
+
34
+ /*
35
+ * ==================================================
36
+ * Dynamic properties getters
37
+ * ==================================================
38
+ */
39
+
40
+ /**
41
+ * Get the last updated date
42
+ * @returns {string}
43
+ */
44
+ get lastUpdated() {
45
+ return this._props.last_updated;
46
+ }
47
+ }
48
+
49
+ export default LocalStorageMetadataEntity;
@@ -0,0 +1,23 @@
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
+ /**
16
+ * Build default local storage metadata.
17
+ * @param {object} [data={}] Data to override
18
+ * @returns {object}
19
+ */
20
+ export const defaultLocalStorageMetadataDto = (data = {}) => ({
21
+ last_updated: "2026-06-06T14:59:11+00:00",
22
+ ...data,
23
+ });
@@ -0,0 +1,51 @@
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 EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
16
+ import * as assertEntityProperty from "passbolt-styleguide/test/assert/assertEntityProperty";
17
+ import LocalStorageMetadataEntity from "./localStorageMetadataEntity";
18
+ import { defaultLocalStorageMetadataDto } from "./localStorageMetadataEntity.test.data";
19
+
20
+ describe("LocalStorageMetadata", () => {
21
+ describe("::getSchema", () => {
22
+ it("schema must validate", () => {
23
+ EntitySchema.validateSchema(LocalStorageMetadataEntity.name, LocalStorageMetadataEntity.getSchema());
24
+ });
25
+
26
+ it("validates last_updated property", () => {
27
+ assertEntityProperty.string(LocalStorageMetadataEntity, "last_updated");
28
+ assertEntityProperty.dateTime(LocalStorageMetadataEntity, "last_updated");
29
+ assertEntityProperty.required(LocalStorageMetadataEntity, "last_updated");
30
+ });
31
+ });
32
+
33
+ describe("::constructor", () => {
34
+ it("constructor works if valid DTO is provided", () => {
35
+ expect.assertions(1);
36
+ const dto = defaultLocalStorageMetadataDto();
37
+ const entity = new LocalStorageMetadataEntity(dto);
38
+
39
+ expect(entity._props.last_updated).toStrictEqual(dto.last_updated);
40
+ });
41
+ });
42
+
43
+ describe("::last_updated", () => {
44
+ it("get last_updated property value", () => {
45
+ expect.assertions(1);
46
+ const last_updated = "2024-10-05T12:10:00+00:00";
47
+ const entity = new LocalStorageMetadataEntity(defaultLocalStorageMetadataDto({ last_updated }));
48
+ expect(entity.lastUpdated).toStrictEqual(last_updated);
49
+ });
50
+ });
51
+ });