emilsoftware-utilities 2.0.0-dev.3 → 2.0.0-dev.30

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 (546) hide show
  1. package/README.MD +185 -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 +21 -0
  6. package/dist/DailyFileTransport.js +74 -0
  7. package/dist/DailyFileTransport.js.map +1 -0
  8. package/dist/DatabaseUpdater.d.ts +1 -1
  9. package/dist/DatabaseUpdater.js +32 -29
  10. package/dist/DatabaseUpdater.js.map +1 -1
  11. package/dist/EmilsoftwareModule.js.map +1 -1
  12. package/dist/ExecutionTimeLogger.d.ts +2 -2
  13. package/dist/ExecutionTimeLogger.js +5 -4
  14. package/dist/ExecutionTimeLogger.js.map +1 -1
  15. package/dist/Logger.d.ts +22 -11
  16. package/dist/Logger.js +132 -119
  17. package/dist/Logger.js.map +1 -1
  18. package/dist/Orm.d.ts +28 -7
  19. package/dist/Orm.js +196 -90
  20. package/dist/Orm.js.map +1 -1
  21. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  22. package/dist/Utilities.d.ts +18 -8
  23. package/dist/Utilities.js +117 -38
  24. package/dist/Utilities.js.map +1 -1
  25. package/dist/accessi-module/AccessiModule.d.ts +70 -1
  26. package/dist/accessi-module/AccessiModule.js +32 -5
  27. package/dist/accessi-module/AccessiModule.js.map +1 -1
  28. package/dist/accessi-module/Console/accessiFetch.d.ts +7 -0
  29. package/dist/accessi-module/Console/accessiFetch.js +59 -0
  30. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  31. package/dist/accessi-module/Console/console.css +618 -0
  32. package/dist/accessi-module/Console/console.d.ts +1 -0
  33. package/dist/accessi-module/Console/console.js +3101 -0
  34. package/dist/accessi-module/Console/console.js.map +1 -0
  35. package/dist/accessi-module/Console/generated/accessiApi.d.ts +562 -0
  36. package/dist/accessi-module/Console/generated/accessiApi.js +533 -0
  37. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +39 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  44. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  45. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  46. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  47. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  48. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  49. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  50. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  51. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  52. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  53. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  54. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  55. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  56. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  57. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  58. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  59. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  60. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  61. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  62. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  63. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  64. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  65. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  66. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  67. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  68. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  69. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  70. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  71. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  72. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  73. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  74. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  75. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  76. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  77. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
  78. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  79. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  80. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  81. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  82. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  83. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  84. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  85. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  86. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  87. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  88. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  89. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  90. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  91. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  92. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  93. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  94. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  95. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  96. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  97. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  98. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  99. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  100. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  101. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  102. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  103. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  104. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  105. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  106. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  107. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  108. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  109. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  110. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  111. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  112. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  113. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  114. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  115. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  116. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  117. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  118. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  119. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  120. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  121. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  122. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  123. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  124. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  125. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +12 -0
  126. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  127. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  128. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  129. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  130. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  131. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  132. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  133. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  134. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  135. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  136. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  137. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  138. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  139. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  140. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  141. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  142. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  143. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  144. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  145. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  146. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  147. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  148. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  149. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  150. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  151. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  152. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +32 -0
  153. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  154. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  155. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  156. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  157. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  158. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  159. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  160. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  161. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  162. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  163. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  164. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  165. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  166. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  167. package/dist/accessi-module/Console/generated/model/index.d.ts +93 -0
  168. package/dist/accessi-module/Console/generated/model/index.js +110 -0
  169. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  170. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  171. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  172. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  173. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +12 -0
  174. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  175. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  176. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  177. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  178. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  179. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +32 -0
  180. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  181. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  182. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  183. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  184. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  185. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  186. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  187. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  188. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  189. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  190. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  191. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  192. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  193. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  194. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  195. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  196. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  197. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  198. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  199. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  200. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  201. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  202. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  203. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  204. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  205. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  206. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  207. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  208. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  209. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  210. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  211. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  212. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  213. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  214. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  215. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  216. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  217. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  218. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  219. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  220. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  221. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  222. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  223. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  224. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  225. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  226. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  227. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  228. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  229. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  230. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  231. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  232. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  233. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  234. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  235. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  236. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  237. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  238. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  239. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  240. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  241. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  242. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  243. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  244. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  245. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  246. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  247. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  248. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  249. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  250. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  251. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  252. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  253. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  254. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  255. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  256. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  257. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  258. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  259. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  260. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  261. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  262. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  263. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  264. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  265. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  266. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  267. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  268. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  269. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  270. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  271. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  272. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  273. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  274. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  275. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  276. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  277. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  278. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
  279. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  280. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  281. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  282. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  283. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  284. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  285. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  286. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  287. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  288. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  289. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  290. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  291. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  292. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  293. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  294. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  295. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  296. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  297. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  298. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  299. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +18 -0
  300. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  301. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  302. package/dist/accessi-module/Console/help.d.ts +13 -0
  303. package/dist/accessi-module/Console/help.js +348 -0
  304. package/dist/accessi-module/Console/help.js.map +1 -0
  305. package/dist/accessi-module/Console/index.html +127 -0
  306. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  307. package/dist/accessi-module/Console/wiki.js +689 -0
  308. package/dist/accessi-module/Console/wiki.js.map +1 -0
  309. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +18 -0
  310. package/dist/accessi-module/Controllers/AccessiConsoleController.js +111 -0
  311. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  312. package/dist/accessi-module/Controllers/AuthController.d.ts +8 -5
  313. package/dist/accessi-module/Controllers/AuthController.js +128 -79
  314. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  315. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
  316. package/dist/accessi-module/Controllers/ConfiguratorController.js +30 -35
  317. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  318. package/dist/accessi-module/Controllers/EmailController.d.ts +4 -6
  319. package/dist/accessi-module/Controllers/EmailController.js +12 -14
  320. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  321. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  322. package/dist/accessi-module/Controllers/FiltriController.js +124 -5
  323. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  324. package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -1
  325. package/dist/accessi-module/Controllers/PermissionController.js +317 -46
  326. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  327. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  328. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  329. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  330. package/dist/accessi-module/Controllers/UserController.d.ts +8 -4
  331. package/dist/accessi-module/Controllers/UserController.js +156 -23
  332. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  333. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  334. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  335. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  336. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +0 -1
  337. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  338. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -2
  339. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  340. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +13 -0
  341. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +70 -0
  342. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -0
  343. package/dist/accessi-module/Dtos/BaseResponse.d.ts +22 -0
  344. package/dist/accessi-module/Dtos/BaseResponse.js +106 -1
  345. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  346. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
  347. package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
  348. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  349. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.d.ts +3 -0
  350. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js +31 -0
  351. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -0
  352. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  353. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  354. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  355. package/dist/accessi-module/Dtos/FiltriUtente.js +5 -1
  356. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  357. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  358. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  359. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  360. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  361. package/dist/accessi-module/Dtos/GetUserByTokenRequest.d.ts +3 -0
  362. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js +26 -0
  363. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -0
  364. package/dist/accessi-module/Dtos/GetUserByTokenResponse.d.ts +5 -0
  365. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js +27 -0
  366. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -0
  367. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  368. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  369. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  370. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  371. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  372. package/dist/accessi-module/Dtos/LoginResponse.d.ts +6 -2
  373. package/dist/accessi-module/Dtos/LoginResponse.js +20 -7
  374. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  375. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  376. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  377. package/dist/accessi-module/Dtos/Permission.js +1 -0
  378. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  379. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +5 -0
  380. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +15 -0
  381. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -0
  382. package/dist/accessi-module/Dtos/RegisterRequest.js +7 -1
  383. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  384. package/dist/accessi-module/Dtos/RegisterResponse.d.ts +1 -1
  385. package/dist/accessi-module/Dtos/RegisterResponse.js +3 -3
  386. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  387. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  388. package/dist/accessi-module/Dtos/Role.js +4 -0
  389. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  390. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  391. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.d.ts +4 -0
  392. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js +36 -0
  393. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -0
  394. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  395. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  396. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  397. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  398. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  399. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  400. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  401. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  402. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  403. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  404. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  405. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  406. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  407. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  408. package/dist/accessi-module/Dtos/UserDto.d.ts +7 -0
  409. package/dist/accessi-module/Dtos/UserDto.js +31 -3
  410. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  411. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  412. package/dist/accessi-module/Dtos/UserGrantsResponse.d.ts +5 -0
  413. package/dist/accessi-module/Dtos/UserGrantsResponse.js +27 -0
  414. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -0
  415. package/dist/accessi-module/Dtos/index.d.ts +11 -0
  416. package/dist/accessi-module/Dtos/index.js +11 -0
  417. package/dist/accessi-module/Dtos/index.js.map +1 -1
  418. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +40 -5
  419. package/dist/accessi-module/Services/AuthService/AuthService.js +192 -40
  420. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  421. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  422. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  423. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  424. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  425. package/dist/accessi-module/Services/EmailService/EmailService.js +47 -22
  426. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  427. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  428. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -16
  429. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  430. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +77 -2
  431. package/dist/accessi-module/Services/PermissionService/PermissionService.js +608 -206
  432. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  433. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  434. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  435. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  436. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  437. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  438. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  439. package/dist/accessi-module/Services/UserService/UserService.d.ts +54 -4
  440. package/dist/accessi-module/Services/UserService/UserService.js +434 -269
  441. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  442. package/dist/accessi-module/Views/reset-password.html +213 -213
  443. package/dist/accessi-module/accessiRuntime.d.ts +45 -0
  444. package/dist/accessi-module/accessiRuntime.js +39 -0
  445. package/dist/accessi-module/accessiRuntime.js.map +1 -0
  446. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +51 -10
  447. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +435 -181
  448. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  449. package/dist/accessi-module/database-updates/accessiSchema.d.ts +45 -0
  450. package/dist/accessi-module/database-updates/accessiSchema.js +87 -0
  451. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  452. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  453. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  454. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  455. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +26 -8
  456. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  457. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +24 -0
  458. package/dist/accessi-module/federated-auth/FederatedAuthController.js +333 -0
  459. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  460. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +100 -0
  461. package/dist/accessi-module/federated-auth/FederatedAuthService.js +451 -0
  462. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  463. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  464. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  465. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  466. package/dist/accessi-module/index.d.ts +21 -0
  467. package/dist/accessi-module/index.js +69 -19
  468. package/dist/accessi-module/index.js.map +1 -1
  469. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  470. package/dist/accessi-module/jwt/jwt.strategy.js +16 -7
  471. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  472. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  473. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  474. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  475. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  476. package/dist/accessi-module/middleware/authenticateGen.js +63 -25
  477. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  478. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  479. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  480. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  481. package/dist/accessi-module/security/accessControl.d.ts +11 -0
  482. package/dist/accessi-module/security/accessControl.js +19 -4
  483. package/dist/accessi-module/security/accessControl.js.map +1 -1
  484. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  485. package/dist/accessi-module/security/accessiValidation.js +41 -0
  486. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  487. package/dist/accessi-module/security/authenticatedToken.d.ts +15 -1
  488. package/dist/accessi-module/security/authenticatedToken.js +31 -4
  489. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  490. package/dist/accessi-module/security/emailConfiguration.d.ts +20 -0
  491. package/dist/accessi-module/security/emailConfiguration.js +41 -0
  492. package/dist/accessi-module/security/emailConfiguration.js.map +1 -0
  493. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  494. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  495. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  496. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +3 -3
  497. package/dist/accessi-module/security/publicAuthRateLimit.js +30 -8
  498. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  499. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  500. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  501. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  502. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  503. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  504. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  505. package/dist/allegati-module/AllegatiModule.d.ts +12 -1
  506. package/dist/allegati-module/AllegatiModule.js +11 -1
  507. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  508. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  509. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  510. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  511. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  512. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  513. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  514. package/dist/allegati-module/Dtos/index.js.map +1 -1
  515. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  516. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  517. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  518. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  519. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  520. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  521. package/dist/allegati-module/index.js.map +1 -1
  522. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  523. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  524. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  525. package/dist/autobind.d.ts +10 -3
  526. package/dist/autobind.js +24 -9
  527. package/dist/autobind.js.map +1 -1
  528. package/dist/emilsoftware-utilities-2.0.0-dev.30.tgz +0 -0
  529. package/dist/firebird-compat.d.ts +29 -6
  530. package/dist/firebird-compat.js +150 -129
  531. package/dist/firebird-compat.js.map +1 -1
  532. package/dist/index.d.ts +2 -2
  533. package/dist/index.js +2 -2
  534. package/dist/index.js.map +1 -1
  535. package/dist/initEmilsoftwareModule.js +11 -3
  536. package/dist/initEmilsoftwareModule.js.map +1 -1
  537. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  538. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  539. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  540. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  541. package/dist/scripts/generateAccessiWiki.js +131 -0
  542. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  543. package/dist/swagger/SwaggerConfig.d.ts +7 -1
  544. package/dist/swagger/SwaggerConfig.js +22 -8
  545. package/dist/swagger/SwaggerConfig.js.map +1 -1
  546. package/package.json +103 -83
