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
@@ -19,7 +19,9 @@ import GetOrFindMetadataKeysController from "./getOrFindMetadataKeysSettingsCont
19
19
  import { defaultMetadataKeysSettingsDto } from "passbolt-styleguide/src/shared/models/entity/metadata/metadataKeysSettingsEntity.test.data";
20
20
  import MetadataKeysSettingsEntity from "passbolt-styleguide/src/shared/models/entity/metadata/metadataKeysSettingsEntity";
21
21
  import { enableFetchMocks } from "jest-fetch-mock";
22
- import { defaultCeOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
22
+ import { defaultCeSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
23
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
24
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
23
25
 
24
26
  beforeEach(() => {
25
27
  enableFetchMocks();
@@ -43,7 +45,7 @@ describe("GetOrFindMetadataKeysSettingsController", () => {
43
45
  expect.assertions(3);
44
46
 
45
47
  const metadataKeysSettingsDto = defaultMetadataKeysSettingsDto();
46
- const siteSettingsDto = defaultCeOrganizationSettings();
48
+ const siteSettingsDto = defaultCeSiteSettings();
47
49
  jest
48
50
  .spyOn(
49
51
  controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
@@ -52,12 +54,8 @@ describe("GetOrFindMetadataKeysSettingsController", () => {
52
54
  )
53
55
  .mockImplementationOnce(() => new MetadataKeysSettingsEntity(metadataKeysSettingsDto));
54
56
  jest
55
- .spyOn(
56
- controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
57
- .organisationSettingsModel.organizationSettingsService,
58
- "find",
59
- )
60
- .mockImplementation(() => siteSettingsDto);
57
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
58
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
61
59
 
62
60
  const metadataKeysSettings = await controller.exec();
63
61
 
@@ -74,7 +72,7 @@ describe("GetOrFindMetadataKeysSettingsController", () => {
74
72
  allow_usage_of_personal_keys: false,
75
73
  zero_knowledge_key_share: true,
76
74
  });
77
- const siteSettingsDto = defaultCeOrganizationSettings();
75
+ const siteSettingsDto = defaultCeSiteSettings();
78
76
  jest
79
77
  .spyOn(
80
78
  controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
@@ -83,12 +81,8 @@ describe("GetOrFindMetadataKeysSettingsController", () => {
83
81
  )
84
82
  .mockImplementationOnce(() => new MetadataKeysSettingsEntity(metadataKeysSettingsDto));
85
83
  jest
86
- .spyOn(
87
- controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
88
- .organisationSettingsModel.organizationSettingsService,
89
- "find",
90
- )
91
- .mockImplementation(() => siteSettingsDto);
84
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
85
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
92
86
 
93
87
  const metadataKeysSettings = await controller.exec();
94
88
 
@@ -101,16 +95,12 @@ describe("GetOrFindMetadataKeysSettingsController", () => {
101
95
  it("get or find metadata keys settings for a v4 should have the default.", async () => {
102
96
  expect.assertions(3);
103
97
 
104
- const siteSettingsDto = defaultCeOrganizationSettings();
98
+ const siteSettingsDto = defaultCeSiteSettings();
105
99
  // disable the plugin metadata.
106
100
  delete siteSettingsDto.passbolt.plugins.metadata;
107
101
  jest
108
- .spyOn(
109
- controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
110
- .organisationSettingsModel.organizationSettingsService,
111
- "find",
112
- )
113
- .mockImplementation(() => siteSettingsDto);
102
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
103
+ .mockImplementation(() => new SiteSettingsEntity(siteSettingsDto));
114
104
  jest
115
105
  .spyOn(
116
106
  controller.getOrFindMetadaSettingsService.findAndUpdateMetadataSettingsLocalStorageService
@@ -32,10 +32,18 @@ import { OpenpgpAssertion } from "../../utils/openpgp/openpgpAssertions";
32
32
  import DecryptMessageService from "../../service/crypto/decryptMessageService";
33
33
  import FindSignatureService from "../../service/crypto/findSignatureService";
34
34
  import MetadataPrivateKeyApiService from "../../service/api/metadata/metadataPrivateKeyApiService";
35
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
36
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
37
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
35
38
 
36
39
  jest.mock("../../service/passphrase/getPassphraseService");
37
40
 
38
41
  describe("ShareMetadataKeyPrivateController", () => {
42
+ beforeEach(() => {
43
+ jest
44
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
45
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
46
+ });
39
47
  describe("::exec", () => {
40
48
  let controller, account, apiClientOptions, keyring;
41
49
 
@@ -73,7 +81,9 @@ describe("ShareMetadataKeyPrivateController", () => {
73
81
 
74
82
  jest.spyOn(controller.verifyOrTrustMetadataKeyService, "verifyTrustedOrTrustNewMetadataKey");
75
83
  jest.spyOn(controller.getPassphraseService, "getPassphrase");
76
- jest.spyOn(controller.shareMetadataKeyPrivateService.userModel, "getOrFindAll").mockImplementation(() => users);
84
+ jest
85
+ .spyOn(controller.shareMetadataKeyPrivateService.getOrFindUsersService, "getOrFindAll")
86
+ .mockImplementation(() => users);
77
87
  jest.spyOn(GetOrFindMetadataKeysService.prototype, "getOrFindAll").mockImplementation(() => metadataKeys);
78
88
 
79
89
  await controller.exec(pgpKeys.betty.userId);
@@ -97,7 +107,9 @@ describe("ShareMetadataKeyPrivateController", () => {
97
107
 
98
108
  jest.spyOn(controller.verifyOrTrustMetadataKeyService, "verifyTrustedOrTrustNewMetadataKey");
99
109
  jest.spyOn(controller.getPassphraseService, "getPassphrase");
100
- jest.spyOn(controller.shareMetadataKeyPrivateService.userModel, "getOrFindAll").mockImplementation(() => users);
110
+ jest
111
+ .spyOn(controller.shareMetadataKeyPrivateService.getOrFindUsersService, "getOrFindAll")
112
+ .mockImplementation(() => users);
101
113
  jest
102
114
  .spyOn(controller.shareMetadataKeyPrivateService.getOrFindMetadataKeysService, "getOrFindAll")
103
115
  .mockImplementation(() => metadataKeys);
@@ -19,8 +19,16 @@ import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiC
19
19
  import { v4 as uuidv4 } from "uuid";
20
20
  import { pgpKeys } from "passbolt-styleguide/test/fixture/pgpKeys/keys";
21
21
  import MockPort from "passbolt-styleguide/src/react-extension/test/mock/MockPort";
22
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
23
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
24
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
22
25
 
23
26
  describe("MoveFolderController", () => {
27
+ beforeEach(() => {
28
+ jest
29
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
30
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
31
+ });
24
32
  describe("::exec", () => {
25
33
  let worker, account, controller;
26
34
 
@@ -18,8 +18,16 @@ import AccountEntity from "../../model/entity/account/accountEntity";
18
18
  import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
19
19
  import { v4 as uuidv4 } from "uuid";
20
20
  import MockPort from "passbolt-styleguide/src/react-extension/test/mock/MockPort";
21
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
22
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
23
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
21
24
 
22
25
  describe("MoveResourcesController", () => {
26
+ beforeEach(() => {
27
+ jest
28
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
29
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
30
+ });
23
31
  it("Should ask the user's passphrase and call the move service", async () => {
24
32
  expect.assertions(3);
25
33
 
@@ -21,10 +21,11 @@ import GetOrFindPasswordExpirySettingsController from "./getOrFindPasswordExpiry
21
21
  import { defaultPasswordExpirySettingsDtoFromApi } from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity.test.data";
22
22
  import PasswordExpirySettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity";
23
23
  import {
24
- defaultCeOrganizationSettings,
25
- defaultProOrganizationSettings,
26
- } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
27
- import OrganizationSettingsService from "../../service/api/organizationSettings/organizationSettingsService";
24
+ defaultCeSiteSettings,
25
+ defaultProSiteSettings,
26
+ } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
27
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
28
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
28
29
  import PasswordExpiryProSettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiryPro/passwordExpiryProSettingsEntity";
29
30
 
30
31
  describe("GetOrFindPasswordExpirySettingsController", () => {
@@ -40,8 +41,10 @@ describe("GetOrFindPasswordExpirySettingsController", () => {
40
41
 
41
42
  describe("CE version", () => {
42
43
  beforeEach(() => {
43
- const organizationSettings = defaultCeOrganizationSettings();
44
- jest.spyOn(OrganizationSettingsService.prototype, "find").mockImplementation(() => organizationSettings);
44
+ const organizationSettings = defaultCeSiteSettings();
45
+ jest
46
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
47
+ .mockImplementation(() => new SiteSettingsEntity(organizationSettings));
45
48
  });
46
49
  it("Should return the value from the API", async () => {
47
50
  expect.assertions(1);
@@ -122,8 +125,10 @@ describe("GetOrFindPasswordExpirySettingsController", () => {
122
125
 
123
126
  describe("PRO version", () => {
124
127
  beforeEach(() => {
125
- const organizationSettings = defaultProOrganizationSettings();
126
- jest.spyOn(OrganizationSettingsService.prototype, "find").mockImplementation(() => organizationSettings);
128
+ const organizationSettings = defaultProSiteSettings();
129
+ jest
130
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
131
+ .mockImplementation(() => new SiteSettingsEntity(organizationSettings));
127
132
  });
128
133
  it("Should return the value from the API", async () => {
129
134
  expect.assertions(1);
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import PasswordExpirySettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity";
15
15
  import PasswordExpirySettingsModel from "../../model/passwordExpiry/passwordExpirySettingsModel";
16
- import OrganizationSettingsModel from "../../model/organizationSettings/organizationSettingsModel";
16
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
17
17
  import PasswordExpiryProSettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiryPro/passwordExpiryProSettingsEntity";
18
18
 
19
19
  class SavePasswordExpirySettingsController {
@@ -28,7 +28,7 @@ class SavePasswordExpirySettingsController {
28
28
  this.worker = worker;
29
29
  this.requestId = requestId;
30
30
  this.passwordExpirySettingsModel = new PasswordExpirySettingsModel(account, apiClientOptions);
31
- this.organisationSettingsModel = new OrganizationSettingsModel(apiClientOptions);
31
+ this.getOrFindSiteSettingsService = new GetOrFindSiteSettingsService(account, apiClientOptions);
32
32
  }
33
33
 
34
34
  /**
@@ -52,8 +52,8 @@ class SavePasswordExpirySettingsController {
52
52
  * @returns {Promise<PasswordExpirySettingsEntity>}
53
53
  */
54
54
  async exec(passwordExpirySettingsDto) {
55
- const organizationSettings = await this.organisationSettingsModel.getOrFind();
56
- const isAdvancedSettingsEnabled = organizationSettings.isPluginEnabled("passwordExpiryPolicies");
55
+ const siteSettings = await this.getOrFindSiteSettingsService.getOrFind(false);
56
+ const isAdvancedSettingsEnabled = siteSettings.isPluginEnabled("passwordExpiryPolicies");
57
57
  const entity = isAdvancedSettingsEnabled
58
58
  ? new PasswordExpiryProSettingsEntity(passwordExpirySettingsDto)
59
59
  : new PasswordExpirySettingsEntity(passwordExpirySettingsDto);
@@ -27,8 +27,9 @@ import {
27
27
  defaultPasswordExpirySettingsDtoFromApi,
28
28
  } from "passbolt-styleguide/src/shared/models/entity/passwordExpiry/passwordExpirySettingsEntity.test.data";
29
29
  import PasswordExpiryProSettingsEntity from "passbolt-styleguide/src/shared/models/entity/passwordExpiryPro/passwordExpiryProSettingsEntity";
30
- import { defaultCeOrganizationSettings } from "../../model/entity/organizationSettings/organizationSettingsEntity.test.data";
31
- import OrganizationSettingsService from "../../service/api/organizationSettings/organizationSettingsService";
30
+ import { defaultCeSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
31
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
32
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
32
33
 
33
34
  describe("SavePasswordExpirySettingsController", () => {
34
35
  let account, apiClientOptions;
@@ -47,9 +48,11 @@ describe("SavePasswordExpirySettingsController", () => {
47
48
  const dtoToSave = defaultPasswordExpirySettingsDto();
48
49
  const expectedDto = defaultPasswordExpirySettingsDtoFromApi(dtoToSave);
49
50
  const expectedEntity = new PasswordExpirySettingsEntity(expectedDto);
50
- const organizationSettings = defaultCeOrganizationSettings();
51
+ const organizationSettings = defaultCeSiteSettings();
51
52
 
52
- jest.spyOn(OrganizationSettingsService.prototype, "find").mockImplementation(() => organizationSettings);
53
+ jest
54
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
55
+ .mockImplementation(() => new SiteSettingsEntity(organizationSettings));
53
56
  fetch.doMockOnceIf(/password-expiry\/settings\.json/, async (request) => {
54
57
  const body = JSON.parse(await request.text());
55
58
  expect(body).toStrictEqual(dtoToSave);
@@ -75,12 +78,7 @@ describe("SavePasswordExpirySettingsController", () => {
75
78
  });
76
79
 
77
80
  const controller = new SavePasswordExpirySettingsController(null, null, account, apiClientOptions);
78
- jest.spyOn(controller.organisationSettingsModel, "getOrFind").mockImplementation(() =>
79
- Promise.resolve({
80
- isPluginEnabled: () => true,
81
- }),
82
- );
83
- jest.spyOn(controller.passwordExpirySettingsModel.organisationSettingsModel, "getOrFind").mockImplementation(() =>
81
+ jest.spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind").mockImplementation(() =>
84
82
  Promise.resolve({
85
83
  isPluginEnabled: () => true,
86
84
  }),
@@ -0,0 +1,62 @@
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.14.0
13
+ */
14
+ import FindResourcesService from "../../service/resource/findResourcesService";
15
+ import { assertArrayUUID } from "../../utils/assertions";
16
+
17
+ /**
18
+ * Controller for the `passbolt.permissions.find-by-ids-for-share` event.
19
+ * Returns the given resources with the permissions data tailored for the share process, fetched
20
+ * from the API in a single batched query (no metadata decryption, no passphrase prompt).
21
+ */
22
+ class FindPermissionsByIdsForShareController {
23
+ /**
24
+ * Constructor.
25
+ * @param {Worker} worker The associated worker.
26
+ * @param {string} requestId The associated request id.
27
+ * @param {ApiClientOptions} apiClientOptions The api client options.
28
+ * @param {AccountEntity} account The user account.
29
+ */
30
+ constructor(worker, requestId, apiClientOptions, account) {
31
+ this.worker = worker;
32
+ this.requestId = requestId;
33
+ this.findResourcesService = new FindResourcesService(account, apiClientOptions);
34
+ }
35
+
36
+ /**
37
+ * Controller executor.
38
+ * @param {Array<string>} resourcesIds The ids of the resources to retrieve.
39
+ * @returns {Promise<void>}
40
+ */
41
+ async _exec(resourcesIds) {
42
+ try {
43
+ const result = await this.exec(resourcesIds);
44
+ this.worker.port.emit(this.requestId, "SUCCESS", result);
45
+ } catch (error) {
46
+ console.error(error);
47
+ this.worker.port.emit(this.requestId, "ERROR", error);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Find the permissions of the given resources for the share process.
53
+ * @param {Array<string>} resourcesIds The ids of the resources to retrieve.
54
+ * @returns {Promise<ResourcesCollection>}
55
+ */
56
+ async exec(resourcesIds) {
57
+ assertArrayUUID(resourcesIds);
58
+ return this.findResourcesService.findAllPermissionsByIdsForShare(resourcesIds);
59
+ }
60
+ }
61
+
62
+ export default FindPermissionsByIdsForShareController;
@@ -0,0 +1,71 @@
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.14.0
13
+ */
14
+
15
+ import AccountEntity from "../../model/entity/account/accountEntity";
16
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
17
+ import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiClient/apiClientOptions.test.data";
18
+ import FindPermissionsByIdsForShareController from "./findPermissionsByIdsForShareController";
19
+ import ResourcesCollection from "../../model/entity/resource/resourcesCollection";
20
+ import { defaultResourceDto } from "passbolt-styleguide/src/shared/models/entity/resource/resourceEntity.test.data";
21
+
22
+ beforeEach(() => {
23
+ jest.clearAllMocks();
24
+ });
25
+
26
+ describe("FindPermissionsByIdsForShareController", () => {
27
+ describe("::exec", () => {
28
+ it("Should retrieve the permissions of the resources matching the given ids.", async () => {
29
+ expect.assertions(3);
30
+
31
+ const account = new AccountEntity(defaultAccountDto());
32
+ const resourcesDto = [defaultResourceDto(), defaultResourceDto()];
33
+ const resourcesCollection = new ResourcesCollection(resourcesDto);
34
+ const requestedIds = resourcesDto.map((resource) => resource.id);
35
+ const controller = new FindPermissionsByIdsForShareController(null, null, defaultApiClientOptions(), account);
36
+ jest
37
+ .spyOn(controller.findResourcesService, "findAllPermissionsByIdsForShare")
38
+ .mockImplementation(() => resourcesCollection);
39
+
40
+ const result = await controller.exec(requestedIds);
41
+
42
+ expect(result).toBeInstanceOf(ResourcesCollection);
43
+ expect(result).toStrictEqual(resourcesCollection);
44
+ expect(controller.findResourcesService.findAllPermissionsByIdsForShare).toHaveBeenCalledWith(requestedIds);
45
+ });
46
+
47
+ it("Should let error been thrown from the service if any.", async () => {
48
+ expect.assertions(1);
49
+
50
+ const account = new AccountEntity(defaultAccountDto());
51
+ const controller = new FindPermissionsByIdsForShareController(null, null, defaultApiClientOptions(), account);
52
+ const requestedIds = [defaultResourceDto().id];
53
+ jest.spyOn(controller.findResourcesService, "findAllPermissionsByIdsForShare").mockImplementation(() => {
54
+ throw new Error("Something went wrong!");
55
+ });
56
+
57
+ await expect(() => controller.exec(requestedIds)).rejects.toThrow();
58
+ });
59
+
60
+ it("Should assert its parameter.", async () => {
61
+ expect.assertions(1);
62
+
63
+ const account = new AccountEntity(defaultAccountDto());
64
+ const controller = new FindPermissionsByIdsForShareController(null, null, defaultApiClientOptions(), account);
65
+
66
+ await expect(() => controller.exec(["not-a-uuid"])).rejects.toThrow(
67
+ "The given parameter is not a valid array of uuid",
68
+ );
69
+ });
70
+ });
71
+ });
@@ -61,7 +61,7 @@ class GenerateRecoverAccountRecoveryRequestKeyController {
61
61
  email: temporaryAccount.account?.username,
62
62
  passphrase: generateGpgKeyPairDto?.passphrase,
63
63
  keySize: ACCOUNT_RECOVERY_REQUEST_KEY_SIZE,
64
- date: await GetGpgKeyCreationDateService.getDate(this.apiClientOptions),
64
+ date: await GetGpgKeyCreationDateService.getDate(temporaryAccount.account, this.apiClientOptions),
65
65
  };
66
66
  const generateGpgKeyPairOptionsEntity = new GenerateGpgKeyPairOptionsEntity(dto);
67
67
  const externalGpgKeyPair = await GenerateGpgKeyPairService.generateKeyPair(generateGpgKeyPairOptionsEntity);
@@ -40,11 +40,12 @@ class ResourceCreateController {
40
40
  * Controller executor.
41
41
  * @param {object} resourceDto The resource data
42
42
  * @param {string|object} plaintextDto The secret to encrypt
43
+ * @param {Array<object>} [permissionChanges] Optional permission changes applied after create.
43
44
  * @returns {Promise<void>}
44
45
  */
45
- async _exec(resourceDto, plaintextDto) {
46
+ async _exec(resourceDto, plaintextDto, permissionChanges) {
46
47
  try {
47
- const resource = await this.exec(resourceDto, plaintextDto);
48
+ const resource = await this.exec(resourceDto, plaintextDto, permissionChanges);
48
49
  this.worker.port.emit(this.requestId, "SUCCESS", resource);
49
50
  } catch (error) {
50
51
  console.error(error);
@@ -55,16 +56,22 @@ class ResourceCreateController {
55
56
  /**
56
57
  * @param {object} resourceDto The resource data
57
58
  * @param {string|object} plaintextDto The secret to encrypt
59
+ * @param {Array<object>} [permissionChanges] Optional permission changes applied after create.
58
60
  * @returns {Promise<void>}
59
61
  */
60
- async exec(resourceDto, plaintextDto) {
62
+ async exec(resourceDto, plaintextDto, permissionChanges) {
61
63
  const goals = resourceDto.folder_parent_id ? 10 : 3;
62
64
  const passphrase = await this.getPassphraseService.getPassphrase(this.worker);
63
65
  await this.verifyOrTrustMetadataKeyService.verifyTrustedOrTrustNewMetadataKey(passphrase);
64
66
  this.progressService.start(goals, i18n.t("Initializing"));
65
67
 
66
68
  try {
67
- const resourceCreated = await this.resourceCreateService.create(resourceDto, plaintextDto, passphrase);
69
+ const resourceCreated = await this.resourceCreateService.create(
70
+ resourceDto,
71
+ plaintextDto,
72
+ passphrase,
73
+ permissionChanges,
74
+ );
68
75
  await this.progressService.finishStep(i18n.t("Done!"), true);
69
76
  return resourceCreated;
70
77
  } finally {
@@ -27,12 +27,18 @@ import { v4 as uuidv4 } from "uuid";
27
27
  import EncryptMessageService from "../../service/crypto/encryptMessageService";
28
28
  import ResourceTypeService from "../../service/api/resourceType/resourceTypeService";
29
29
  import { resourceTypesCollectionDto } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection.test.data";
30
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
31
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
32
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
30
33
 
31
34
  jest.mock("../../service/passphrase/getPassphraseService");
32
35
  jest.mock("../../service/progress/progressService");
33
36
 
34
37
  beforeEach(() => {
35
38
  enableFetchMocks();
39
+ jest
40
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
41
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
36
42
  });
37
43
 
38
44
  describe("ResourceCreateController", () => {
@@ -61,7 +67,12 @@ describe("ResourceCreateController", () => {
61
67
  await controller._exec(resourceDTO, secret);
62
68
 
63
69
  expect(controller.resourceCreateService.create).toHaveBeenCalledTimes(1);
64
- expect(controller.resourceCreateService.create).toHaveBeenCalledWith(resourceDTO, secret, pgpKeys.ada.passphrase);
70
+ expect(controller.resourceCreateService.create).toHaveBeenCalledWith(
71
+ resourceDTO,
72
+ secret,
73
+ pgpKeys.ada.passphrase,
74
+ undefined,
75
+ );
65
76
  expect(controller.worker.port.emit).toHaveBeenCalledWith(null, "SUCCESS", resourceDTO);
66
77
  });
67
78
 
@@ -43,11 +43,12 @@ class ResourceUpdateController {
43
43
  * Controller executor.
44
44
  * @param {object} resourceDto The resource data
45
45
  * @param {string|object} plaintextDto The secret to encrypt
46
+ * @param {Array<object>} [permissionChanges] Optional permission changes applied after the update.
46
47
  * @returns {Promise<void>}
47
48
  */
48
- async _exec(resourceDto, plaintextDto) {
49
+ async _exec(resourceDto, plaintextDto, permissionChanges) {
49
50
  try {
50
- const resource = await this.exec(resourceDto, plaintextDto);
51
+ const resource = await this.exec(resourceDto, plaintextDto, permissionChanges);
51
52
  this.worker.port.emit(this.requestId, "SUCCESS", resource);
52
53
  } catch (error) {
53
54
  console.error(error);
@@ -60,15 +61,21 @@ class ResourceUpdateController {
60
61
  *
61
62
  * @param {object} resourceDto The resource data
62
63
  * @param {null|string|object} plaintextDto The secret to encrypt
64
+ * @param {Array<object>} [permissionChanges] Optional permission changes applied after the update.
63
65
  * @returns {Promise<Object>} updated resource
64
66
  */
65
- async exec(resourceDto, plaintextDto) {
67
+ async exec(resourceDto, plaintextDto, permissionChanges) {
66
68
  const passphrase = await this.getPassphraseService.getPassphrase(this.worker);
67
69
  await this.verifyOrTrustMetadataKeyService.verifyTrustedOrTrustNewMetadataKey(passphrase);
68
70
  this.progressService.start(1, i18n.t("Updating resource"));
69
71
 
70
72
  try {
71
- const resourceUpdated = await this.resourceUpdateService.exec(resourceDto, plaintextDto, passphrase);
73
+ const resourceUpdated = await this.resourceUpdateService.exec(
74
+ resourceDto,
75
+ plaintextDto,
76
+ passphrase,
77
+ permissionChanges,
78
+ );
72
79
  await this.progressService.finishStep(i18n.t("Done!"), true);
73
80
  return resourceUpdated;
74
81
  } finally {
@@ -27,12 +27,18 @@ import EncryptMessageService from "../../service/crypto/encryptMessageService";
27
27
  import ResourceTypeService from "../../service/api/resourceType/resourceTypeService";
28
28
  import { resourceTypesCollectionDto } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection.test.data";
29
29
  import PermissionService from "../../service/api/permission/permissionService";
30
+ import { anonymousSiteSettings } from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity.test.data";
31
+ import SiteSettingsEntity from "passbolt-styleguide/src/shared/models/entity/siteSettings/siteSettingsEntity";
32
+ import GetOrFindSiteSettingsService from "../../service/siteSettings/getOrFindSiteSettingsService";
30
33
 
31
34
  jest.mock("../../service/passphrase/getPassphraseService");
32
35
  jest.mock("../../service/progress/progressService");
33
36
 
34
37
  beforeEach(() => {
35
38
  enableFetchMocks();
39
+ jest
40
+ .spyOn(GetOrFindSiteSettingsService.prototype, "getOrFind")
41
+ .mockImplementation(() => new SiteSettingsEntity(anonymousSiteSettings()));
36
42
  });
37
43
 
38
44
  describe("ResourceUpdateController", () => {
@@ -62,7 +68,12 @@ describe("ResourceUpdateController", () => {
62
68
  await controller._exec(resourceDTO, null);
63
69
 
64
70
  expect(controller.resourceUpdateService.exec).toHaveBeenCalledTimes(1);
65
- expect(controller.resourceUpdateService.exec).toHaveBeenCalledWith(resourceDTO, null, pgpKeys.ada.passphrase);
71
+ expect(controller.resourceUpdateService.exec).toHaveBeenCalledWith(
72
+ resourceDTO,
73
+ null,
74
+ pgpKeys.ada.passphrase,
75
+ undefined,
76
+ );
66
77
  expect(controller.worker.port.emit).toHaveBeenCalledWith(null, "SUCCESS", resourceDTO);
67
78
  });
68
79
 
@@ -74,7 +85,29 @@ describe("ResourceUpdateController", () => {
74
85
  await controller._exec(resourceDTO, secret);
75
86
 
76
87
  expect(controller.resourceUpdateService.exec).toHaveBeenCalledTimes(1);
77
- expect(controller.resourceUpdateService.exec).toHaveBeenCalledWith(resourceDTO, secret, pgpKeys.ada.passphrase);
88
+ expect(controller.resourceUpdateService.exec).toHaveBeenCalledWith(
89
+ resourceDTO,
90
+ secret,
91
+ pgpKeys.ada.passphrase,
92
+ undefined,
93
+ );
94
+ expect(controller.worker.port.emit).toHaveBeenCalledWith(null, "SUCCESS", resourceDTO);
95
+ });
96
+
97
+ it("Should forward the permission changes to the resourceUpdateService", async () => {
98
+ expect.assertions(2);
99
+
100
+ const resourceDTO = defaultResourceDto();
101
+ const permissionChanges = [{ aro_foreign_key: "aro-id", aco_foreign_key: null, type: 1, is_new: true }];
102
+ jest.spyOn(controller.resourceUpdateService, "exec").mockImplementationOnce(() => resourceDTO);
103
+ await controller._exec(resourceDTO, secret, permissionChanges);
104
+
105
+ expect(controller.resourceUpdateService.exec).toHaveBeenCalledWith(
106
+ resourceDTO,
107
+ secret,
108
+ pgpKeys.ada.passphrase,
109
+ permissionChanges,
110
+ );
78
111
  expect(controller.worker.port.emit).toHaveBeenCalledWith(null, "SUCCESS", resourceDTO);
79
112
  });
80
113
 
@@ -12,7 +12,7 @@
12
12
  * @since 4.9.4
13
13
  */
14
14
 
15
- import ResourceTypeModel from "../../model/resourceType/resourceTypeModel";
15
+ import GetOrFindResourceTypesService from "../../service/resourceType/getOrFindResourceTypesService";
16
16
 
17
17
  class GetResourceTypesController {
18
18
  /**
@@ -21,11 +21,12 @@ class GetResourceTypesController {
21
21
  * @param {Worker} worker
22
22
  * @param {string} requestId
23
23
  * @param {ApiClientOptions} apiClientOptions the api client options
24
+ * @param {AccountEntity} account the account
24
25
  */
25
- constructor(worker, requestId, apiClientOptions) {
26
+ constructor(worker, requestId, apiClientOptions, account) {
26
27
  this.worker = worker;
27
28
  this.requestId = requestId;
28
- this.resourceTypeModel = new ResourceTypeModel(apiClientOptions);
29
+ this.getOrFindResourceTypesService = new GetOrFindResourceTypesService(account, apiClientOptions);
29
30
  }
30
31
 
31
32
  /**
@@ -47,7 +48,7 @@ class GetResourceTypesController {
47
48
  * @returns {Promise<ResourceTypesCollection>}
48
49
  */
49
50
  async exec() {
50
- return this.resourceTypeModel.getOrFindAll();
51
+ return this.getOrFindResourceTypesService.getOrFindAll();
51
52
  }
52
53
  }
53
54
 
@@ -17,6 +17,8 @@ import { defaultApiClientOptions } from "passbolt-styleguide/src/shared/lib/apiC
17
17
  import { resourceTypesCollectionDto } from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection.test.data";
18
18
  import GetResourceTypesController from "./getResourceTypesController";
19
19
  import ResourceTypesCollection from "passbolt-styleguide/src/shared/models/entity/resourceType/resourceTypesCollection";
20
+ import AccountEntity from "../../model/entity/account/accountEntity";
21
+ import { defaultAccountDto } from "../../model/entity/account/accountEntity.test.data";
20
22
 
21
23
  beforeEach(() => {
22
24
  enableFetchMocks();
@@ -30,9 +32,10 @@ describe("GetResourceTypesController", () => {
30
32
  expect.assertions(2);
31
33
 
32
34
  const resourceTypesDto = resourceTypesCollectionDto();
33
- const controller = new GetResourceTypesController(null, null, defaultApiClientOptions());
35
+ const account = new AccountEntity(defaultAccountDto());
36
+ const controller = new GetResourceTypesController(null, null, defaultApiClientOptions(), account);
34
37
  jest
35
- .spyOn(controller.resourceTypeModel, "getOrFindAll")
38
+ .spyOn(controller.getOrFindResourceTypesService, "getOrFindAll")
36
39
  .mockImplementationOnce(() => new ResourceTypesCollection(resourceTypesDto));
37
40
 
38
41
  const resourceTypesCollection = await controller.exec();