emilsoftware-utilities 2.0.0-dev.23 → 2.0.0-dev.24

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 (297) hide show
  1. package/README.MD +182 -38
  2. package/dist/ContractGenerator.d.ts +4 -3
  3. package/dist/ContractGenerator.js +15 -5
  4. package/dist/ContractGenerator.js.map +1 -1
  5. package/dist/DailyFileTransport.d.ts +8 -2
  6. package/dist/DailyFileTransport.js +9 -2
  7. package/dist/DailyFileTransport.js.map +1 -1
  8. package/dist/DatabaseUpdater.js +32 -27
  9. package/dist/DatabaseUpdater.js.map +1 -1
  10. package/dist/EmilsoftwareModule.js.map +1 -1
  11. package/dist/ExecutionTimeLogger.d.ts +2 -2
  12. package/dist/ExecutionTimeLogger.js +3 -2
  13. package/dist/ExecutionTimeLogger.js.map +1 -1
  14. package/dist/Logger.d.ts +22 -9
  15. package/dist/Logger.js +131 -54
  16. package/dist/Logger.js.map +1 -1
  17. package/dist/Orm.d.ts +26 -6
  18. package/dist/Orm.js +144 -40
  19. package/dist/Orm.js.map +1 -1
  20. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  21. package/dist/Utilities.d.ts +12 -7
  22. package/dist/Utilities.js +57 -22
  23. package/dist/Utilities.js.map +1 -1
  24. package/dist/accessi-module/AccessiModule.d.ts +9 -0
  25. package/dist/accessi-module/AccessiModule.js +12 -4
  26. package/dist/accessi-module/AccessiModule.js.map +1 -1
  27. package/dist/accessi-module/Console/console.css +529 -281
  28. package/dist/accessi-module/Console/console.js +2081 -85
  29. package/dist/accessi-module/Console/console.js.map +1 -1
  30. package/dist/accessi-module/Console/generated/accessiApi.d.ts +167 -1
  31. package/dist/accessi-module/Console/generated/accessiApi.js +156 -2
  32. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
  33. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +20 -8
  34. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -1
  35. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +12 -0
  36. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +9 -0
  37. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +1 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +12 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +9 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +1 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +12 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +9 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +1 -0
  44. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +12 -0
  45. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +9 -0
  46. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +1 -0
  47. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  48. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  49. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  50. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  51. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  52. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  53. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
  54. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  55. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  56. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  57. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  58. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  59. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  60. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  61. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  62. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  63. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  64. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  65. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  66. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  67. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  68. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  69. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  70. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  71. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  72. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  73. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  74. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  75. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  76. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  77. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +8 -0
  78. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -1
  79. package/dist/accessi-module/Console/generated/model/index.d.ts +18 -0
  80. package/dist/accessi-module/Console/generated/model/index.js +18 -0
  81. package/dist/accessi-module/Console/generated/model/index.js.map +1 -1
  82. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  83. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  84. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  85. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  86. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  87. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  88. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +13 -0
  89. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +9 -0
  90. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +1 -0
  91. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +13 -0
  92. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +9 -0
  93. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +1 -0
  94. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  95. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  96. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  97. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  98. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  99. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  100. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  101. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  102. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  103. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
  104. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  105. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  106. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  107. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  108. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  109. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  110. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  111. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  112. package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +13 -0
  113. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +9 -0
  114. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +1 -0
  115. package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +13 -0
  116. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +9 -0
  117. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +1 -0
  118. package/dist/accessi-module/Console/help.d.ts +13 -0
  119. package/dist/accessi-module/Console/help.js +348 -0
  120. package/dist/accessi-module/Console/help.js.map +1 -0
  121. package/dist/accessi-module/Console/index.html +89 -21
  122. package/dist/accessi-module/Console/openApiClient.d.ts +34 -0
  123. package/dist/accessi-module/Console/openApiClient.js +111 -0
  124. package/dist/accessi-module/Console/openApiClient.js.map +1 -0
  125. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  126. package/dist/accessi-module/Console/wiki.js +689 -0
  127. package/dist/accessi-module/Console/wiki.js.map +1 -0
  128. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +8 -1
  129. package/dist/accessi-module/Controllers/AccessiConsoleController.js +52 -15
  130. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -1
  131. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
  132. package/dist/accessi-module/Controllers/ConfiguratorController.js +6 -8
  133. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  134. package/dist/accessi-module/Controllers/EmailController.d.ts +1 -1
  135. package/dist/accessi-module/Controllers/EmailController.js +1 -1
  136. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  137. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  138. package/dist/accessi-module/Controllers/FiltriController.js +92 -4
  139. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  140. package/dist/accessi-module/Controllers/PermissionController.d.ts +11 -0
  141. package/dist/accessi-module/Controllers/PermissionController.js +273 -8
  142. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  143. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  144. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  145. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  146. package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
  147. package/dist/accessi-module/Controllers/UserController.js +25 -9
  148. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  149. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  150. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  151. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  152. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  153. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  154. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  155. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  156. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
  157. package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
  158. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  159. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
  160. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  161. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  162. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  163. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  164. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  165. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
  166. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
  167. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  168. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  169. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  170. package/dist/accessi-module/Dtos/LoginResponse.d.ts +1 -1
  171. package/dist/accessi-module/Dtos/LoginResponse.js +1 -1
  172. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  173. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  174. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  175. package/dist/accessi-module/Dtos/RegisterRequest.js +2 -1
  176. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  177. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  178. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  179. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  180. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
  181. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  182. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  183. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  184. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  185. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  186. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  187. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  188. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  189. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -1
  190. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  191. package/dist/accessi-module/Dtos/UserDto.js +4 -2
  192. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  193. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  194. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
  195. package/dist/accessi-module/Dtos/index.d.ts +2 -0
  196. package/dist/accessi-module/Dtos/index.js +2 -0
  197. package/dist/accessi-module/Dtos/index.js.map +1 -1
  198. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +2 -2
  199. package/dist/accessi-module/Services/AuthService/AuthService.js +36 -36
  200. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  201. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  202. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +2 -1
  203. package/dist/accessi-module/Services/EmailService/EmailService.js +20 -17
  204. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  205. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +10 -3
  206. package/dist/accessi-module/Services/FiltriService/FiltriService.js +64 -6
  207. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  208. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +44 -1
  209. package/dist/accessi-module/Services/PermissionService/PermissionService.js +508 -200
  210. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  211. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  212. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  213. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  214. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +23 -27
  215. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -1
  216. package/dist/accessi-module/Services/UserService/UserService.d.ts +10 -3
  217. package/dist/accessi-module/Services/UserService/UserService.js +241 -155
  218. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  219. package/dist/accessi-module/Views/reset-password.html +213 -213
  220. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +8 -0
  221. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +89 -55
  222. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  223. package/dist/accessi-module/database-updates/accessiSchema.d.ts +1 -1
  224. package/dist/accessi-module/database-updates/accessiSchema.js +9 -1
  225. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -1
  226. package/dist/accessi-module/database-updates/optionalColumns.d.ts +2 -0
  227. package/dist/accessi-module/database-updates/optionalColumns.js +33 -1
  228. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -1
  229. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +7 -2
  230. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  231. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +1 -0
  232. package/dist/accessi-module/federated-auth/FederatedAuthController.js +26 -0
  233. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -1
  234. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +6 -0
  235. package/dist/accessi-module/federated-auth/FederatedAuthService.js +28 -1
  236. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -1
  237. package/dist/accessi-module/index.d.ts +4 -1
  238. package/dist/accessi-module/index.js +8 -2
  239. package/dist/accessi-module/index.js.map +1 -1
  240. package/dist/accessi-module/jwt/jwt.strategy.js +8 -5
  241. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  242. package/dist/accessi-module/middleware/accessiRequirements.d.ts +1 -1
  243. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  244. package/dist/accessi-module/middleware/authenticateGen.js +11 -7
  245. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  246. package/dist/accessi-module/security/accessControl.js +8 -3
  247. package/dist/accessi-module/security/accessControl.js.map +1 -1
  248. package/dist/accessi-module/security/authenticatedToken.d.ts +1 -1
  249. package/dist/accessi-module/security/authenticatedToken.js +2 -1
  250. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  251. package/dist/accessi-module/security/passwordResetToken.d.ts +9 -3
  252. package/dist/accessi-module/security/passwordResetToken.js +9 -5
  253. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  254. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +1 -1
  255. package/dist/accessi-module/security/publicAuthRateLimit.js +28 -8
  256. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  257. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  258. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  259. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  260. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  261. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  262. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  263. package/dist/allegati-module/AllegatiModule.d.ts +11 -0
  264. package/dist/allegati-module/AllegatiModule.js +11 -1
  265. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  266. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  267. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  268. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  269. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  270. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  271. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  272. package/dist/allegati-module/Dtos/index.js.map +1 -1
  273. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  274. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  275. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  276. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  277. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  278. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  279. package/dist/allegati-module/index.js.map +1 -1
  280. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  281. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  282. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  283. package/dist/autobind.d.ts +10 -3
  284. package/dist/autobind.js +24 -9
  285. package/dist/autobind.js.map +1 -1
  286. package/dist/firebird-compat.d.ts +13 -0
  287. package/dist/firebird-compat.js +3 -2
  288. package/dist/firebird-compat.js.map +1 -1
  289. package/dist/index.js.map +1 -1
  290. package/dist/initEmilsoftwareModule.js.map +1 -1
  291. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  292. package/dist/scripts/generateAccessiWiki.js +131 -0
  293. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  294. package/dist/swagger/SwaggerConfig.js +6 -3
  295. package/dist/swagger/SwaggerConfig.js.map +1 -1
  296. package/package.json +103 -92
  297. package/dist/emilsoftware-utilities-2.0.0-dev.23.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, ConflictException, Inject, Injectable } from '@nestjs/common';\nimport { getTableColumns, optionalColumn } from '../../database-updates/optionalColumns';\nimport { autobind } from '../../../autobind';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport type { AccessiOptions } from '../../AccessiModule';\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\nimport { GetUsersResult } from '../../Dtos/GetUsersResponse';\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport { UserDto } from '../../Dtos/UserDto';\nimport { UserGrantsDto } from '../../Dtos/UserGrantsDto';\nimport { AccessiAuthenticatedUserSnapshot } from '../../security/authenticatedToken';\nimport { EmailService } from '../EmailService/EmailService';\nimport { FiltriService } from '../FiltriService/FiltriService';\nimport { PermissionService } from '../PermissionService/PermissionService';\n\ninterface OptionalField<T> {\n key: keyof RegisterRequest;\n dbField: string;\n transform?: (value: any) => T;\n}\n\n@autobind\n@Injectable()\nexport class UserService {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly emailService: EmailService,\n private readonly permissionService: PermissionService,\n private readonly filtriService: FiltriService,\n ) {}\n\n private async validateApplicationFields(value: { nummac?: number; ragSocCli?: string } & Partial<FiltriUtente>): Promise<{ configColumns?: Set<string> }> {\n type ApplicationField = 'nummac' | 'ragSocCli';\n const applicationFields: ReadonlyArray<readonly [ApplicationField, string]> = [['nummac', 'NUMMAC'], ['ragSocCli', 'RAGSOCCLI']];\n let configColumns: Set<string> | undefined;\n if (applicationFields.some(([key]) => value[key] !== undefined)) {\n configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\n for (const [key, column] of applicationFields) {\n if (value[key] !== undefined && value[key] !== null && !configColumns.has(column)) {\n throw new BadRequestException(`Campo applicativo non configurato: UTENTI_CONFIG.${column}`);\n }\n }\n }\n const filterKeys = Object.keys(FILTRI_UTENTE_DB_MAPPING) as Array<keyof FiltriUtente>;\n if (filterKeys.some(key => value[key] !== undefined && value[key] !== null && value[key] !== '')) {\n await this.filtriService.validateSupportedFields(value);\n }\n return { configColumns };\n }\n\n private normalizeDatabaseBoolean(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n }\n\n private normalizeUserFlags(user: UserDto): UserDto {\n return { ...user,\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\n flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),\n passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),\n passwordLoginEnabled: user.passwordLoginEnabled == null || this.normalizeDatabaseBoolean(user.passwordLoginEnabled),\n };\n }\n\n private normalizeEmail(email: string): string {\n if (typeof email !== 'string' || email.trim() === '') {\n throw new BadRequestException({ code: 'ACCESSI_EMAIL_REQUIRED', message: \"L'email è obbligatoria.\" });\n }\n\n return email.trim().toLowerCase();\n }\n\n private async ensureEmailIsAvailable(email: string, currentUserCode?: number): Promise<void> {\n const result = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?',\n [email],\n );\n\n const existingUser = result.map(RestUtilities.convertKeysToCamelCase)[0] as\n | { codiceUtente?: number }\n | undefined;\n\n if (\n existingUser?.codiceUtente &&\n (!currentUserCode || existingUser.codiceUtente !== currentUserCode)\n ) {\n throw new ConflictException({ code: 'ACCESSI_EMAIL_ALREADY_EXISTS', message: \"L'email è già associata a un utente Accessi.\" });\n }\n }\n\n /** Determina se l'utente puo amministrare il configuratore Accessi (`FLGADMINCONFIG`). */\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\n if (!codiceUtente) {\n return false;\n }\n\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\n\n if (!result || result === 0) {\n return false;\n }\n\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\n return this.normalizeDatabaseBoolean(mapped[0]?.flagAdminConfigurator);\n }\n\n /**\n * Legge il minimo profilo autorevole usato da JWT e middleware. Restituisce `null` per utenti inesistenti.\n * Non usare `UserDto` dal token per decisioni di sicurezza: i flag vengono sempre riletti qui.\n */\n async getAuthenticatedUserSnapshot(\n codiceUtente: number,\n ): Promise<AccessiAuthenticatedUserSnapshot | null> {\n if (!codiceUtente || codiceUtente <= 0) {\n return null;\n }\n\n const result = await Orm.query(\n this.accessiOptions.databaseOptions,\n `\n SELECT\n U.CODUTE AS codice_utente,\n U.USRNAME AS email,\n U.STAREG AS stato_registrazione,\n C.FLGSUPER AS flag_super,\n C.FLGADMINCONFIG AS flag_admin_configurator\n , C.FLG2FATT AS flag_due_fattori\n , C.FLGPWDLESS AS passwordless_login_enabled\n , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled\n FROM UTENTI U\n LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\n WHERE U.CODUTE = ?\n `,\n [codiceUtente],\n );\n\n const user = result.map(RestUtilities.convertKeysToCamelCase)[0] as\n | {\n codiceUtente?: number;\n email?: string;\n statoRegistrazione?: StatoRegistrazione | number;\n flagSuper?: unknown;\n flagAdminConfigurator?: unknown;\n flagDueFattori?: unknown;\n passwordlessLoginEnabled?: unknown;\n passwordLoginEnabled?: unknown;\n }\n | undefined;\n\n if (!user?.codiceUtente) {\n return null;\n }\n\n return {\n codiceUtente: Number(user.codiceUtente),\n email: typeof user.email === 'string' ? user.email : undefined,\n statoRegistrazione: Number(user.statoRegistrazione) as StatoRegistrazione,\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\n flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),\n passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),\n passwordLoginEnabled: this.normalizeDatabaseBoolean(user.passwordLoginEnabled),\n };\n }\n\n /**\n * Elenca gli utenti con filtri opzionali. Grant e campi estesi sono costosi e vengono caricati soltanto\n * quando richiesti esplicitamente nelle opzioni; usare filtri puntuali nei flussi di autenticazione.\n */\n async getUsers(\n filters?: { email?: string; codiceUtente?: number },\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\n ): Promise<GetUsersResult[]> {\n try {\n const configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\n const filterColumns = await getTableColumns(this.accessiOptions, 'FILTRI');\n let query = ` \n SELECT \n U.CODUTE as codice_utente, \n U.USRNAME as email, \n U.FLGGDPR as flag_gdpr, \n U.DATGDPR as data_gdpr, \n U.DATINS as data_inserimento, \n U.DATSCAPWD as data_scadenza_password, \n U.DATLASTLOGIN as data_last_login, \n U.STAREG as stato_registrazione, \n G.COGNOME as cognome, \n G.NOME as nome, \n G.AVATAR as avatar, \n G.FLG2FATT as flag_due_fattori,\n G.FLGPWDLESS as passwordless_login_enabled,\n G.CODLINGUA as codice_lingua,\n G.CELLULARE as cellulare,\n G.FLGSUPER as flag_super, \n G.FLGADMINCONFIG as flag_admin_configurator,\n COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,\n G.PAGDEF as pagina_default,\n G.JSON_METADATA as json_metadata,\n ${optionalColumn(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},\n ${optionalColumn(configColumns, 'NUMMAC', 'G', 'nummac')},\n ${optionalColumn(filterColumns, 'NUMREP', 'F', 'num_rep', true)},\n ${optionalColumn(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},\n ${optionalColumn(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},\n ${optionalColumn(filterColumns, 'CODAGE', 'F', 'cod_age', true)},\n ${optionalColumn(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},\n ${optionalColumn(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},\n F.TIPFIL AS tip_fil,\n ${optionalColumn(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}\n FROM UTENTI U \n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\n WHERE 1=1\n `;\n\n const queryParams: any[] = [];\n\n if (filters?.email) {\n query += ` AND LOWER(U.USRNAME) = ? `;\n queryParams.push(filters.email.trim().toLowerCase());\n }\n\n if (filters?.codiceUtente) {\n query += ` AND U.CODUTE = ? `;\n queryParams.push(filters.codiceUtente);\n }\n\n query += ` ORDER BY U.CODUTE DESC `;\n\n let users = (await Orm.query(\n this.accessiOptions.databaseOptions,\n query,\n queryParams,\n )) as UserDto[];\n users = users.map(RestUtilities.convertKeysToCamelCase).map(user => this.normalizeUserFlags(user));\n\n const usersResponse: GetUsersResult[] = [];\n\n for (const user of users) {\n let userGrants: UserGrantsDto | undefined;\n\n if (options?.includeGrants) {\n userGrants = await this.permissionService.getUserRolesAndGrants(user.codiceUtente);\n }\n\n let extensionFields: Record<string, unknown[]> | undefined;\n\n if (options?.includeExtensionFields) {\n extensionFields = {};\n }\n\n if (extensionFields && this.accessiOptions.extensionFieldsOptions) {\n for (const ext of this.accessiOptions.extensionFieldsOptions) {\n const values = (\n await Orm.query(\n ext.databaseOptions,\n `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${\n ext.tableJoinFieldName\n } = ?`,\n [user.codiceUtente],\n )\n ).map(RestUtilities.convertKeysToCamelCase);\n\n extensionFields[ext.objectKey] = values;\n }\n }\n\n usersResponse.push({\n utente: user,\n userGrants,\n extensionFields,\n });\n }\n\n return usersResponse;\n } catch (error) {\n throw error;\n }\n }\n\n /** Cerca il codice interno per email normalizzata. Il chiamante deve gestire il caso senza righe. */\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\n try {\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\n email.trim().toLowerCase(),\n ]);\n return result.map(RestUtilities.convertKeysToCamelCase)[0];\n } catch (error) {\n throw error;\n }\n }\n\n /** Recupera il profilo locale usato dal login, compresi filtri Accessi eventualmente presenti. */\n async getUserByEmail(email: string): Promise<UserDto | null> {\n const configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\n const query = `\n SELECT \n U.CODUTE AS codice_utente, \n U.USRNAME AS email, \n U.FLGGDPR AS flag_gdpr,\n U.DATSCAPWD as data_scadenza_password,\n U.STAREG AS stato_registrazione, \n C.COGNOME AS cognome, \n C.NOME AS nome, \n C.AVATAR AS avatar, \n C.FLG2FATT AS flag_due_fattori,\n C.FLGPWDLESS AS passwordless_login_enabled,\n C.CODLINGUA AS codice_lingua, \n C.CELLULARE AS cellulare, \n C.FLGSUPER AS flag_super,\n C.FLGADMINCONFIG AS flag_admin_configurator,\n COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,\n C.PAGDEF AS pagina_default,\n ${optionalColumn(configColumns, 'NUMMAC', 'C', 'nummac')},\n ${optionalColumn(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)}\n FROM UTENTI U\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\n WHERE LOWER(U.USRNAME) = ?\n `;\n\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\n )) as UserDto[];\n\n if (utenti.length <= 0) return null;\n const filtriUtente = await this.filtriService.getFiltriUser(utenti[0].codiceUtente);\n\n if (utenti.length > 0 && filtriUtente.length > 0) {\n const user = utenti[0];\n const filtro = filtriUtente[0];\n const filterValues: Record<string, unknown> = {};\n\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\n if (key in filtro) {\n filterValues[key] = filtro[key as keyof FiltriUtente];\n }\n });\n\n Object.assign(user, filterValues);\n }\n\n return utenti.length > 0 ? this.normalizeUserFlags(utenti[0]) : null;\n }\n\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\n await this.filtriService.upsertFiltriUtente(codiceUtente, filterData);\n }\n\n private async executeInTransaction(operation: () => Promise<void>): Promise<void> {\n await operation();\n }\n\n /**\n * Crea utente, configurazione e filtri. La registrazione pubblica resta in stato `INVIO` e non puo\n * impostare privilegi, ruoli o grant; soltanto flussi backend fidati possono usare `allowPrivilegedFields`.\n */\n async register(\n registrationData: RegisterRequest,\n options?: { allowPrivilegedFields?: boolean; initialState?: StatoRegistrazione },\n ): Promise<number> {\n try {\n const allowPrivilegedFields = options?.allowPrivilegedFields === true;\n const normalizedEmail = this.normalizeEmail(registrationData.email);\n\n if (registrationData.flagDueFattori !== undefined && typeof registrationData.flagDueFattori !== 'boolean') {\n throw new BadRequestException('Il flag due fattori deve essere booleano.');\n }\n if (registrationData.flagDueFattori && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(normalizedEmail)) {\n throw new BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');\n }\n\n if (\n !allowPrivilegedFields &&\n (registrationData.flagSuper !== undefined ||\n registrationData.flagAdminConfigurator !== undefined ||\n registrationData.flagDueFattori !== undefined ||\n registrationData.roles !== undefined ||\n registrationData.permissions !== undefined)\n ) {\n throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');\n }\n\n await this.validateApplicationFields(registrationData);\n await this.ensureEmailIsAvailable(normalizedEmail);\n\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;\n // Public/local registrations keep the historic INVIO state; trusted master or SSO flows may opt into CONF.\n const paramsUtenti = [normalizedEmail, options?.initialState ?? StatoRegistrazione.INVIO];\n\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);\n\n const codiceUtenteResult = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC',\n [normalizedEmail],\n );\n\n const codiceUtente = Number(\n codiceUtenteResult?.[0]?.CODUTE ?? codiceUtenteResult?.[0]?.codute,\n );\n if (!codiceUtente) {\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\n }\n\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\n const utentiConfigPlaceholders = ['?', '?', '?'];\n const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];\n\n const optionalFields: OptionalField<any>[] = [\n {\n key: 'cellulare',\n dbField: 'CELLULARE',\n transform: (v) => String(v),\n },\n {\n key: 'avatar',\n dbField: 'AVATAR',\n transform: (v) => String(v),\n },\n {\n key: 'flagDueFattori',\n dbField: 'FLG2FATT',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'paginaDefault',\n dbField: 'PAGDEF',\n transform: (v) => String(v),\n },\n {\n key: 'nummac',\n dbField: 'NUMMAC',\n transform: (v) => Number(v),\n },\n {\n key: 'ragSocCli',\n dbField: 'RAGSOCCLI',\n transform: (v) => String(v),\n },\n ];\n\n if (allowPrivilegedFields) {\n optionalFields.push(\n {\n key: 'flagSuper',\n dbField: 'FLGSUPER',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'flagAdminConfigurator',\n dbField: 'FLGADMINCONFIG',\n transform: (v) => (v ? 1 : 0),\n },\n );\n }\n\n for (const field of optionalFields) {\n const value = registrationData[field.key];\n if (value !== undefined && value !== null) {\n utentiConfigFields.push(field.dbField);\n utentiConfigPlaceholders.push('?');\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\n }\n }\n\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\n ', ',\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);\n\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\n\n if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\n }\n\n if (\n allowPrivilegedFields &&\n !!registrationData.permissions &&\n registrationData.permissions.length > 0\n ) {\n await this.permissionService.assignPermissionsToUser(\n codiceUtente,\n registrationData.permissions,\n );\n }\n\n return codiceUtente;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Aggiorna il profilo utente e i filtri. Le modifiche a stato, ruoli, grant e flag amministrativi richiedono\n * `allowPrivilegedChanges`; gli array ruolo/grant passati in un flusso fidato sostituiscono le assegnazioni.\n */\n async updateUser(\n codiceUtente: number,\n user: UserDto,\n options?: { allowPrivilegedChanges?: boolean },\n ): Promise<void> {\n try {\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\n const allowPrivilegedChanges = options?.allowPrivilegedChanges === true;\n\n for (const value of [user.flagDueFattori, user.passwordlessLoginEnabled]) {\n if (value !== undefined && typeof value !== 'boolean') throw new BadRequestException('Le policy di autenticazione devono essere booleane.');\n }\n\n if (\n !allowPrivilegedChanges &&\n (user.statoRegistrazione !== undefined ||\n user.flagSuper !== undefined ||\n user.flagAdminConfigurator !== undefined ||\n user.passwordLoginEnabled !== undefined ||\n user.passwordlessLoginEnabled !== undefined ||\n user.flagDueFattori !== undefined ||\n user.roles !== undefined ||\n user.permissions !== undefined)\n ) {\n throw new Error('Non e consentito modificare campi privilegiati.');\n }\n\n if (user.flagDueFattori !== undefined || user.passwordlessLoginEnabled !== undefined || user.email !== undefined) {\n const current = await this.getAuthenticatedUserSnapshot(codiceUtente);\n if (!current) throw new BadRequestException('Utente non trovato.');\n const twoFactor = user.flagDueFattori ?? current.flagDueFattori;\n const passwordless = user.passwordlessLoginEnabled ?? current.passwordlessLoginEnabled;\n if (passwordless && !twoFactor) throw new BadRequestException('Il login senza password richiede il codice di accesso attivo.');\n if (twoFactor && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test((user.email ?? current.email ?? '').trim())) {\n throw new BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');\n }\n }\n\n const { configColumns } = await this.validateApplicationFields(user);\n const utentiUpdates = [];\n const utentiParams = [];\n\n if (user.email !== undefined) {\n const normalizedEmail = this.normalizeEmail(user.email);\n await this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);\n utentiUpdates.push('usrname = ?');\n utentiParams.push(normalizedEmail);\n }\n if (user.flagGdpr !== undefined) {\n utentiUpdates.push('flggdpr = ?');\n utentiParams.push(user.flagGdpr);\n }\n if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {\n utentiUpdates.push('stareg = ?');\n utentiParams.push(user.statoRegistrazione);\n }\n\n if (utentiUpdates.length > 0) {\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\n utentiParams.push(codiceUtente);\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\n }\n\n const utentiConfigUpdates = [];\n const utentiConfigParams = [];\n\n if (user.cognome !== undefined) {\n utentiConfigUpdates.push('cognome = ?');\n utentiConfigParams.push(user.cognome);\n }\n if (user.nome !== undefined) {\n utentiConfigUpdates.push('nome = ?');\n utentiConfigParams.push(user.nome);\n }\n if (user.avatar !== undefined) {\n utentiConfigUpdates.push('avatar = ?');\n utentiConfigParams.push(user.avatar);\n }\n if (user.flagDueFattori !== undefined) {\n utentiConfigUpdates.push('flg2fatt = ?');\n utentiConfigParams.push(user.flagDueFattori ? 1 : 0);\n }\n if (user.passwordlessLoginEnabled !== undefined) {\n utentiConfigUpdates.push('flgpwdless = ?');\n utentiConfigParams.push(user.passwordlessLoginEnabled ? 1 : 0);\n }\n if (user.codiceLingua !== undefined) {\n utentiConfigUpdates.push('codlingua = ?');\n utentiConfigParams.push(user.codiceLingua);\n }\n if (user.cellulare !== undefined) {\n utentiConfigUpdates.push('cellulare = ?');\n utentiConfigParams.push(user.cellulare);\n }\n if (allowPrivilegedChanges && user.flagSuper !== undefined) {\n utentiConfigUpdates.push('flgsuper = ?');\n utentiConfigParams.push(user.flagSuper);\n }\n if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {\n utentiConfigUpdates.push('flgadminconfig = ?');\n utentiConfigParams.push(user.flagAdminConfigurator);\n }\n if (allowPrivilegedChanges && user.passwordLoginEnabled !== undefined) {\n utentiConfigUpdates.push('flgpassword = ?');\n utentiConfigParams.push(user.passwordLoginEnabled ? 1 : 0);\n }\n if (user.paginaDefault !== undefined) {\n utentiConfigUpdates.push('pagdef = ?');\n utentiConfigParams.push(user.paginaDefault);\n }\n if (user.jsonMetadata !== undefined) {\n utentiConfigUpdates.push('json_metadata = ?');\n utentiConfigParams.push(user.jsonMetadata);\n }\n if (user.ragSocCli !== undefined && (user.ragSocCli !== null || configColumns?.has('RAGSOCCLI'))) {\n utentiConfigUpdates.push('ragsoccli = ?');\n utentiConfigParams.push(user.ragSocCli);\n }\n\n if (utentiConfigUpdates.length > 0) {\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\n ', ',\n )} WHERE CODUTE = ?`;\n utentiConfigParams.push(codiceUtente);\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n queryUtentiConfig,\n utentiConfigParams,\n );\n }\n\n if (allowPrivilegedChanges && Array.isArray(user.roles)) {\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\n }\n\n if (allowPrivilegedChanges && Array.isArray(user.permissions)) {\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\n }\n\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\n } catch (error) {\n throw error;\n }\n }\n\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\n }\n\n /** Eliminazione logica: imposta lo stato `DELETE` senza cancellare lo storico o i collegamenti SSO. */\n async deleteUser(codiceCliente: number): Promise<void> {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n StatoRegistrazione.DELETE,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n /** Cambia esplicitamente lo stato di registrazione; usare questa API per blocco, conferma o eliminazione logica. */\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n statoRegistrazione,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n public async setGdpr(codiceUtente: number) {\n try {\n return await Orm.executeMultiple(this.accessiOptions.databaseOptions, [\n { query: 'INSERT INTO UTENTI_GDPR (CODUTE, GDPR) VALUES (?, ?)', params: [codiceUtente, 'true'] },\n { query: 'UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_DATE WHERE CODUTE = ?', params: [codiceUtente] },\n ]);\n } catch (error) {\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, ConflictException, Inject, Injectable } from '@nestjs/common';\r\nimport { getTableColumns, optionalColumn } from '../../database-updates/optionalColumns';\r\nimport { autobind } from '../../../autobind';\r\nimport { Orm } from '../../../Orm';\r\nimport { RestUtilities } from '../../../Utilities';\r\nimport type { AccessiOptions } from '../../AccessiModule';\r\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\r\nimport { GetUsersResult } from '../../Dtos/GetUsersResponse';\r\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\r\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\r\nimport { UserDto } from '../../Dtos/UserDto';\r\nimport { UserGrantsDto } from '../../Dtos/UserGrantsDto';\r\nimport { AccessiAuthenticatedUserSnapshot } from '../../security/authenticatedToken';\r\nimport { EmailService } from '../EmailService/EmailService';\r\nimport { FiltriService } from '../FiltriService/FiltriService';\r\nimport { PermissionService } from '../PermissionService/PermissionService';\r\n\r\ninterface OptionalField<T> {\r\n key: keyof RegisterRequest;\r\n dbField: string;\r\n transform?: (value: unknown) => T;\r\n}\r\n\r\n@autobind\r\n@Injectable()\r\nexport class UserService {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n _emailService: EmailService,\r\n private readonly permissionService: PermissionService,\r\n private readonly filtriService: FiltriService,\r\n ) {}\r\n\r\n private async validateApplicationFields(value: { nummac?: number; ragSocCli?: string } & Partial<FiltriUtente>): Promise<{ configColumns?: Set<string> }> {\r\n type ApplicationField = 'nummac' | 'ragSocCli';\r\n const applicationFields: ReadonlyArray<readonly [ApplicationField, string]> = [['nummac', 'NUMMAC'], ['ragSocCli', 'RAGSOCCLI']];\r\n let configColumns: Set<string> | undefined;\r\n if (applicationFields.some(([key]) => value[key] !== undefined)) {\r\n configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\r\n for (const [key, column] of applicationFields) {\r\n if (value[key] !== undefined && value[key] !== null && !configColumns.has(column)) {\r\n throw new BadRequestException(`Campo applicativo non configurato: UTENTI_CONFIG.${column}`);\r\n }\r\n }\r\n }\r\n const filterKeys = Object.keys(FILTRI_UTENTE_DB_MAPPING) as Array<keyof FiltriUtente>;\r\n if (filterKeys.some(key => value[key] !== undefined && value[key] !== null && value[key] !== '')) {\r\n await this.filtriService.validateSupportedFields(value);\r\n }\r\n return { configColumns };\r\n }\r\n\r\n private normalizeDatabaseBoolean(value: unknown): boolean {\r\n return value === true || value === 1 || value === '1';\r\n }\r\n\r\n private normalizeUserFlags(user: UserDto): UserDto {\r\n return { ...user,\r\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\r\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\r\n flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),\r\n passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),\r\n passwordLoginEnabled: user.passwordLoginEnabled == null || this.normalizeDatabaseBoolean(user.passwordLoginEnabled),\r\n };\r\n }\r\n\r\n private normalizeEmail(email: string): string {\r\n if (typeof email !== 'string' || email.trim() === '') {\r\n throw new BadRequestException({ code: 'ACCESSI_EMAIL_REQUIRED', message: \"L'email è obbligatoria.\" });\r\n }\r\n\r\n return email.trim().toLowerCase();\r\n }\r\n\r\n private async ensureEmailIsAvailable(email: string, currentUserCode?: number): Promise<void> {\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?',\r\n [email],\r\n );\r\n\r\n const existingUser = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | { codiceUtente?: number }\r\n | undefined;\r\n\r\n if (\r\n existingUser?.codiceUtente &&\r\n (!currentUserCode || existingUser.codiceUtente !== currentUserCode)\r\n ) {\r\n throw new ConflictException({ code: 'ACCESSI_EMAIL_ALREADY_EXISTS', message: \"L'email è già associata a un utente Accessi.\" });\r\n }\r\n }\r\n\r\n /** Determina se l'utente puo amministrare il configuratore Accessi (`FLGADMINCONFIG`). */\r\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\r\n if (!codiceUtente) {\r\n return false;\r\n }\r\n\r\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\r\n\r\n if (result.length === 0) {\r\n return false;\r\n }\r\n\r\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\r\n return this.normalizeDatabaseBoolean(mapped[0]?.flagAdminConfigurator);\r\n }\r\n\r\n /**\r\n * Legge il minimo profilo autorevole usato da JWT e middleware. Restituisce `null` per utenti inesistenti.\r\n * Non usare `UserDto` dal token per decisioni di sicurezza: i flag vengono sempre riletti qui.\r\n */\r\n async getAuthenticatedUserSnapshot(\r\n codiceUtente: number,\r\n ): Promise<AccessiAuthenticatedUserSnapshot | null> {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n return null;\r\n }\r\n\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n `\r\n SELECT\r\n U.CODUTE AS codice_utente,\r\n U.USRNAME AS email,\r\n U.STAREG AS stato_registrazione,\r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator\r\n , C.FLG2FATT AS flag_due_fattori\r\n , C.FLGPWDLESS AS passwordless_login_enabled\r\n , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled\r\n FROM UTENTI U\r\n LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE U.CODUTE = ?\r\n `,\r\n [codiceUtente],\r\n );\r\n\r\n const user = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | {\r\n codiceUtente?: number;\r\n email?: string;\r\n statoRegistrazione?: StatoRegistrazione | number;\r\n flagSuper?: unknown;\r\n flagAdminConfigurator?: unknown;\r\n flagDueFattori?: unknown;\r\n passwordlessLoginEnabled?: unknown;\r\n passwordLoginEnabled?: unknown;\r\n }\r\n | undefined;\r\n\r\n if (!user?.codiceUtente) {\r\n return null;\r\n }\r\n\r\n return {\r\n codiceUtente: Number(user.codiceUtente),\r\n email: typeof user.email === 'string' ? user.email : undefined,\r\n statoRegistrazione: Number(user.statoRegistrazione) as StatoRegistrazione,\r\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\r\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\r\n flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),\r\n passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),\r\n passwordLoginEnabled: this.normalizeDatabaseBoolean(user.passwordLoginEnabled),\r\n };\r\n }\r\n\r\n /**\r\n * Elenca gli utenti con filtri opzionali. Grant e campi estesi sono costosi e vengono caricati soltanto\r\n * quando richiesti esplicitamente nelle opzioni; usare filtri puntuali nei flussi di autenticazione.\r\n */\r\n async getUsers(\r\n filters?: { email?: string; codiceUtente?: number; limit?: number; offset?: number },\r\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\r\n ): Promise<GetUsersResult[]> {\r\n try {\r\n const configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\r\n const filterColumns = await getTableColumns(this.accessiOptions, 'FILTRI');\r\n\r\n // Paginazione opzionale con limiti sani: il default resta \"tutti gli utenti\".\r\n const limit = Number.isInteger(filters?.limit) && (filters?.limit ?? 0) > 0\r\n ? Math.min(filters?.limit as number, 1000)\r\n : undefined;\r\n const offset = Number.isInteger(filters?.offset) && (filters?.offset ?? 0) > 0\r\n ? Math.trunc(filters?.offset as number)\r\n : 0;\r\n const pagination = `${limit !== undefined ? ` FIRST ${limit}` : ''}${offset > 0 ? ` SKIP ${offset}` : ''}`;\r\n\r\n let query = ` \r\n SELECT${pagination} \r\n U.CODUTE as codice_utente, \r\n U.USRNAME as email, \r\n U.FLGGDPR as flag_gdpr, \r\n U.DATGDPR as data_gdpr, \r\n U.DATINS as data_inserimento, \r\n U.DATSCAPWD as data_scadenza_password, \r\n U.DATLASTLOGIN as data_last_login, \r\n U.STAREG as stato_registrazione, \r\n G.COGNOME as cognome, \r\n G.NOME as nome, \r\n G.AVATAR as avatar, \r\n G.FLG2FATT as flag_due_fattori,\r\n G.FLGPWDLESS as passwordless_login_enabled,\r\n G.CODLINGUA as codice_lingua,\r\n G.CELLULARE as cellulare,\r\n G.FLGSUPER as flag_super, \r\n G.FLGADMINCONFIG as flag_admin_configurator,\r\n COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,\r\n G.PAGDEF as pagina_default,\r\n G.JSON_METADATA as json_metadata,\r\n ${optionalColumn(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},\r\n ${optionalColumn(configColumns, 'NUMMAC', 'G', 'nummac')},\r\n ${optionalColumn(filterColumns, 'NUMREP', 'F', 'num_rep', true)},\r\n ${optionalColumn(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},\r\n ${optionalColumn(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},\r\n ${optionalColumn(filterColumns, 'CODAGE', 'F', 'cod_age', true)},\r\n ${optionalColumn(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},\r\n ${optionalColumn(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},\r\n F.TIPFIL AS tip_fil,\r\n ${optionalColumn(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}\r\n FROM UTENTI U \r\n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\r\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\r\n WHERE 1=1\r\n `;\r\n\r\n const queryParams: unknown[] = [];\r\n\r\n if (filters?.email) {\r\n query += ` AND LOWER(U.USRNAME) = ? `;\r\n queryParams.push(filters.email.trim().toLowerCase());\r\n }\r\n\r\n if (filters?.codiceUtente) {\r\n query += ` AND U.CODUTE = ? `;\r\n queryParams.push(filters.codiceUtente);\r\n }\r\n\r\n query += ` ORDER BY U.CODUTE DESC `;\r\n\r\n let users = (await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n query,\r\n queryParams,\r\n )) as UserDto[];\r\n users = users.map(RestUtilities.convertKeysToCamelCase).map(user => this.normalizeUserFlags(user as unknown as UserDto));\r\n\r\n const usersResponse: GetUsersResult[] = [];\r\n\r\n // I campi estensione sono caricati una volta per tabella (non una per utente) in query IN\r\n // suddivise in blocchi per non superare i limiti di parametri del driver.\r\n const extensionFieldsByUser = options?.includeExtensionFields\r\n ? await this.loadExtensionFieldsForUsers(users.map((user) => user.codiceUtente))\r\n : undefined;\r\n\r\n // I grant sono caricati in batch (query IN) invece che utente per utente.\r\n const grantsByUser = options?.includeGrants\r\n ? await this.permissionService.getUsersRolesAndGrants(users.map((user) => user.codiceUtente))\r\n : undefined;\r\n\r\n for (const user of users) {\r\n let userGrants: UserGrantsDto | undefined;\r\n\r\n if (options?.includeGrants) {\r\n userGrants = grantsByUser?.get(user.codiceUtente);\r\n }\r\n\r\n let extensionFields: Record<string, unknown[]> | undefined;\r\n\r\n if (options?.includeExtensionFields) {\r\n extensionFields = {};\r\n for (const ext of this.accessiOptions.extensionFieldsOptions ?? []) {\r\n extensionFields[ext.objectKey] = extensionFieldsByUser?.get(ext.objectKey)?.get(user.codiceUtente) ?? [];\r\n }\r\n }\r\n\r\n usersResponse.push({\r\n utente: user,\r\n userGrants,\r\n extensionFields,\r\n });\r\n }\r\n\r\n return usersResponse;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /** Conteggio utenti con gli stessi filtri di `getUsers`, per la paginazione (header X-Total-Count). */\r\n async countUsers(filters?: { email?: string; codiceUtente?: number }): Promise<number> {\r\n const conditions: string[] = [];\r\n const params: unknown[] = [];\r\n if (filters?.email) {\r\n conditions.push('LOWER(U.USRNAME) = ?');\r\n params.push(filters.email.trim().toLowerCase());\r\n }\r\n if (filters?.codiceUtente) {\r\n conditions.push('U.CODUTE = ?');\r\n params.push(filters.codiceUtente);\r\n }\r\n\r\n const query = `SELECT COUNT(*) AS TOTAL FROM UTENTI U INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE WHERE 1=1 ${conditions.map((condition) => `AND ${condition}`).join(' ')}`;\r\n const rows = (await Orm.query(this.accessiOptions.databaseOptions, query, params, false)) as Array<Record<string, unknown>>;\r\n const row = rows[0];\r\n return Number(row?.TOTAL ?? row?.total ?? 0) || 0;\r\n }\r\n\r\n private async loadExtensionFieldsForUsers(\r\n codiceUtenti: number[],\r\n ): Promise<Map<string, Map<number, Record<string, unknown>[]>>> {\r\n const byObjectKey = new Map<string, Map<number, Record<string, unknown>[]>>();\r\n const extensions = this.accessiOptions.extensionFieldsOptions ?? [];\r\n const uniqueCodes = Array.from(new Set(codiceUtenti));\r\n\r\n for (const ext of extensions) {\r\n const grouped = new Map<number, Record<string, unknown>[]>();\r\n\r\n for (const chunk of this.chunkArray(uniqueCodes, 500)) {\r\n if (chunk.length === 0) {\r\n continue;\r\n }\r\n\r\n const placeholders = chunk.map(() => '?').join(', ');\r\n const rows = (await Orm.query(\r\n ext.databaseOptions,\r\n `SELECT ${ext.tableJoinFieldName} AS __joinkey, ${ext.tableFields.join(', ')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} IN (${placeholders})`,\r\n chunk,\r\n )).map(RestUtilities.convertKeysToCamelCase) as Array<Record<string, unknown>>;\r\n\r\n for (const row of rows) {\r\n const { __joinkey, ...rest } = row;\r\n const key = Number(__joinkey);\r\n if (!Number.isFinite(key)) {\r\n continue;\r\n }\r\n\r\n const bucket = grouped.get(key);\r\n if (bucket) {\r\n bucket.push(rest);\r\n } else {\r\n grouped.set(key, [rest]);\r\n }\r\n }\r\n }\r\n\r\n byObjectKey.set(ext.objectKey, grouped);\r\n }\r\n\r\n return byObjectKey;\r\n }\r\n\r\n private chunkArray<T>(items: T[], size: number): T[][] {\r\n const chunks: T[][] = [];\r\n for (let index = 0; index < items.length; index += size) {\r\n chunks.push(items.slice(index, index + size));\r\n }\r\n return chunks;\r\n }\r\n\r\n /** Cerca il codice interno per email normalizzata. Il chiamante deve gestire il caso senza righe. */\r\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\r\n try {\r\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\r\n email.trim().toLowerCase(),\r\n ]);\r\n return result.map(RestUtilities.convertKeysToCamelCase)[0] as { codiceUtente: number };\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /** Recupera il profilo locale usato dal login, compresi filtri Accessi eventualmente presenti. */\r\n async getUserByEmail(email: string): Promise<UserDto | null> {\r\n const configColumns = await getTableColumns(this.accessiOptions, 'UTENTI_CONFIG');\r\n const query = `\r\n SELECT \r\n U.CODUTE AS codice_utente, \r\n U.USRNAME AS email, \r\n U.FLGGDPR AS flag_gdpr,\r\n U.DATSCAPWD as data_scadenza_password,\r\n U.STAREG AS stato_registrazione, \r\n C.COGNOME AS cognome, \r\n C.NOME AS nome, \r\n C.AVATAR AS avatar, \r\n C.FLG2FATT AS flag_due_fattori,\r\n C.FLGPWDLESS AS passwordless_login_enabled,\r\n C.CODLINGUA AS codice_lingua, \r\n C.CELLULARE AS cellulare, \r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator,\r\n COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,\r\n C.PAGDEF AS pagina_default,\r\n ${optionalColumn(configColumns, 'NUMMAC', 'C', 'nummac')},\r\n ${optionalColumn(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)}\r\n FROM UTENTI U\r\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE LOWER(U.USRNAME) = ?\r\n `;\r\n\r\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\r\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\r\n )) as UserDto[];\r\n\r\n const user = utenti[0];\r\n if (!user) return null;\r\n\r\n const filtro = (await this.filtriService.getFiltriUser(user.codiceUtente))[0];\r\n if (filtro) {\r\n const filterValues: Record<string, unknown> = {};\r\n\r\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\r\n if (key in filtro) {\r\n filterValues[key] = filtro[key as keyof FiltriUtente];\r\n }\r\n });\r\n\r\n Object.assign(user, filterValues);\r\n }\r\n\r\n return this.normalizeUserFlags(user);\r\n }\r\n\r\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, filterData);\r\n }\r\n\r\n /**\r\n * Crea utente, configurazione e filtri. La registrazione pubblica resta in stato `INVIO` e non puo\r\n * impostare privilegi, ruoli o grant; soltanto flussi backend fidati possono usare `allowPrivilegedFields`.\r\n */\r\n async register(\r\n registrationData: RegisterRequest,\r\n options?: { allowPrivilegedFields?: boolean; initialState?: StatoRegistrazione },\r\n ): Promise<number> {\r\n try {\r\n const allowPrivilegedFields = options?.allowPrivilegedFields === true;\r\n const normalizedEmail = this.normalizeEmail(registrationData.email);\r\n\r\n if (registrationData.flagDueFattori !== undefined && typeof registrationData.flagDueFattori !== 'boolean') {\r\n throw new BadRequestException('Il flag due fattori deve essere booleano.');\r\n }\r\n if (registrationData.flagDueFattori && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(normalizedEmail)) {\r\n throw new BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');\r\n }\r\n\r\n if (\r\n !allowPrivilegedFields &&\r\n (registrationData.flagSuper !== undefined ||\r\n registrationData.flagAdminConfigurator !== undefined ||\r\n registrationData.flagDueFattori !== undefined ||\r\n registrationData.roles !== undefined ||\r\n registrationData.permissions !== undefined)\r\n ) {\r\n throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');\r\n }\r\n\r\n await this.validateApplicationFields(registrationData);\r\n await this.ensureEmailIsAvailable(normalizedEmail);\r\n\r\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?) RETURNING CODUTE`;\r\n // Public/local registrations keep the historic INVIO state; trusted master or SSO flows may opt into CONF.\r\n const paramsUtenti = [normalizedEmail, options?.initialState ?? StatoRegistrazione.INVIO];\r\n\r\n // Utente e configurazione sono creati in un'unica transazione; filtri e assegnazioni restano\r\n // fuori perché delegati a servizi dedicati.\r\n const codiceUtente = await Orm.withTransaction(\r\n this.accessiOptions.databaseOptions,\r\n async (transaction) => {\r\n const insertedUsers = await Orm.transactionQuery<unknown>(\r\n transaction,\r\n queryUtenti,\r\n paramsUtenti,\r\n );\r\n\r\n const insertedUser = (Array.isArray(insertedUsers) ? insertedUsers[0] : insertedUsers) as Record<string, unknown> | undefined;\r\n const newCodiceUtente = Number(\r\n insertedUser?.CODUTE ?? insertedUser?.codute,\r\n );\r\n if (!newCodiceUtente) {\r\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\r\n }\r\n\r\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\r\n const utentiConfigPlaceholders = ['?', '?', '?'];\r\n const utentiConfigParams: unknown[] = [newCodiceUtente, registrationData.cognome, registrationData.nome];\r\n\r\n const optionalFields: OptionalField<unknown>[] = [\r\n {\r\n key: 'cellulare',\r\n dbField: 'CELLULARE',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'avatar',\r\n dbField: 'AVATAR',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'flagDueFattori',\r\n dbField: 'FLG2FATT',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'paginaDefault',\r\n dbField: 'PAGDEF',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'nummac',\r\n dbField: 'NUMMAC',\r\n transform: (v) => Number(v),\r\n },\r\n {\r\n key: 'ragSocCli',\r\n dbField: 'RAGSOCCLI',\r\n transform: (v) => String(v),\r\n },\r\n ];\r\n\r\n if (allowPrivilegedFields) {\r\n optionalFields.push(\r\n {\r\n key: 'flagSuper',\r\n dbField: 'FLGSUPER',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'flagAdminConfigurator',\r\n dbField: 'FLGADMINCONFIG',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n );\r\n }\r\n\r\n for (const field of optionalFields) {\r\n const value = registrationData[field.key];\r\n if (value !== undefined && value !== null) {\r\n utentiConfigFields.push(field.dbField);\r\n utentiConfigPlaceholders.push('?');\r\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\r\n }\r\n }\r\n\r\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\r\n ', ',\r\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\r\n await Orm.transactionQuery(transaction, queryUtentiConfig, utentiConfigParams);\r\n\r\n return newCodiceUtente;\r\n },\r\n );\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\r\n\r\n if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\r\n }\r\n\r\n if (\r\n allowPrivilegedFields &&\r\n !!registrationData.permissions &&\r\n registrationData.permissions.length > 0\r\n ) {\r\n await this.permissionService.assignPermissionsToUser(\r\n codiceUtente,\r\n registrationData.permissions,\r\n );\r\n }\r\n\r\n return codiceUtente;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Aggiorna il profilo utente e i filtri. Le modifiche a stato, ruoli, grant e flag amministrativi richiedono\r\n * `allowPrivilegedChanges`; gli array ruolo/grant passati in un flusso fidato sostituiscono le assegnazioni.\r\n */\r\n async updateUser(\r\n codiceUtente: number,\r\n user: UserDto,\r\n options?: { allowPrivilegedChanges?: boolean },\r\n ): Promise<void> {\r\n try {\r\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\r\n const allowPrivilegedChanges = options?.allowPrivilegedChanges === true;\r\n\r\n for (const value of [user.flagDueFattori, user.passwordlessLoginEnabled]) {\r\n if (value !== undefined && typeof value !== 'boolean') throw new BadRequestException('Le policy di autenticazione devono essere booleane.');\r\n }\r\n\r\n if (\r\n !allowPrivilegedChanges &&\r\n (user.statoRegistrazione !== undefined ||\r\n user.flagSuper !== undefined ||\r\n user.flagAdminConfigurator !== undefined ||\r\n user.passwordLoginEnabled !== undefined ||\r\n user.passwordlessLoginEnabled !== undefined ||\r\n user.flagDueFattori !== undefined ||\r\n user.roles !== undefined ||\r\n user.permissions !== undefined)\r\n ) {\r\n throw new Error('Non e consentito modificare campi privilegiati.');\r\n }\r\n\r\n if (user.flagDueFattori !== undefined || user.passwordlessLoginEnabled !== undefined || user.email !== undefined) {\r\n const current = await this.getAuthenticatedUserSnapshot(codiceUtente);\r\n if (!current) throw new BadRequestException('Utente non trovato.');\r\n const twoFactor = user.flagDueFattori ?? current.flagDueFattori;\r\n const passwordless = user.passwordlessLoginEnabled ?? current.passwordlessLoginEnabled;\r\n if (passwordless && !twoFactor) throw new BadRequestException('Il login senza password richiede il codice di accesso attivo.');\r\n if (twoFactor && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test((user.email ?? current.email ?? '').trim())) {\r\n throw new BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');\r\n }\r\n }\r\n\r\n const { configColumns } = await this.validateApplicationFields(user);\r\n const utentiUpdates = [];\r\n const utentiParams = [];\r\n\r\n if (user.email !== undefined) {\r\n const normalizedEmail = this.normalizeEmail(user.email);\r\n await this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);\r\n utentiUpdates.push('usrname = ?');\r\n utentiParams.push(normalizedEmail);\r\n }\r\n if (user.flagGdpr !== undefined) {\r\n utentiUpdates.push('flggdpr = ?');\r\n utentiParams.push(user.flagGdpr);\r\n }\r\n if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {\r\n utentiUpdates.push('stareg = ?');\r\n utentiParams.push(user.statoRegistrazione);\r\n }\r\n\r\n if (utentiUpdates.length > 0) {\r\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\r\n utentiParams.push(codiceUtente);\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\r\n }\r\n\r\n const utentiConfigUpdates = [];\r\n const utentiConfigParams = [];\r\n\r\n if (user.cognome !== undefined) {\r\n utentiConfigUpdates.push('cognome = ?');\r\n utentiConfigParams.push(user.cognome);\r\n }\r\n if (user.nome !== undefined) {\r\n utentiConfigUpdates.push('nome = ?');\r\n utentiConfigParams.push(user.nome);\r\n }\r\n if (user.avatar !== undefined) {\r\n utentiConfigUpdates.push('avatar = ?');\r\n utentiConfigParams.push(user.avatar);\r\n }\r\n if (user.flagDueFattori !== undefined) {\r\n utentiConfigUpdates.push('flg2fatt = ?');\r\n utentiConfigParams.push(user.flagDueFattori ? 1 : 0);\r\n }\r\n if (user.passwordlessLoginEnabled !== undefined) {\r\n utentiConfigUpdates.push('flgpwdless = ?');\r\n utentiConfigParams.push(user.passwordlessLoginEnabled ? 1 : 0);\r\n }\r\n if (user.codiceLingua !== undefined) {\r\n utentiConfigUpdates.push('codlingua = ?');\r\n utentiConfigParams.push(user.codiceLingua);\r\n }\r\n if (user.cellulare !== undefined) {\r\n utentiConfigUpdates.push('cellulare = ?');\r\n utentiConfigParams.push(user.cellulare);\r\n }\r\n if (allowPrivilegedChanges && user.flagSuper !== undefined) {\r\n utentiConfigUpdates.push('flgsuper = ?');\r\n utentiConfigParams.push(user.flagSuper);\r\n }\r\n if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {\r\n utentiConfigUpdates.push('flgadminconfig = ?');\r\n utentiConfigParams.push(user.flagAdminConfigurator);\r\n }\r\n if (allowPrivilegedChanges && user.passwordLoginEnabled !== undefined) {\r\n utentiConfigUpdates.push('flgpassword = ?');\r\n utentiConfigParams.push(user.passwordLoginEnabled ? 1 : 0);\r\n }\r\n if (user.paginaDefault !== undefined) {\r\n utentiConfigUpdates.push('pagdef = ?');\r\n utentiConfigParams.push(user.paginaDefault);\r\n }\r\n if (user.jsonMetadata !== undefined) {\r\n utentiConfigUpdates.push('json_metadata = ?');\r\n utentiConfigParams.push(user.jsonMetadata);\r\n }\r\n if (user.ragSocCli !== undefined && (user.ragSocCli !== null || configColumns?.has('RAGSOCCLI'))) {\r\n utentiConfigUpdates.push('ragsoccli = ?');\r\n utentiConfigParams.push(user.ragSocCli);\r\n }\r\n\r\n if (utentiConfigUpdates.length > 0) {\r\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\r\n ', ',\r\n )} WHERE CODUTE = ?`;\r\n utentiConfigParams.push(codiceUtente);\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n queryUtentiConfig,\r\n utentiConfigParams,\r\n );\r\n }\r\n\r\n if (allowPrivilegedChanges && Array.isArray(user.roles)) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\r\n }\r\n\r\n if (allowPrivilegedChanges && Array.isArray(user.permissions)) {\r\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\r\n }\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\r\n }\r\n\r\n /** Eliminazione logica: imposta lo stato `DELETE` senza cancellare lo storico o i collegamenti SSO. */\r\n async deleteUser(codiceCliente: number): Promise<void> {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n StatoRegistrazione.DELETE,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n /** Cambia esplicitamente lo stato di registrazione; usare questa API per blocco, conferma o eliminazione logica. */\r\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n statoRegistrazione,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public async setGdpr(codiceUtente: number) {\r\n try {\r\n return await Orm.executeMultiple(this.accessiOptions.databaseOptions, [\r\n { query: 'INSERT INTO UTENTI_GDPR (CODUTE, GDPR) VALUES (?, ?)', params: [codiceUtente, 'true'] },\r\n { query: 'UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_DATE WHERE CODUTE = ?', params: [codiceUtente] },\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}