@@ -20,14 +20,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
20
  step((generator = generator.apply(thisArg, _arguments || [])).next());
21
21
  });
22
22
  };
23
+ var __rest = (this && this.__rest) || function (s, e) {
24
+ var t = {};
25
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
26
+ t[p] = s[p];
27
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
28
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
29
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
30
+ t[p[i]] = s[p[i]];
31
+ }
32
+ return t;
33
+ };
23
34
  Object.defineProperty(exports, "__esModule", { value: true });
24
35
  exports.UserService = void 0;
25
36
  const common_1 = require("@nestjs/common");
37
+ const optionalColumns_1 = require("../../database-updates/optionalColumns");
26
38
  const autobind_1 = require("../../../autobind");
27
39
  const Orm_1 = require("../../../Orm");
28
40
  const Utilities_1 = require("../../../Utilities");
29
41
  const FiltriUtente_1 = require("../../Dtos/FiltriUtente");
30
42
  const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
43
+ const emailConfiguration_1 = require("../../security/emailConfiguration");
31
44
  const EmailService_1 = require("../EmailService/EmailService");
32
45
  const FiltriService_1 = require("../FiltriService/FiltriService");
33
46
  const PermissionService_1 = require("../PermissionService/PermissionService");
@@ -38,12 +51,34 @@ let UserService = class UserService {
38
51
  this.permissionService = permissionService;
39
52
  this.filtriService = filtriService;
40
53
  }
54
+ validateApplicationFields(value) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const applicationFields = [['nummac', 'NUMMAC'], ['ragSocCli', 'RAGSOCCLI']];
57
+ let configColumns;
58
+ if (applicationFields.some(([key]) => value[key] !== undefined)) {
59
+ configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
60
+ for (const [key, column] of applicationFields) {
61
+ if (value[key] !== undefined && value[key] !== null && !configColumns.has(column)) {
62
+ throw new common_1.BadRequestException(`Campo applicativo non configurato: UTENTI_CONFIG.${column}`);
63
+ }
64
+ }
65
+ }
66
+ const filterKeys = Object.keys(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING);
67
+ if (filterKeys.some(key => value[key] !== undefined && value[key] !== null && value[key] !== '')) {
68
+ yield this.filtriService.validateSupportedFields(value);
69
+ }
70
+ return { configColumns };
71
+ });
72
+ }
41
73
  normalizeDatabaseBoolean(value) {
42
74
  return value === true || value === 1 || value === '1';
43
75
  }
76
+ normalizeUserFlags(user) {
77
+ return Object.assign(Object.assign({}, user), { flagSuper: this.normalizeDatabaseBoolean(user.flagSuper), flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator), flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori), passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled), passwordLoginEnabled: user.passwordLoginEnabled == null || this.normalizeDatabaseBoolean(user.passwordLoginEnabled) });
78
+ }
44
79
  normalizeEmail(email) {
45
80
  if (typeof email !== 'string' || email.trim() === '') {
46
- throw new Error("L'email e' obbligatoria.");
81
+ throw new common_1.BadRequestException({ code: 'ACCESSI_EMAIL_REQUIRED', message: "L'email è obbligatoria." });
47
82
  }
48
83
  return email.trim().toLowerCase();
49
84
  }
@@ -53,10 +88,11 @@ let UserService = class UserService {
53
88
  const existingUser = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
54
89
  if ((existingUser === null || existingUser === void 0 ? void 0 : existingUser.codiceUtente) &&
55
90
  (!currentUserCode || existingUser.codiceUtente !== currentUserCode)) {
56
- throw new Error("Questa e-mail e' gia stata utilizzata!");
91
+ throw new common_1.ConflictException({ code: 'ACCESSI_EMAIL_ALREADY_EXISTS', message: "L'email è già associata a un utente Accessi." });
57
92
  }
58
93
  });
59
94
  }
95
+ /** Determina se l'utente puo amministrare il configuratore Accessi (`FLGADMINCONFIG`). */
60
96
  isAdminConfigurator(codiceUtente) {
61
97
  return __awaiter(this, void 0, void 0, function* () {
62
98
  var _a;
@@ -65,32 +101,35 @@ let UserService = class UserService {
65
101
  }
66
102
  const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;
67
103
  const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);
68
- if (!result || result === 0) {
104
+ if (result.length === 0) {
69
105
  return false;
70
106
  }
71
107
  const mapped = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
72
- const flagValue = (_a = mapped[0]) === null || _a === void 0 ? void 0 : _a.flag_admin_configurator;
73
- if (typeof flagValue === 'boolean') {
74
- return flagValue;
75
- }
76
- return flagValue === 1;
108
+ return this.normalizeDatabaseBoolean((_a = mapped[0]) === null || _a === void 0 ? void 0 : _a.flagAdminConfigurator);
77
109
  });
78
110
  }
111
+ /**
112
+ * Legge il minimo profilo autorevole usato da JWT e middleware. Restituisce `null` per utenti inesistenti.
113
+ * Non usare `UserDto` dal token per decisioni di sicurezza: i flag vengono sempre riletti qui.
114
+ */
79
115
  getAuthenticatedUserSnapshot(codiceUtente) {
80
116
  return __awaiter(this, void 0, void 0, function* () {
81
117
  if (!codiceUtente || codiceUtente <= 0) {
82
118
  return null;
83
119
  }
84
- const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
85
- SELECT
86
- U.CODUTE AS codice_utente,
87
- U.USRNAME AS email,
88
- U.STAREG AS stato_registrazione,
89
- C.FLGSUPER AS flag_super,
90
- C.FLGADMINCONFIG AS flag_admin_configurator
91
- FROM UTENTI U
92
- LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
93
- WHERE U.CODUTE = ?
120
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
121
+ SELECT
122
+ U.CODUTE AS codice_utente,
123
+ U.USRNAME AS email,
124
+ U.STAREG AS stato_registrazione,
125
+ C.FLGSUPER AS flag_super,
126
+ C.FLGADMINCONFIG AS flag_admin_configurator
127
+ , C.FLG2FATT AS flag_due_fattori
128
+ , C.FLGPWDLESS AS passwordless_login_enabled
129
+ , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled
130
+ FROM UTENTI U
131
+ LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
132
+ WHERE U.CODUTE = ?
94
133
  `, [codiceUtente]);
95
134
  const user = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
96
135
  if (!(user === null || user === void 0 ? void 0 : user.codiceUtente)) {
@@ -102,70 +141,138 @@ let UserService = class UserService {
102
141
  statoRegistrazione: Number(user.statoRegistrazione),
103
142
  flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),
104
143
  flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),
144
+ flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),
145
+ passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),
146
+ passwordLoginEnabled: this.normalizeDatabaseBoolean(user.passwordLoginEnabled),
105
147
  };
106
148
  });
107
149
  }
150
+ /**
151
+ * Elenca gli utenti con filtri opzionali. Grant e campi estesi sono costosi e vengono caricati soltanto
152
+ * quando richiesti esplicitamente nelle opzioni; usare filtri puntuali nei flussi di autenticazione.
153
+ */
108
154
  getUsers(filters, options) {
109
155
  return __awaiter(this, void 0, void 0, function* () {
156
+ var _a, _b, _c, _d, _e;
110
157
  try {
111
- let query = `
112
- SELECT
113
- U.CODUTE as codice_utente,
114
- U.USRNAME as email,
115
- U.FLGGDPR as flag_gdpr,
116
- U.DATGDPR as data_gdpr,
117
- U.DATINS as data_inserimento,
118
- U.DATSCAPWD as data_scadenza_password,
119
- U.DATLASTLOGIN as data_last_login,
120
- U.STAREG as stato_registrazione,
121
- G.COGNOME as cognome,
122
- G.NOME as nome,
123
- G.AVATAR as avatar,
124
- G.FLG2FATT as flag_due_fattori,
125
- G.CODLINGUA as codice_lingua,
126
- G.CELLULARE as cellulare,
127
- G.FLGSUPER as flag_super,
128
- G.FLGADMINCONFIG as flag_admin_configurator,
129
- G.PAGDEF as pagina_default,
130
- G.JSON_METADATA as json_metadata,
131
- G.RAGSOCCLI as rag_soc_cli,
132
- G.NUMMAC as nummac,
133
- F.NUMREP AS num_rep,
134
- F.IDXPERS AS idx_pers,
135
- F.CODCLISUPER AS cod_cli_super,
136
- F.CODAGE AS cod_age,
137
- F.CODCLICOL AS cod_cli_col,
138
- F.CODCLIENTI AS cod_clienti,
139
- F.TIPFIL AS tip_fil,
140
- F.IDXPOS AS idx_postazione
141
- FROM UTENTI U
142
- INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
143
- LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
144
- WHERE 1=1
158
+ const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
159
+ const filterColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI');
160
+ const utentiColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI');
161
+ // Paginazione opzionale con limiti sani: il default resta "tutti gli utenti".
162
+ const limit = Number.isInteger(filters === null || filters === void 0 ? void 0 : filters.limit) && ((_a = filters === null || filters === void 0 ? void 0 : filters.limit) !== null && _a !== void 0 ? _a : 0) > 0
163
+ ? Math.min(filters === null || filters === void 0 ? void 0 : filters.limit, 1000)
164
+ : undefined;
165
+ const offset = Number.isInteger(filters === null || filters === void 0 ? void 0 : filters.offset) && ((_b = filters === null || filters === void 0 ? void 0 : filters.offset) !== null && _b !== void 0 ? _b : 0) > 0
166
+ ? Math.trunc(filters === null || filters === void 0 ? void 0 : filters.offset)
167
+ : 0;
168
+ const pagination = `${limit !== undefined ? ` FIRST ${limit}` : ''}${offset > 0 ? ` SKIP ${offset}` : ''}`;
169
+ let query = `
170
+ SELECT${pagination}
171
+ U.CODUTE as codice_utente,
172
+ U.USRNAME as email,
173
+ U.FLGGDPR as flag_gdpr,
174
+ U.DATGDPR as data_gdpr,
175
+ U.DATINS as data_inserimento,
176
+ U.DATSCAPWD as data_scadenza_password,
177
+ U.DATLASTLOGIN as data_last_login,
178
+ U.STAREG as stato_registrazione,
179
+ ${(0, optionalColumns_1.optionalColumn)(utentiColumns, 'ENABLEIA', 'U', 'enable_ia')},
180
+ G.COGNOME as cognome,
181
+ G.NOME as nome,
182
+ G.AVATAR as avatar,
183
+ G.FLG2FATT as flag_due_fattori,
184
+ G.FLGPWDLESS as passwordless_login_enabled,
185
+ G.CODLINGUA as codice_lingua,
186
+ G.CELLULARE as cellulare,
187
+ G.FLGSUPER as flag_super,
188
+ G.FLGADMINCONFIG as flag_admin_configurator,
189
+ COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,
190
+ G.PAGDEF as pagina_default,
191
+ G.JSON_METADATA as json_metadata,
192
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},
193
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'G', 'nummac')},
194
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'CAUMOV', 'G', 'caumov')},
195
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODDIP', 'F', 'cod_dipendente')},
196
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'NUMREP', 'F', 'num_rep', true)},
197
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},
198
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},
199
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODAGE', 'F', 'cod_age', true)},
200
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},
201
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},
202
+ F.TIPFIL AS tip_fil,
203
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}
204
+ FROM UTENTI U
205
+ INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
206
+ LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
207
+ WHERE 1=1
145
208
  `;
146
209
  const queryParams = [];
147
210
  if (filters === null || filters === void 0 ? void 0 : filters.email) {
148
211
  query += ` AND LOWER(U.USRNAME) = ? `;
149
212
  queryParams.push(filters.email.trim().toLowerCase());
150
213
  }
151
- if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
152
- query += ` AND U.CODUTE = ? `;
153
- queryParams.push(filters.codiceUtente);
214
+ if ((filters === null || filters === void 0 ? void 0 : filters.codiceUtente) !== undefined) {
215
+ const codes = (Array.isArray(filters.codiceUtente) ? filters.codiceUtente : [filters.codiceUtente])
216
+ .map((value) => Number(value))
217
+ .filter((value) => Number.isFinite(value) && value > 0);
218
+ if (codes.length === 0) {
219
+ return [];
220
+ }
221
+ query += ` AND U.CODUTE IN (${codes.map(() => '?').join(', ')}) `;
222
+ queryParams.push(...codes);
223
+ }
224
+ if ((filters === null || filters === void 0 ? void 0 : filters.numRep) !== undefined) {
225
+ const reparti = (Array.isArray(filters.numRep) ? filters.numRep : [filters.numRep])
226
+ .map((value) => Number(value))
227
+ .filter((value) => Number.isFinite(value));
228
+ if (reparti.length === 0) {
229
+ return [];
230
+ }
231
+ query += ` AND F.NUMREP IN (${reparti.map(() => '?').join(', ')}) `;
232
+ queryParams.push(...reparti);
233
+ }
234
+ if ((filters === null || filters === void 0 ? void 0 : filters.codDipendente) !== undefined) {
235
+ query += ` AND F.CODDIP = ? `;
236
+ queryParams.push(Number(filters.codDipendente));
237
+ }
238
+ if ((filters === null || filters === void 0 ? void 0 : filters.tipFil) !== undefined) {
239
+ query += ` AND F.TIPFIL = ? `;
240
+ queryParams.push(Number(filters.tipFil));
241
+ }
242
+ if (filters === null || filters === void 0 ? void 0 : filters.cellulare) {
243
+ query += ` AND TRIM(G.CELLULARE) = ? `;
244
+ queryParams.push(String(filters.cellulare).trim());
245
+ }
246
+ if (filters === null || filters === void 0 ? void 0 : filters.cellute) {
247
+ query += ` AND TRIM(U.CELLUTE) = ? `;
248
+ queryParams.push(String(filters.cellute).trim());
249
+ }
250
+ if ((filters === null || filters === void 0 ? void 0 : filters.flagSuper) !== undefined) {
251
+ query += filters.flagSuper ? ` AND COALESCE(G.FLGSUPER, 0) <> 0 ` : ` AND COALESCE(G.FLGSUPER, 0) = 0 `;
154
252
  }
155
253
  query += ` ORDER BY U.CODUTE DESC `;
156
254
  let users = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams));
157
- users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
255
+ users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase).map(user => this.normalizeUserFlags(user));
158
256
  const usersResponse = [];
257
+ // I campi estensione sono caricati una volta per tabella (non una per utente) in query IN
258
+ // suddivise in blocchi per non superare i limiti di parametri del driver.
259
+ const extensionFieldsByUser = (options === null || options === void 0 ? void 0 : options.includeExtensionFields)
260
+ ? yield this.loadExtensionFieldsForUsers(users.map((user) => user.codiceUtente))
261
+ : undefined;
262
+ // I grant sono caricati in batch (query IN) invece che utente per utente.
263
+ const grantsByUser = (options === null || options === void 0 ? void 0 : options.includeGrants)
264
+ ? yield this.permissionService.getUsersRolesAndGrants(users.map((user) => user.codiceUtente))
265
+ : undefined;
159
266
  for (const user of users) {
160
- let userGrants = null;
267
+ let userGrants;
161
268
  if (options === null || options === void 0 ? void 0 : options.includeGrants) {
162
- userGrants = yield this.permissionService.getUserRolesAndGrants(user.codiceUtente);
269
+ userGrants = grantsByUser === null || grantsByUser === void 0 ? void 0 : grantsByUser.get(user.codiceUtente);
163
270
  }
164
- let extensionFields = (options === null || options === void 0 ? void 0 : options.includeExtensionFields) ? {} : null;
165
- if ((options === null || options === void 0 ? void 0 : options.includeExtensionFields) && this.accessiOptions.extensionFieldsOptions) {
166
- for (const ext of this.accessiOptions.extensionFieldsOptions) {
167
- const values = (yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} = ?`, [user.codiceUtente])).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
168
- extensionFields[ext.objectKey] = values;
271
+ let extensionFields;
272
+ if (options === null || options === void 0 ? void 0 : options.includeExtensionFields) {
273
+ extensionFields = {};
274
+ for (const ext of (_c = this.accessiOptions.extensionFieldsOptions) !== null && _c !== void 0 ? _c : []) {
275
+ extensionFields[ext.objectKey] = (_e = (_d = extensionFieldsByUser === null || extensionFieldsByUser === void 0 ? void 0 : extensionFieldsByUser.get(ext.objectKey)) === null || _d === void 0 ? void 0 : _d.get(user.codiceUtente)) !== null && _e !== void 0 ? _e : [];
169
276
  }
170
277
  }
171
278
  usersResponse.push({
@@ -181,6 +288,68 @@ let UserService = class UserService {
181
288
  }
182
289
  });
183
290
  }
291
+ /** Conteggio utenti con gli stessi filtri di `getUsers`, per la paginazione (header X-Total-Count). */
292
+ countUsers(filters) {
293
+ return __awaiter(this, void 0, void 0, function* () {
294
+ var _a, _b;
295
+ const conditions = [];
296
+ const params = [];
297
+ if (filters === null || filters === void 0 ? void 0 : filters.email) {
298
+ conditions.push('LOWER(U.USRNAME) = ?');
299
+ params.push(filters.email.trim().toLowerCase());
300
+ }
301
+ if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
302
+ conditions.push('U.CODUTE = ?');
303
+ params.push(filters.codiceUtente);
304
+ }
305
+ 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(' ')}`;
306
+ const rows = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, params, false));
307
+ const row = rows[0];
308
+ return Number((_b = (_a = row === null || row === void 0 ? void 0 : row.TOTAL) !== null && _a !== void 0 ? _a : row === null || row === void 0 ? void 0 : row.total) !== null && _b !== void 0 ? _b : 0) || 0;
309
+ });
310
+ }
311
+ loadExtensionFieldsForUsers(codiceUtenti) {
312
+ return __awaiter(this, void 0, void 0, function* () {
313
+ var _a;
314
+ const byObjectKey = new Map();
315
+ const extensions = (_a = this.accessiOptions.extensionFieldsOptions) !== null && _a !== void 0 ? _a : [];
316
+ const uniqueCodes = Array.from(new Set(codiceUtenti));
317
+ for (const ext of extensions) {
318
+ const grouped = new Map();
319
+ for (const chunk of this.chunkArray(uniqueCodes, 500)) {
320
+ if (chunk.length === 0) {
321
+ continue;
322
+ }
323
+ const placeholders = chunk.map(() => '?').join(', ');
324
+ const rows = (yield Orm_1.Orm.query(ext.databaseOptions, `SELECT ${ext.tableJoinFieldName} AS __joinkey, ${ext.tableFields.join(', ')} FROM ${ext.tableName} WHERE ${ext.tableJoinFieldName} IN (${placeholders})`, chunk)).map(Utilities_1.RestUtilities.convertKeysToCamelCase);
325
+ for (const row of rows) {
326
+ const { __joinkey } = row, rest = __rest(row, ["__joinkey"]);
327
+ const key = Number(__joinkey);
328
+ if (!Number.isFinite(key)) {
329
+ continue;
330
+ }
331
+ const bucket = grouped.get(key);
332
+ if (bucket) {
333
+ bucket.push(rest);
334
+ }
335
+ else {
336
+ grouped.set(key, [rest]);
337
+ }
338
+ }
339
+ }
340
+ byObjectKey.set(ext.objectKey, grouped);
341
+ }
342
+ return byObjectKey;
343
+ });
344
+ }
345
+ chunkArray(items, size) {
346
+ const chunks = [];
347
+ for (let index = 0; index < items.length; index += size) {
348
+ chunks.push(items.slice(index, index + size));
349
+ }
350
+ return chunks;
351
+ }
352
+ /** Cerca il codice interno per email normalizzata. Il chiamante deve gestire il caso senza righe. */
184
353
  getCodiceUtenteByEmail(email) {
185
354
  return __awaiter(this, void 0, void 0, function* () {
186
355
  try {
@@ -195,179 +364,153 @@ let UserService = class UserService {
195
364
  }
196
365
  });
197
366
  }
367
+ /** Recupera il profilo locale usato dal login, compresi filtri Accessi eventualmente presenti. */
198
368
  getUserByEmail(email) {
199
369
  return __awaiter(this, void 0, void 0, function* () {
200
- var _a;
201
- const query = `
202
- SELECT
203
- U.CODUTE AS codice_utente,
204
- U.USRNAME AS email,
205
- U.FLGGDPR AS flag_gdpr,
206
- U.DATSCAPWD as data_scadenza_password,
207
- U.STAREG AS stato_registrazione,
208
- C.COGNOME AS cognome,
209
- C.NOME AS nome,
210
- C.AVATAR AS avatar,
211
- C.FLG2FATT AS flag_due_fattori,
212
- C.CODLINGUA AS codice_lingua,
213
- C.CELLULARE AS cellulare,
214
- C.FLGSUPER AS flag_super,
215
- C.FLGADMINCONFIG AS flag_admin_configurator,
216
- C.PAGDEF AS pagina_default,
217
- C.NUMMAC AS nummac,
218
- C.RAGSOCCLI AS rag_soc_cli
219
- FROM UTENTI U
220
- INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
221
- WHERE LOWER(U.USRNAME) = ?
370
+ const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
371
+ const query = `
372
+ SELECT
373
+ U.CODUTE AS codice_utente,
374
+ U.USRNAME AS email,
375
+ U.FLGGDPR AS flag_gdpr,
376
+ U.DATSCAPWD as data_scadenza_password,
377
+ U.STAREG AS stato_registrazione,
378
+ C.COGNOME AS cognome,
379
+ C.NOME AS nome,
380
+ C.AVATAR AS avatar,
381
+ C.FLG2FATT AS flag_due_fattori,
382
+ C.FLGPWDLESS AS passwordless_login_enabled,
383
+ C.CODLINGUA AS codice_lingua,
384
+ C.CELLULARE AS cellulare,
385
+ C.FLGSUPER AS flag_super,
386
+ C.FLGADMINCONFIG AS flag_admin_configurator,
387
+ COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,
388
+ C.PAGDEF AS pagina_default,
389
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'C', 'nummac')},
390
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)}
391
+ FROM UTENTI U
392
+ INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
393
+ WHERE LOWER(U.USRNAME) = ?
222
394
  `;
223
395
  const utenti = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [email]).then((results) => results.map(Utilities_1.RestUtilities.convertKeysToCamelCase)));
224
- const filtriUtente = yield this.filtriService.getFiltriUser((_a = utenti[0]) === null || _a === void 0 ? void 0 : _a.codiceUtente);
225
- if (utenti.length <= 0) {
396
+ const user = utenti[0];
397
+ if (!user)
226
398
  return null;
227
- }
228
- if (utenti.length > 0 && filtriUtente.length > 0) {
229
- const user = utenti[0];
230
- const filtro = filtriUtente[0];
399
+ const filtro = (yield this.filtriService.getFiltriUser(user.codiceUtente))[0];
400
+ if (filtro) {
401
+ const filterValues = {};
231
402
  Object.entries(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {
232
403
  if (key in filtro) {
233
- user[key] = filtro[key];
404
+ filterValues[key] = filtro[key];
234
405
  }
235
406
  });
407
+ Object.assign(user, filterValues);
236
408
  }
237
- return utenti.length > 0 ? utenti[0] : null;
409
+ return this.normalizeUserFlags(user);
238
410
  });
239
411
  }
240
412
  insertUserFilters(codiceUtente, filterData) {
241
413
  return __awaiter(this, void 0, void 0, function* () {
242
- try {
243
- if (!codiceUtente || codiceUtente <= 0) {
244
- throw new Error('Codice utente non valido');
245
- }
246
- const fieldMapping = {
247
- numeroReport: { dbField: 'NUMREP', type: 'number' },
248
- indicePersonale: { dbField: 'IDXPERS', type: 'number' },
249
- codiceClienteSuper: { dbField: 'CODCLISUPER', type: 'number' },
250
- codAge: { dbField: 'CODAGE', type: 'number' },
251
- codiceClienteCollegato: { dbField: 'CODCLICOL', type: 'number' },
252
- codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },
253
- tipFil: { dbField: 'TIPFIL', type: 'number' },
254
- idxPostazione: { dbField: 'IDXPOS', type: 'number' },
255
- };
256
- const fieldsToInsert = Object.entries(fieldMapping)
257
- .filter(([tsField]) => {
258
- const value = filterData[tsField];
259
- return value !== undefined && value !== null && value !== '';
260
- })
261
- .map(([tsField, config]) => {
262
- const value = filterData[tsField];
263
- if (config.type === 'number' && typeof value !== 'number') {
264
- throw new Error(`Il campo ${tsField} deve essere un numero`);
265
- }
266
- if (config.type === 'string' && typeof value !== 'string') {
267
- throw new Error(`Il campo ${tsField} deve essere una stringa`);
268
- }
269
- return { tsField, dbField: config.dbField, value };
270
- });
271
- if (fieldsToInsert.length === 0) {
272
- return;
273
- }
274
- yield this.executeInTransaction(() => __awaiter(this, void 0, void 0, function* () {
275
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, 'DELETE FROM FILTRI WHERE CODUTE = ?', [codiceUtente]);
276
- const dbFields = ['CODUTE', ...fieldsToInsert.map((f) => f.dbField)];
277
- const placeholders = dbFields.map(() => '?');
278
- const values = [codiceUtente, ...fieldsToInsert.map((f) => f.value)];
279
- const insertQuery = `INSERT INTO FILTRI (${dbFields.join(', ')}) VALUES (${placeholders.join(', ')})`;
280
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, insertQuery, values);
281
- }));
282
- }
283
- catch (error) {
284
- throw new Error(`Errore durante l'inserimento dei filtri per utente ${codiceUtente}: ${error.message}`);
285
- }
286
- });
287
- }
288
- executeInTransaction(operation) {
289
- return __awaiter(this, void 0, void 0, function* () {
290
- yield operation();
414
+ yield this.filtriService.upsertFiltriUtente(codiceUtente, filterData);
291
415
  });
292
416
  }
417
+ /**
418
+ * Crea utente, configurazione e filtri. La registrazione pubblica resta in stato `INVIO` e non puo
419
+ * impostare privilegi, ruoli o grant; soltanto flussi backend fidati possono usare `allowPrivilegedFields`.
420
+ */
293
421
  register(registrationData, options) {
294
422
  return __awaiter(this, void 0, void 0, function* () {
295
- var _a, _b, _c;
423
+ var _a;
296
424
  try {
297
425
  const allowPrivilegedFields = (options === null || options === void 0 ? void 0 : options.allowPrivilegedFields) === true;
298
426
  const normalizedEmail = this.normalizeEmail(registrationData.email);
427
+ if (registrationData.flagDueFattori !== undefined && typeof registrationData.flagDueFattori !== 'boolean') {
428
+ throw new common_1.BadRequestException('Il flag due fattori deve essere booleano.');
429
+ }
430
+ if (registrationData.flagDueFattori && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalizedEmail)) {
431
+ throw new common_1.BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');
432
+ }
299
433
  if (!allowPrivilegedFields &&
300
434
  (registrationData.flagSuper !== undefined ||
301
435
  registrationData.flagAdminConfigurator !== undefined ||
436
+ registrationData.flagDueFattori !== undefined ||
302
437
  registrationData.roles !== undefined ||
303
438
  registrationData.permissions !== undefined)) {
304
439
  throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');
305
440
  }
441
+ yield this.validateApplicationFields(registrationData);
306
442
  yield this.ensureEmailIsAvailable(normalizedEmail);
307
- const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;
308
- const paramsUtenti = [normalizedEmail, StatoRegistrazione_1.StatoRegistrazione.INVIO];
309
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);
310
- const codiceUtenteResult = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC', [normalizedEmail]);
311
- const codiceUtente = Number((_b = (_a = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _a === void 0 ? void 0 : _a.CODUTE) !== null && _b !== void 0 ? _b : (_c = codiceUtenteResult === null || codiceUtenteResult === void 0 ? void 0 : codiceUtenteResult[0]) === null || _c === void 0 ? void 0 : _c.codute);
312
- if (!codiceUtente) {
313
- throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
314
- }
315
- const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
316
- const utentiConfigPlaceholders = ['?', '?', '?'];
317
- const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];
318
- const optionalFields = [
319
- {
320
- key: 'cellulare',
321
- dbField: 'CELLULARE',
322
- transform: (v) => String(v),
323
- },
324
- {
325
- key: 'avatar',
326
- dbField: 'AVATAR',
327
- transform: (v) => String(v),
328
- },
329
- {
330
- key: 'flagDueFattori',
331
- dbField: 'FLG2FATT',
332
- transform: (v) => (v ? 1 : 0),
333
- },
334
- {
335
- key: 'paginaDefault',
336
- dbField: 'PAGDEF',
337
- transform: (v) => String(v),
338
- },
339
- {
340
- key: 'nummac',
341
- dbField: 'NUMMAC',
342
- transform: (v) => Number(v),
343
- },
344
- {
345
- key: 'ragSocCli',
346
- dbField: 'RAGSOCCLI',
347
- transform: (v) => String(v),
348
- },
349
- ];
350
- if (allowPrivilegedFields) {
351
- optionalFields.push({
352
- key: 'flagSuper',
353
- dbField: 'FLGSUPER',
354
- transform: (v) => (v ? 1 : 0),
355
- }, {
356
- key: 'flagAdminConfigurator',
357
- dbField: 'FLGADMINCONFIG',
358
- transform: (v) => (v ? 1 : 0),
359
- });
360
- }
361
- for (const field of optionalFields) {
362
- const value = registrationData[field.key];
363
- if (value !== undefined && value !== null) {
364
- utentiConfigFields.push(field.dbField);
365
- utentiConfigPlaceholders.push('?');
366
- utentiConfigParams.push(field.transform ? field.transform(value) : value);
443
+ const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?) RETURNING CODUTE`;
444
+ // Public/local registrations keep the historic INVIO state; trusted master or SSO flows may opt into CONF.
445
+ const paramsUtenti = [normalizedEmail, (_a = options === null || options === void 0 ? void 0 : options.initialState) !== null && _a !== void 0 ? _a : StatoRegistrazione_1.StatoRegistrazione.INVIO];
446
+ // Utente e configurazione sono creati in un'unica transazione; filtri e assegnazioni restano
447
+ // fuori perché delegati a servizi dedicati.
448
+ const codiceUtente = yield Orm_1.Orm.withTransaction(this.accessiOptions.databaseOptions, (transaction) => __awaiter(this, void 0, void 0, function* () {
449
+ var _a;
450
+ const insertedUsers = yield Orm_1.Orm.transactionQuery(transaction, queryUtenti, paramsUtenti);
451
+ const insertedUser = (Array.isArray(insertedUsers) ? insertedUsers[0] : insertedUsers);
452
+ const newCodiceUtente = Number((_a = insertedUser === null || insertedUser === void 0 ? void 0 : insertedUser.CODUTE) !== null && _a !== void 0 ? _a : insertedUser === null || insertedUser === void 0 ? void 0 : insertedUser.codute);
453
+ if (!newCodiceUtente) {
454
+ throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
367
455
  }
368
- }
369
- const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
370
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
456
+ const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
457
+ const utentiConfigPlaceholders = ['?', '?', '?'];
458
+ const utentiConfigParams = [newCodiceUtente, registrationData.cognome, registrationData.nome];
459
+ const optionalFields = [
460
+ {
461
+ key: 'cellulare',
462
+ dbField: 'CELLULARE',
463
+ transform: (v) => String(v),
464
+ },
465
+ {
466
+ key: 'avatar',
467
+ dbField: 'AVATAR',
468
+ transform: (v) => String(v),
469
+ },
470
+ {
471
+ key: 'flagDueFattori',
472
+ dbField: 'FLG2FATT',
473
+ transform: (v) => (v ? 1 : 0),
474
+ },
475
+ {
476
+ key: 'paginaDefault',
477
+ dbField: 'PAGDEF',
478
+ transform: (v) => String(v),
479
+ },
480
+ {
481
+ key: 'nummac',
482
+ dbField: 'NUMMAC',
483
+ transform: (v) => Number(v),
484
+ },
485
+ {
486
+ key: 'ragSocCli',
487
+ dbField: 'RAGSOCCLI',
488
+ transform: (v) => String(v),
489
+ },
490
+ ];
491
+ if (allowPrivilegedFields) {
492
+ optionalFields.push({
493
+ key: 'flagSuper',
494
+ dbField: 'FLGSUPER',
495
+ transform: (v) => (v ? 1 : 0),
496
+ }, {
497
+ key: 'flagAdminConfigurator',
498
+ dbField: 'FLGADMINCONFIG',
499
+ transform: (v) => (v ? 1 : 0),
500
+ });
501
+ }
502
+ for (const field of optionalFields) {
503
+ const value = registrationData[field.key];
504
+ if (value !== undefined && value !== null) {
505
+ utentiConfigFields.push(field.dbField);
506
+ utentiConfigPlaceholders.push('?');
507
+ utentiConfigParams.push(field.transform ? field.transform(value) : value);
508
+ }
509
+ }
510
+ const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
511
+ yield Orm_1.Orm.transactionQuery(transaction, queryUtentiConfig, utentiConfigParams);
512
+ return newCodiceUtente;
513
+ }));
371
514
  yield this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);
372
515
  if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {
373
516
  yield this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);
@@ -384,20 +527,45 @@ let UserService = class UserService {
384
527
  }
385
528
  });
386
529
  }
530
+ /**
531
+ * Aggiorna il profilo utente e i filtri. Le modifiche a stato, ruoli, grant e flag amministrativi richiedono
532
+ * `allowPrivilegedChanges`; gli array ruolo/grant passati in un flusso fidato sostituiscono le assegnazioni.
533
+ */
387
534
  updateUser(codiceUtente, user, options) {
388
535
  return __awaiter(this, void 0, void 0, function* () {
536
+ var _a, _b, _c, _d;
389
537
  try {
390
538
  if (!codiceUtente)
391
539
  throw new Error('Impossibile aggiornare senza codice utente.');
392
540
  const allowPrivilegedChanges = (options === null || options === void 0 ? void 0 : options.allowPrivilegedChanges) === true;
541
+ for (const value of [user.flagDueFattori, user.passwordlessLoginEnabled]) {
542
+ if (value !== undefined && typeof value !== 'boolean')
543
+ throw new common_1.BadRequestException('Le policy di autenticazione devono essere booleane.');
544
+ }
393
545
  if (!allowPrivilegedChanges &&
394
546
  (user.statoRegistrazione !== undefined ||
395
547
  user.flagSuper !== undefined ||
396
548
  user.flagAdminConfigurator !== undefined ||
549
+ user.passwordLoginEnabled !== undefined ||
550
+ user.passwordlessLoginEnabled !== undefined ||
551
+ user.flagDueFattori !== undefined ||
397
552
  user.roles !== undefined ||
398
553
  user.permissions !== undefined)) {
399
554
  throw new Error('Non e consentito modificare campi privilegiati.');
400
555
  }
556
+ if (user.flagDueFattori !== undefined || user.passwordlessLoginEnabled !== undefined || user.email !== undefined) {
557
+ const current = yield this.getAuthenticatedUserSnapshot(codiceUtente);
558
+ if (!current)
559
+ throw new common_1.BadRequestException('Utente non trovato.');
560
+ const twoFactor = (_a = user.flagDueFattori) !== null && _a !== void 0 ? _a : current.flagDueFattori;
561
+ const passwordless = (_b = user.passwordlessLoginEnabled) !== null && _b !== void 0 ? _b : current.passwordlessLoginEnabled;
562
+ if (passwordless && !twoFactor)
563
+ throw new common_1.BadRequestException('Il login senza password richiede il codice di accesso attivo.');
564
+ if (twoFactor && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(((_d = (_c = user.email) !== null && _c !== void 0 ? _c : current.email) !== null && _d !== void 0 ? _d : '').trim())) {
565
+ throw new common_1.BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');
566
+ }
567
+ }
568
+ const { configColumns } = yield this.validateApplicationFields(user);
401
569
  const utentiUpdates = [];
402
570
  const utentiParams = [];
403
571
  if (user.email !== undefined) {
@@ -435,7 +603,11 @@ let UserService = class UserService {
435
603
  }
436
604
  if (user.flagDueFattori !== undefined) {
437
605
  utentiConfigUpdates.push('flg2fatt = ?');
438
- utentiConfigParams.push(user.flagDueFattori);
606
+ utentiConfigParams.push(user.flagDueFattori ? 1 : 0);
607
+ }
608
+ if (user.passwordlessLoginEnabled !== undefined) {
609
+ utentiConfigUpdates.push('flgpwdless = ?');
610
+ utentiConfigParams.push(user.passwordlessLoginEnabled ? 1 : 0);
439
611
  }
440
612
  if (user.codiceLingua !== undefined) {
441
613
  utentiConfigUpdates.push('codlingua = ?');
@@ -453,6 +625,10 @@ let UserService = class UserService {
453
625
  utentiConfigUpdates.push('flgadminconfig = ?');
454
626
  utentiConfigParams.push(user.flagAdminConfigurator);
455
627
  }
628
+ if (allowPrivilegedChanges && user.passwordLoginEnabled !== undefined) {
629
+ utentiConfigUpdates.push('flgpassword = ?');
630
+ utentiConfigParams.push(user.passwordLoginEnabled ? 1 : 0);
631
+ }
456
632
  if (user.paginaDefault !== undefined) {
457
633
  utentiConfigUpdates.push('pagdef = ?');
458
634
  utentiConfigParams.push(user.paginaDefault);
@@ -461,7 +637,7 @@ let UserService = class UserService {
461
637
  utentiConfigUpdates.push('json_metadata = ?');
462
638
  utentiConfigParams.push(user.jsonMetadata);
463
639
  }
464
- if (user.ragSocCli !== undefined) {
640
+ if (user.ragSocCli !== undefined && (user.ragSocCli !== null || (configColumns === null || configColumns === void 0 ? void 0 : configColumns.has('RAGSOCCLI')))) {
465
641
  utentiConfigUpdates.push('ragsoccli = ?');
466
642
  utentiConfigParams.push(user.ragSocCli);
467
643
  }
@@ -470,10 +646,10 @@ let UserService = class UserService {
470
646
  utentiConfigParams.push(codiceUtente);
471
647
  yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
472
648
  }
473
- if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {
649
+ if (allowPrivilegedChanges && Array.isArray(user.roles)) {
474
650
  yield this.permissionService.assignRolesToUser(codiceUtente, user.roles);
475
651
  }
476
- if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {
652
+ if (allowPrivilegedChanges && Array.isArray(user.permissions)) {
477
653
  yield this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);
478
654
  }
479
655
  yield this.filtriService.upsertFiltriUtente(codiceUtente, user);
@@ -485,64 +661,10 @@ let UserService = class UserService {
485
661
  }
486
662
  updateUserFilters(codiceUtente, user) {
487
663
  return __awaiter(this, void 0, void 0, function* () {
488
- try {
489
- if (!codiceUtente || codiceUtente <= 0) {
490
- throw new Error('Codice utente non valido');
491
- }
492
- const fieldMapping = {
493
- numRep: { dbField: 'NUMREP', type: 'number' },
494
- idxPers: { dbField: 'IDXPERS', type: 'number' },
495
- codCliSuper: { dbField: 'CODCLISUPER', type: 'number' },
496
- codAge: { dbField: 'CODAGE', type: 'number' },
497
- codCliCol: { dbField: 'CODCLICOL', type: 'number' },
498
- codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },
499
- tipFil: { dbField: 'TIPFIL', type: 'number' },
500
- idxPostazione: { dbField: 'IDXPOS', type: 'number' },
501
- };
502
- const fieldsToUpdate = Object.entries(fieldMapping)
503
- .filter(([tsField]) => {
504
- const value = user[tsField];
505
- return value !== undefined && value !== null;
506
- })
507
- .map(([tsField, config]) => {
508
- const value = user[tsField];
509
- if (config.type === 'number' && typeof value !== 'number') {
510
- throw new Error(`Il campo ${tsField} deve essere un numero`);
511
- }
512
- if (config.type === 'string' && typeof value !== 'string') {
513
- throw new Error(`Il campo ${tsField} deve essere una stringa`);
514
- }
515
- return { tsField, dbField: config.dbField, value };
516
- });
517
- if (fieldsToUpdate.length === 0) {
518
- return;
519
- }
520
- yield this.executeInTransaction(() => __awaiter(this, void 0, void 0, function* () {
521
- const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;
522
- const existingRecord = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, checkQuery, [
523
- codiceUtente,
524
- ]);
525
- const exists = existingRecord[0].CNT > 0;
526
- if (exists) {
527
- const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');
528
- const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];
529
- const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;
530
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);
531
- }
532
- else {
533
- const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];
534
- const placeholders = dbFields.map(() => '?');
535
- const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];
536
- const insertQuery = `INSERT INTO FILTRI (${dbFields.join(', ')}) VALUES (${placeholders.join(', ')})`;
537
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, insertQuery, insertValues);
538
- }
539
- }));
540
- }
541
- catch (error) {
542
- throw new Error(`Errore durante l'aggiornamento dei filtri per utente ${codiceUtente}: ${error.message}`);
543
- }
664
+ yield this.filtriService.upsertFiltriUtente(codiceUtente, user);
544
665
  });
545
666
  }
667
+ /** Eliminazione logica: imposta lo stato `DELETE` senza cancellare lo storico o i collegamenti SSO. */
546
668
  deleteUser(codiceCliente) {
547
669
  return __awaiter(this, void 0, void 0, function* () {
548
670
  try {
@@ -557,6 +679,7 @@ let UserService = class UserService {
557
679
  }
558
680
  });
559
681
  }
682
+ /** Cambia esplicitamente lo stato di registrazione; usare questa API per blocco, conferma o eliminazione logica. */
560
683
  setStato(codiceCliente, statoRegistrazione) {
561
684
  return __awaiter(this, void 0, void 0, function* () {
562
685
  try {
@@ -574,15 +697,57 @@ let UserService = class UserService {
574
697
  setGdpr(codiceUtente) {
575
698
  return __awaiter(this, void 0, void 0, function* () {
576
699
  try {
577
- const query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;
578
- const params = [codiceUtente, true];
579
- return yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, query, params);
700
+ return yield Orm_1.Orm.executeMultiple(this.accessiOptions.databaseOptions, [
701
+ { query: 'INSERT INTO UTENTI_GDPR (CODUTE, GDPR) VALUES (?, ?)', params: [codiceUtente, 'true'] },
702
+ { query: 'UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_DATE WHERE CODUTE = ?', params: [codiceUtente] },
703
+ ]);
580
704
  }
581
705
  catch (error) {
582
706
  throw error;
583
707
  }
584
708
  });
585
709
  }
710
+ /**
711
+ * Forza l'invio dell'email di reset password per un utente. Operazione amministrativa.
712
+ * Richiede un servizio email configurato: altrimenti solleva ACCESSI_EMAIL_NOT_CONFIGURED.
713
+ */
714
+ forcePasswordReset(codiceUtente) {
715
+ return __awaiter(this, void 0, void 0, function* () {
716
+ var _a, _b;
717
+ (0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
718
+ const rows = yield this.getUsers({ codiceUtente });
719
+ const email = (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.utente) === null || _b === void 0 ? void 0 : _b.email;
720
+ if (typeof email !== 'string' || email.trim() === '') {
721
+ throw new common_1.NotFoundException(`Nessun utente con email per il codice ${codiceUtente}.`);
722
+ }
723
+ yield this.emailService.sendPasswordResetEmail(email);
724
+ });
725
+ }
726
+ /**
727
+ * Forza l'invio dell'email di reset a tutti gli utenti la cui password non e ancora nel formato
728
+ * moderno (`scrypt$...`), cioe' legacy grezza o `scrypt-legacy` non piu verificabile. Utile quando
729
+ * la `encryptionKey` storica e perduta. Richiede email configurata. Ritorna quanti utenti hanno
730
+ * ricevuto l'email.
731
+ */
732
+ forcePasswordResetForLegacyPasswords() {
733
+ return __awaiter(this, void 0, void 0, function* () {
734
+ (0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
735
+ const rows = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT U.CODUTE AS codice_utente, U.USRNAME AS email
736
+ FROM UTENTI U
737
+ JOIN UTENTI_PWD P ON P.CODUTE = U.CODUTE
738
+ WHERE P.PWD IS NOT NULL AND P.PWD NOT STARTING WITH 'scrypt$'`, [], false);
739
+ let sent = 0;
740
+ for (const row of rows) {
741
+ const raw = Utilities_1.RestUtilities.convertKeysToCamelCase(row);
742
+ const email = typeof raw.email === 'string' ? raw.email.trim() : '';
743
+ if (email === '')
744
+ continue;
745
+ yield this.emailService.sendPasswordResetEmail(email);
746
+ sent += 1;
747
+ }
748
+ return sent;
749
+ });
750
+ }
586
751
  };
587
752
  exports.UserService = UserService;
588
753
  exports.UserService = UserService = __decorate([