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

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 (549) 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 +3130 -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 +21 -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 +34 -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 +112 -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 +691 -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.d.ts +1 -0
  358. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js +9 -1
  359. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  360. package/dist/accessi-module/Dtos/GetMenusResponse.d.ts +1 -0
  361. package/dist/accessi-module/Dtos/GetMenusResponse.js +9 -1
  362. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  363. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  364. package/dist/accessi-module/Dtos/GetUserByTokenRequest.d.ts +3 -0
  365. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js +26 -0
  366. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -0
  367. package/dist/accessi-module/Dtos/GetUserByTokenResponse.d.ts +5 -0
  368. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js +27 -0
  369. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -0
  370. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  371. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  372. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  373. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  374. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  375. package/dist/accessi-module/Dtos/LoginResponse.d.ts +6 -2
  376. package/dist/accessi-module/Dtos/LoginResponse.js +20 -7
  377. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  378. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  379. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  380. package/dist/accessi-module/Dtos/Permission.js +1 -0
  381. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  382. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +5 -0
  383. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +15 -0
  384. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -0
  385. package/dist/accessi-module/Dtos/RegisterRequest.js +7 -1
  386. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  387. package/dist/accessi-module/Dtos/RegisterResponse.d.ts +1 -1
  388. package/dist/accessi-module/Dtos/RegisterResponse.js +3 -3
  389. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  390. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  391. package/dist/accessi-module/Dtos/Role.js +4 -0
  392. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  393. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  394. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.d.ts +4 -0
  395. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js +36 -0
  396. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -0
  397. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  398. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  399. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  400. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  401. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  402. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  403. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  404. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  405. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  406. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  407. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  408. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  409. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  410. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  411. package/dist/accessi-module/Dtos/UserDto.d.ts +19 -0
  412. package/dist/accessi-module/Dtos/UserDto.js +114 -3
  413. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  414. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  415. package/dist/accessi-module/Dtos/UserGrantsResponse.d.ts +5 -0
  416. package/dist/accessi-module/Dtos/UserGrantsResponse.js +27 -0
  417. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -0
  418. package/dist/accessi-module/Dtos/index.d.ts +11 -0
  419. package/dist/accessi-module/Dtos/index.js +11 -0
  420. package/dist/accessi-module/Dtos/index.js.map +1 -1
  421. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +40 -5
  422. package/dist/accessi-module/Services/AuthService/AuthService.js +192 -40
  423. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  424. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  425. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  426. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  427. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  428. package/dist/accessi-module/Services/EmailService/EmailService.js +47 -22
  429. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  430. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  431. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -16
  432. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  433. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +77 -2
  434. package/dist/accessi-module/Services/PermissionService/PermissionService.js +611 -206
  435. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  436. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  437. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  438. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  439. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  440. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  441. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  442. package/dist/accessi-module/Services/UserService/UserService.d.ts +54 -4
  443. package/dist/accessi-module/Services/UserService/UserService.js +488 -269
  444. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  445. package/dist/accessi-module/Views/reset-password.html +213 -213
  446. package/dist/accessi-module/accessiRuntime.d.ts +45 -0
  447. package/dist/accessi-module/accessiRuntime.js +39 -0
  448. package/dist/accessi-module/accessiRuntime.js.map +1 -0
  449. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +51 -10
  450. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +435 -181
  451. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  452. package/dist/accessi-module/database-updates/accessiSchema.d.ts +45 -0
  453. package/dist/accessi-module/database-updates/accessiSchema.js +98 -0
  454. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  455. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  456. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  457. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  458. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +26 -8
  459. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  460. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +24 -0
  461. package/dist/accessi-module/federated-auth/FederatedAuthController.js +333 -0
  462. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  463. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +100 -0
  464. package/dist/accessi-module/federated-auth/FederatedAuthService.js +451 -0
  465. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  466. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  467. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  468. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  469. package/dist/accessi-module/index.d.ts +21 -0
  470. package/dist/accessi-module/index.js +69 -19
  471. package/dist/accessi-module/index.js.map +1 -1
  472. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  473. package/dist/accessi-module/jwt/jwt.strategy.js +16 -7
  474. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  475. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  476. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  477. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  478. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  479. package/dist/accessi-module/middleware/authenticateGen.js +63 -25
  480. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  481. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  482. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  483. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  484. package/dist/accessi-module/security/accessControl.d.ts +11 -0
  485. package/dist/accessi-module/security/accessControl.js +19 -4
  486. package/dist/accessi-module/security/accessControl.js.map +1 -1
  487. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  488. package/dist/accessi-module/security/accessiValidation.js +41 -0
  489. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  490. package/dist/accessi-module/security/authenticatedToken.d.ts +15 -1
  491. package/dist/accessi-module/security/authenticatedToken.js +31 -4
  492. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  493. package/dist/accessi-module/security/emailConfiguration.d.ts +20 -0
  494. package/dist/accessi-module/security/emailConfiguration.js +41 -0
  495. package/dist/accessi-module/security/emailConfiguration.js.map +1 -0
  496. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  497. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  498. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  499. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +3 -3
  500. package/dist/accessi-module/security/publicAuthRateLimit.js +30 -8
  501. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  502. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  503. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  504. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  505. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  506. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  507. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  508. package/dist/allegati-module/AllegatiModule.d.ts +12 -1
  509. package/dist/allegati-module/AllegatiModule.js +11 -1
  510. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  511. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  512. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  513. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  514. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  515. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  516. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  517. package/dist/allegati-module/Dtos/index.js.map +1 -1
  518. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  519. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  520. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  521. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  522. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  523. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  524. package/dist/allegati-module/index.js.map +1 -1
  525. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  526. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  527. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  528. package/dist/autobind.d.ts +10 -3
  529. package/dist/autobind.js +24 -9
  530. package/dist/autobind.js.map +1 -1
  531. package/dist/emilsoftware-utilities-2.0.0-dev.31.tgz +0 -0
  532. package/dist/firebird-compat.d.ts +29 -6
  533. package/dist/firebird-compat.js +150 -129
  534. package/dist/firebird-compat.js.map +1 -1
  535. package/dist/index.d.ts +2 -2
  536. package/dist/index.js +2 -2
  537. package/dist/index.js.map +1 -1
  538. package/dist/initEmilsoftwareModule.js +11 -3
  539. package/dist/initEmilsoftwareModule.js.map +1 -1
  540. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  541. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  542. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  543. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  544. package/dist/scripts/generateAccessiWiki.js +131 -0
  545. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  546. package/dist/swagger/SwaggerConfig.d.ts +7 -1
  547. package/dist/swagger/SwaggerConfig.js +22 -8
  548. package/dist/swagger/SwaggerConfig.js.map +1 -1
  549. package/package.json +103 -83
@@ -20,17 +20,46 @@ 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");
47
+ /**
48
+ * Flag applicativi UTENTI_CONFIG esposti e gestibili dal modulo.
49
+ * `key` = nome camelCase nel DTO, `column` = colonna fisica, `alias` = alias SELECT.
50
+ */
51
+ const APPLICATION_FLAG_FIELDS = [
52
+ { key: 'flagMop', column: 'FLGMOP', alias: 'flag_mop' },
53
+ { key: 'flagPiana', column: 'FLGPIANA', alias: 'flag_piana' },
54
+ { key: 'flagAddetti', column: 'FLGADDETTI', alias: 'flag_addetti' },
55
+ { key: 'flagOspiti', column: 'FLGOSPITI', alias: 'flag_ospiti' },
56
+ { key: 'flagPianaRfid', column: 'FLGPIANARFID', alias: 'flag_piana_rfid' },
57
+ { key: 'flagConta', column: 'FLGCONTA', alias: 'flag_conta' },
58
+ { key: 'flagCubi', column: 'FLGCUBI', alias: 'flag_cubi' },
59
+ { key: 'flagCicliPass', column: 'FLGCICLPASS', alias: 'flag_cicli_pass' },
60
+ { key: 'flagDipendenti', column: 'FLGDIPENDENTI', alias: 'flag_dipendenti' },
61
+ { key: 'flagInventari', column: 'FLGINVENTARI', alias: 'flag_inventari' },
62
+ ];
34
63
  let UserService = class UserService {
35
64
  constructor(accessiOptions, emailService, permissionService, filtriService) {
36
65
  this.accessiOptions = accessiOptions;
@@ -38,12 +67,38 @@ let UserService = class UserService {
38
67
  this.permissionService = permissionService;
39
68
  this.filtriService = filtriService;
40
69
  }
70
+ validateApplicationFields(value) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ const applicationFields = [['nummac', 'NUMMAC'], ['ragSocCli', 'RAGSOCCLI']];
73
+ let configColumns;
74
+ if (applicationFields.some(([key]) => value[key] !== undefined)) {
75
+ configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
76
+ for (const [key, column] of applicationFields) {
77
+ if (value[key] !== undefined && value[key] !== null && !configColumns.has(column)) {
78
+ throw new common_1.BadRequestException(`Campo applicativo non configurato: UTENTI_CONFIG.${column}`);
79
+ }
80
+ }
81
+ }
82
+ const filterKeys = Object.keys(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING);
83
+ if (filterKeys.some(key => value[key] !== undefined && value[key] !== null && value[key] !== '')) {
84
+ yield this.filtriService.validateSupportedFields(value);
85
+ }
86
+ return { configColumns };
87
+ });
88
+ }
41
89
  normalizeDatabaseBoolean(value) {
42
90
  return value === true || value === 1 || value === '1';
43
91
  }
92
+ normalizeUserFlags(user) {
93
+ const normalized = 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), enableIa: this.normalizeDatabaseBoolean(user.enableIa) });
94
+ for (const field of APPLICATION_FLAG_FIELDS) {
95
+ normalized[field.key] = this.normalizeDatabaseBoolean(user[field.key]);
96
+ }
97
+ return normalized;
98
+ }
44
99
  normalizeEmail(email) {
45
100
  if (typeof email !== 'string' || email.trim() === '') {
46
- throw new Error("L'email e' obbligatoria.");
101
+ throw new common_1.BadRequestException({ code: 'ACCESSI_EMAIL_REQUIRED', message: "L'email è obbligatoria." });
47
102
  }
48
103
  return email.trim().toLowerCase();
49
104
  }
@@ -53,10 +108,11 @@ let UserService = class UserService {
53
108
  const existingUser = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
54
109
  if ((existingUser === null || existingUser === void 0 ? void 0 : existingUser.codiceUtente) &&
55
110
  (!currentUserCode || existingUser.codiceUtente !== currentUserCode)) {
56
- throw new Error("Questa e-mail e' gia stata utilizzata!");
111
+ throw new common_1.ConflictException({ code: 'ACCESSI_EMAIL_ALREADY_EXISTS', message: "L'email è già associata a un utente Accessi." });
57
112
  }
58
113
  });
59
114
  }
115
+ /** Determina se l'utente puo amministrare il configuratore Accessi (`FLGADMINCONFIG`). */
60
116
  isAdminConfigurator(codiceUtente) {
61
117
  return __awaiter(this, void 0, void 0, function* () {
62
118
  var _a;
@@ -65,32 +121,35 @@ let UserService = class UserService {
65
121
  }
66
122
  const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;
67
123
  const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);
68
- if (!result || result === 0) {
124
+ if (result.length === 0) {
69
125
  return false;
70
126
  }
71
127
  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;
128
+ return this.normalizeDatabaseBoolean((_a = mapped[0]) === null || _a === void 0 ? void 0 : _a.flagAdminConfigurator);
77
129
  });
78
130
  }
131
+ /**
132
+ * Legge il minimo profilo autorevole usato da JWT e middleware. Restituisce `null` per utenti inesistenti.
133
+ * Non usare `UserDto` dal token per decisioni di sicurezza: i flag vengono sempre riletti qui.
134
+ */
79
135
  getAuthenticatedUserSnapshot(codiceUtente) {
80
136
  return __awaiter(this, void 0, void 0, function* () {
81
137
  if (!codiceUtente || codiceUtente <= 0) {
82
138
  return null;
83
139
  }
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 = ?
140
+ const result = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `
141
+ SELECT
142
+ U.CODUTE AS codice_utente,
143
+ U.USRNAME AS email,
144
+ U.STAREG AS stato_registrazione,
145
+ C.FLGSUPER AS flag_super,
146
+ C.FLGADMINCONFIG AS flag_admin_configurator
147
+ , C.FLG2FATT AS flag_due_fattori
148
+ , C.FLGPWDLESS AS passwordless_login_enabled
149
+ , COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled
150
+ FROM UTENTI U
151
+ LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
152
+ WHERE U.CODUTE = ?
94
153
  `, [codiceUtente]);
95
154
  const user = result.map(Utilities_1.RestUtilities.convertKeysToCamelCase)[0];
96
155
  if (!(user === null || user === void 0 ? void 0 : user.codiceUtente)) {
@@ -102,70 +161,139 @@ let UserService = class UserService {
102
161
  statoRegistrazione: Number(user.statoRegistrazione),
103
162
  flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),
104
163
  flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),
164
+ flagDueFattori: this.normalizeDatabaseBoolean(user.flagDueFattori),
165
+ passwordlessLoginEnabled: this.normalizeDatabaseBoolean(user.passwordlessLoginEnabled),
166
+ passwordLoginEnabled: this.normalizeDatabaseBoolean(user.passwordLoginEnabled),
105
167
  };
106
168
  });
107
169
  }
170
+ /**
171
+ * Elenca gli utenti con filtri opzionali. Grant e campi estesi sono costosi e vengono caricati soltanto
172
+ * quando richiesti esplicitamente nelle opzioni; usare filtri puntuali nei flussi di autenticazione.
173
+ */
108
174
  getUsers(filters, options) {
109
175
  return __awaiter(this, void 0, void 0, function* () {
176
+ var _a, _b, _c, _d, _e;
110
177
  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
178
+ const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
179
+ const filterColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'FILTRI');
180
+ const utentiColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI');
181
+ // Paginazione opzionale con limiti sani: il default resta "tutti gli utenti".
182
+ 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
183
+ ? Math.min(filters === null || filters === void 0 ? void 0 : filters.limit, 1000)
184
+ : undefined;
185
+ 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
186
+ ? Math.trunc(filters === null || filters === void 0 ? void 0 : filters.offset)
187
+ : 0;
188
+ const pagination = `${limit !== undefined ? ` FIRST ${limit}` : ''}${offset > 0 ? ` SKIP ${offset}` : ''}`;
189
+ let query = `
190
+ SELECT${pagination}
191
+ U.CODUTE as codice_utente,
192
+ U.USRNAME as email,
193
+ U.FLGGDPR as flag_gdpr,
194
+ U.DATGDPR as data_gdpr,
195
+ U.DATINS as data_inserimento,
196
+ U.DATSCAPWD as data_scadenza_password,
197
+ U.DATLASTLOGIN as data_last_login,
198
+ U.STAREG as stato_registrazione,
199
+ ${(0, optionalColumns_1.optionalColumn)(utentiColumns, 'ENABLEIA', 'U', 'enable_ia')},
200
+ G.COGNOME as cognome,
201
+ G.NOME as nome,
202
+ G.AVATAR as avatar,
203
+ G.FLG2FATT as flag_due_fattori,
204
+ G.FLGPWDLESS as passwordless_login_enabled,
205
+ G.CODLINGUA as codice_lingua,
206
+ G.CELLULARE as cellulare,
207
+ G.FLGSUPER as flag_super,
208
+ G.FLGADMINCONFIG as flag_admin_configurator,
209
+ COALESCE(G.FLGPASSWORD, 1) as password_login_enabled,
210
+ G.PAGDEF as pagina_default,
211
+ G.JSON_METADATA as json_metadata,
212
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'G', 'rag_soc_cli', false)},
213
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'G', 'nummac')},
214
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'CAUMOV', 'G', 'caumov')},
215
+ ${APPLICATION_FLAG_FIELDS.map((field) => (0, optionalColumns_1.optionalColumn)(configColumns, field.column, 'G', field.alias)).join(',\n ')},
216
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODDIP', 'F', 'cod_dipendente')},
217
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'NUMREP', 'F', 'num_rep', true)},
218
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPERS', 'F', 'idx_pers', true)},
219
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLISUPER', 'F', 'cod_cli_super', true)},
220
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODAGE', 'F', 'cod_age', true)},
221
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLICOL', 'F', 'cod_cli_col', true)},
222
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'CODCLIENTI', 'F', 'cod_clienti', false)},
223
+ F.TIPFIL AS tip_fil,
224
+ ${(0, optionalColumns_1.optionalColumn)(filterColumns, 'IDXPOS', 'F', 'idx_postazione', true)}
225
+ FROM UTENTI U
226
+ INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE
227
+ LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE
228
+ WHERE 1=1
145
229
  `;
146
230
  const queryParams = [];
147
231
  if (filters === null || filters === void 0 ? void 0 : filters.email) {
148
232
  query += ` AND LOWER(U.USRNAME) = ? `;
149
233
  queryParams.push(filters.email.trim().toLowerCase());
150
234
  }
151
- if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
152
- query += ` AND U.CODUTE = ? `;
153
- queryParams.push(filters.codiceUtente);
235
+ if ((filters === null || filters === void 0 ? void 0 : filters.codiceUtente) !== undefined) {
236
+ const codes = (Array.isArray(filters.codiceUtente) ? filters.codiceUtente : [filters.codiceUtente])
237
+ .map((value) => Number(value))
238
+ .filter((value) => Number.isFinite(value) && value > 0);
239
+ if (codes.length === 0) {
240
+ return [];
241
+ }
242
+ query += ` AND U.CODUTE IN (${codes.map(() => '?').join(', ')}) `;
243
+ queryParams.push(...codes);
244
+ }
245
+ if ((filters === null || filters === void 0 ? void 0 : filters.numRep) !== undefined) {
246
+ const reparti = (Array.isArray(filters.numRep) ? filters.numRep : [filters.numRep])
247
+ .map((value) => Number(value))
248
+ .filter((value) => Number.isFinite(value));
249
+ if (reparti.length === 0) {
250
+ return [];
251
+ }
252
+ query += ` AND F.NUMREP IN (${reparti.map(() => '?').join(', ')}) `;
253
+ queryParams.push(...reparti);
254
+ }
255
+ if ((filters === null || filters === void 0 ? void 0 : filters.codDipendente) !== undefined) {
256
+ query += ` AND F.CODDIP = ? `;
257
+ queryParams.push(Number(filters.codDipendente));
258
+ }
259
+ if ((filters === null || filters === void 0 ? void 0 : filters.tipFil) !== undefined) {
260
+ query += ` AND F.TIPFIL = ? `;
261
+ queryParams.push(Number(filters.tipFil));
262
+ }
263
+ if (filters === null || filters === void 0 ? void 0 : filters.cellulare) {
264
+ query += ` AND TRIM(G.CELLULARE) = ? `;
265
+ queryParams.push(String(filters.cellulare).trim());
266
+ }
267
+ if (filters === null || filters === void 0 ? void 0 : filters.cellute) {
268
+ query += ` AND TRIM(U.CELLUTE) = ? `;
269
+ queryParams.push(String(filters.cellute).trim());
270
+ }
271
+ if ((filters === null || filters === void 0 ? void 0 : filters.flagSuper) !== undefined) {
272
+ query += filters.flagSuper ? ` AND COALESCE(G.FLGSUPER, 0) <> 0 ` : ` AND COALESCE(G.FLGSUPER, 0) = 0 `;
154
273
  }
155
274
  query += ` ORDER BY U.CODUTE DESC `;
156
275
  let users = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, queryParams));
157
- users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase);
276
+ users = users.map(Utilities_1.RestUtilities.convertKeysToCamelCase).map(user => this.normalizeUserFlags(user));
158
277
  const usersResponse = [];
278
+ // I campi estensione sono caricati una volta per tabella (non una per utente) in query IN
279
+ // suddivise in blocchi per non superare i limiti di parametri del driver.
280
+ const extensionFieldsByUser = (options === null || options === void 0 ? void 0 : options.includeExtensionFields)
281
+ ? yield this.loadExtensionFieldsForUsers(users.map((user) => user.codiceUtente))
282
+ : undefined;
283
+ // I grant sono caricati in batch (query IN) invece che utente per utente.
284
+ const grantsByUser = (options === null || options === void 0 ? void 0 : options.includeGrants)
285
+ ? yield this.permissionService.getUsersRolesAndGrants(users.map((user) => user.codiceUtente))
286
+ : undefined;
159
287
  for (const user of users) {
160
- let userGrants = null;
288
+ let userGrants;
161
289
  if (options === null || options === void 0 ? void 0 : options.includeGrants) {
162
- userGrants = yield this.permissionService.getUserRolesAndGrants(user.codiceUtente);
290
+ userGrants = grantsByUser === null || grantsByUser === void 0 ? void 0 : grantsByUser.get(user.codiceUtente);
163
291
  }
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;
292
+ let extensionFields;
293
+ if (options === null || options === void 0 ? void 0 : options.includeExtensionFields) {
294
+ extensionFields = {};
295
+ for (const ext of (_c = this.accessiOptions.extensionFieldsOptions) !== null && _c !== void 0 ? _c : []) {
296
+ 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
297
  }
170
298
  }
171
299
  usersResponse.push({
@@ -181,6 +309,68 @@ let UserService = class UserService {
181
309
  }
182
310
  });
183
311
  }
312
+ /** Conteggio utenti con gli stessi filtri di `getUsers`, per la paginazione (header X-Total-Count). */
313
+ countUsers(filters) {
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ var _a, _b;
316
+ const conditions = [];
317
+ const params = [];
318
+ if (filters === null || filters === void 0 ? void 0 : filters.email) {
319
+ conditions.push('LOWER(U.USRNAME) = ?');
320
+ params.push(filters.email.trim().toLowerCase());
321
+ }
322
+ if (filters === null || filters === void 0 ? void 0 : filters.codiceUtente) {
323
+ conditions.push('U.CODUTE = ?');
324
+ params.push(filters.codiceUtente);
325
+ }
326
+ 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(' ')}`;
327
+ const rows = (yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, query, params, false));
328
+ const row = rows[0];
329
+ 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;
330
+ });
331
+ }
332
+ loadExtensionFieldsForUsers(codiceUtenti) {
333
+ return __awaiter(this, void 0, void 0, function* () {
334
+ var _a;
335
+ const byObjectKey = new Map();
336
+ const extensions = (_a = this.accessiOptions.extensionFieldsOptions) !== null && _a !== void 0 ? _a : [];
337
+ const uniqueCodes = Array.from(new Set(codiceUtenti));
338
+ for (const ext of extensions) {
339
+ const grouped = new Map();
340
+ for (const chunk of this.chunkArray(uniqueCodes, 500)) {
341
+ if (chunk.length === 0) {
342
+ continue;
343
+ }
344
+ const placeholders = chunk.map(() => '?').join(', ');
345
+ 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);
346
+ for (const row of rows) {
347
+ const { __joinkey } = row, rest = __rest(row, ["__joinkey"]);
348
+ const key = Number(__joinkey);
349
+ if (!Number.isFinite(key)) {
350
+ continue;
351
+ }
352
+ const bucket = grouped.get(key);
353
+ if (bucket) {
354
+ bucket.push(rest);
355
+ }
356
+ else {
357
+ grouped.set(key, [rest]);
358
+ }
359
+ }
360
+ }
361
+ byObjectKey.set(ext.objectKey, grouped);
362
+ }
363
+ return byObjectKey;
364
+ });
365
+ }
366
+ chunkArray(items, size) {
367
+ const chunks = [];
368
+ for (let index = 0; index < items.length; index += size) {
369
+ chunks.push(items.slice(index, index + size));
370
+ }
371
+ return chunks;
372
+ }
373
+ /** Cerca il codice interno per email normalizzata. Il chiamante deve gestire il caso senza righe. */
184
374
  getCodiceUtenteByEmail(email) {
185
375
  return __awaiter(this, void 0, void 0, function* () {
186
376
  try {
@@ -195,179 +385,169 @@ let UserService = class UserService {
195
385
  }
196
386
  });
197
387
  }
388
+ /** Recupera il profilo locale usato dal login, compresi filtri Accessi eventualmente presenti. */
198
389
  getUserByEmail(email) {
199
390
  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) = ?
391
+ const configColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI_CONFIG');
392
+ const utentiColumns = yield (0, optionalColumns_1.getTableColumns)(this.accessiOptions, 'UTENTI');
393
+ const query = `
394
+ SELECT
395
+ U.CODUTE AS codice_utente,
396
+ U.USRNAME AS email,
397
+ U.FLGGDPR AS flag_gdpr,
398
+ U.DATSCAPWD as data_scadenza_password,
399
+ U.STAREG AS stato_registrazione,
400
+ ${(0, optionalColumns_1.optionalColumn)(utentiColumns, 'ENABLEIA', 'U', 'enable_ia')},
401
+ C.COGNOME AS cognome,
402
+ C.NOME AS nome,
403
+ C.AVATAR AS avatar,
404
+ C.FLG2FATT AS flag_due_fattori,
405
+ C.FLGPWDLESS AS passwordless_login_enabled,
406
+ C.CODLINGUA AS codice_lingua,
407
+ C.CELLULARE AS cellulare,
408
+ C.FLGSUPER AS flag_super,
409
+ C.FLGADMINCONFIG AS flag_admin_configurator,
410
+ COALESCE(C.FLGPASSWORD, 1) AS password_login_enabled,
411
+ C.PAGDEF AS pagina_default,
412
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'CAUMOV', 'C', 'caumov')},
413
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'NUMMAC', 'C', 'nummac')},
414
+ ${(0, optionalColumns_1.optionalColumn)(configColumns, 'RAGSOCCLI', 'C', 'rag_soc_cli', false)},
415
+ ${APPLICATION_FLAG_FIELDS.map((field) => (0, optionalColumns_1.optionalColumn)(configColumns, field.column, 'C', field.alias)).join(',\n ')}
416
+ FROM UTENTI U
417
+ INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE
418
+ WHERE LOWER(U.USRNAME) = ?
222
419
  `;
223
420
  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) {
421
+ const user = utenti[0];
422
+ if (!user)
226
423
  return null;
227
- }
228
- if (utenti.length > 0 && filtriUtente.length > 0) {
229
- const user = utenti[0];
230
- const filtro = filtriUtente[0];
424
+ const filtro = (yield this.filtriService.getFiltriUser(user.codiceUtente))[0];
425
+ if (filtro) {
426
+ const filterValues = {};
231
427
  Object.entries(FiltriUtente_1.FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {
232
428
  if (key in filtro) {
233
- user[key] = filtro[key];
429
+ filterValues[key] = filtro[key];
234
430
  }
235
431
  });
432
+ Object.assign(user, filterValues);
236
433
  }
237
- return utenti.length > 0 ? utenti[0] : null;
434
+ return this.normalizeUserFlags(user);
238
435
  });
239
436
  }
240
437
  insertUserFilters(codiceUtente, filterData) {
241
438
  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();
439
+ yield this.filtriService.upsertFiltriUtente(codiceUtente, filterData);
291
440
  });
292
441
  }
442
+ /**
443
+ * Crea utente, configurazione e filtri. La registrazione pubblica resta in stato `INVIO` e non puo
444
+ * impostare privilegi, ruoli o grant; soltanto flussi backend fidati possono usare `allowPrivilegedFields`.
445
+ */
293
446
  register(registrationData, options) {
294
447
  return __awaiter(this, void 0, void 0, function* () {
295
- var _a, _b, _c;
448
+ var _a;
296
449
  try {
297
450
  const allowPrivilegedFields = (options === null || options === void 0 ? void 0 : options.allowPrivilegedFields) === true;
298
451
  const normalizedEmail = this.normalizeEmail(registrationData.email);
452
+ if (registrationData.flagDueFattori !== undefined && typeof registrationData.flagDueFattori !== 'boolean') {
453
+ throw new common_1.BadRequestException('Il flag due fattori deve essere booleano.');
454
+ }
455
+ if (registrationData.flagDueFattori && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalizedEmail)) {
456
+ throw new common_1.BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');
457
+ }
299
458
  if (!allowPrivilegedFields &&
300
459
  (registrationData.flagSuper !== undefined ||
301
460
  registrationData.flagAdminConfigurator !== undefined ||
461
+ registrationData.flagDueFattori !== undefined ||
302
462
  registrationData.roles !== undefined ||
303
463
  registrationData.permissions !== undefined)) {
304
464
  throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');
305
465
  }
466
+ yield this.validateApplicationFields(registrationData);
306
467
  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);
468
+ const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?) RETURNING CODUTE`;
469
+ // Public/local registrations keep the historic INVIO state; trusted master or SSO flows may opt into CONF.
470
+ const paramsUtenti = [normalizedEmail, (_a = options === null || options === void 0 ? void 0 : options.initialState) !== null && _a !== void 0 ? _a : StatoRegistrazione_1.StatoRegistrazione.INVIO];
471
+ // Utente e configurazione sono creati in un'unica transazione; filtri e assegnazioni restano
472
+ // fuori perché delegati a servizi dedicati.
473
+ const codiceUtente = yield Orm_1.Orm.withTransaction(this.accessiOptions.databaseOptions, (transaction) => __awaiter(this, void 0, void 0, function* () {
474
+ var _a;
475
+ const insertedUsers = yield Orm_1.Orm.transactionQuery(transaction, queryUtenti, paramsUtenti);
476
+ const insertedUser = (Array.isArray(insertedUsers) ? insertedUsers[0] : insertedUsers);
477
+ 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);
478
+ if (!newCodiceUtente) {
479
+ throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');
367
480
  }
368
- }
369
- const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
370
- yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
481
+ const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];
482
+ const utentiConfigPlaceholders = ['?', '?', '?'];
483
+ const utentiConfigParams = [newCodiceUtente, registrationData.cognome, registrationData.nome];
484
+ const optionalFields = [
485
+ {
486
+ key: 'cellulare',
487
+ dbField: 'CELLULARE',
488
+ transform: (v) => String(v),
489
+ },
490
+ {
491
+ key: 'avatar',
492
+ dbField: 'AVATAR',
493
+ transform: (v) => String(v),
494
+ },
495
+ {
496
+ key: 'flagDueFattori',
497
+ dbField: 'FLG2FATT',
498
+ transform: (v) => (v ? 1 : 0),
499
+ },
500
+ {
501
+ key: 'paginaDefault',
502
+ dbField: 'PAGDEF',
503
+ transform: (v) => String(v),
504
+ },
505
+ {
506
+ key: 'nummac',
507
+ dbField: 'NUMMAC',
508
+ transform: (v) => Number(v),
509
+ },
510
+ {
511
+ key: 'ragSocCli',
512
+ dbField: 'RAGSOCCLI',
513
+ transform: (v) => String(v),
514
+ },
515
+ {
516
+ key: 'caumov',
517
+ dbField: 'CAUMOV',
518
+ transform: (v) => String(v),
519
+ },
520
+ ];
521
+ if (allowPrivilegedFields) {
522
+ optionalFields.push({
523
+ key: 'flagSuper',
524
+ dbField: 'FLGSUPER',
525
+ transform: (v) => (v ? 1 : 0),
526
+ }, {
527
+ key: 'flagAdminConfigurator',
528
+ dbField: 'FLGADMINCONFIG',
529
+ transform: (v) => (v ? 1 : 0),
530
+ });
531
+ for (const flag of APPLICATION_FLAG_FIELDS) {
532
+ optionalFields.push({
533
+ key: flag.key,
534
+ dbField: flag.column,
535
+ transform: (v) => (v ? 1 : 0),
536
+ });
537
+ }
538
+ }
539
+ for (const field of optionalFields) {
540
+ const value = registrationData[field.key];
541
+ if (value !== undefined && value !== null) {
542
+ utentiConfigFields.push(field.dbField);
543
+ utentiConfigPlaceholders.push('?');
544
+ utentiConfigParams.push(field.transform ? field.transform(value) : value);
545
+ }
546
+ }
547
+ const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(', ')}) VALUES (${utentiConfigPlaceholders.join(', ')})`;
548
+ yield Orm_1.Orm.transactionQuery(transaction, queryUtentiConfig, utentiConfigParams);
549
+ return newCodiceUtente;
550
+ }));
371
551
  yield this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);
372
552
  if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {
373
553
  yield this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);
@@ -384,20 +564,45 @@ let UserService = class UserService {
384
564
  }
385
565
  });
386
566
  }
567
+ /**
568
+ * Aggiorna il profilo utente e i filtri. Le modifiche a stato, ruoli, grant e flag amministrativi richiedono
569
+ * `allowPrivilegedChanges`; gli array ruolo/grant passati in un flusso fidato sostituiscono le assegnazioni.
570
+ */
387
571
  updateUser(codiceUtente, user, options) {
388
572
  return __awaiter(this, void 0, void 0, function* () {
573
+ var _a, _b, _c, _d;
389
574
  try {
390
575
  if (!codiceUtente)
391
576
  throw new Error('Impossibile aggiornare senza codice utente.');
392
577
  const allowPrivilegedChanges = (options === null || options === void 0 ? void 0 : options.allowPrivilegedChanges) === true;
578
+ for (const value of [user.flagDueFattori, user.passwordlessLoginEnabled]) {
579
+ if (value !== undefined && typeof value !== 'boolean')
580
+ throw new common_1.BadRequestException('Le policy di autenticazione devono essere booleane.');
581
+ }
393
582
  if (!allowPrivilegedChanges &&
394
583
  (user.statoRegistrazione !== undefined ||
395
584
  user.flagSuper !== undefined ||
396
585
  user.flagAdminConfigurator !== undefined ||
586
+ user.passwordLoginEnabled !== undefined ||
587
+ user.passwordlessLoginEnabled !== undefined ||
588
+ user.flagDueFattori !== undefined ||
397
589
  user.roles !== undefined ||
398
590
  user.permissions !== undefined)) {
399
591
  throw new Error('Non e consentito modificare campi privilegiati.');
400
592
  }
593
+ if (user.flagDueFattori !== undefined || user.passwordlessLoginEnabled !== undefined || user.email !== undefined) {
594
+ const current = yield this.getAuthenticatedUserSnapshot(codiceUtente);
595
+ if (!current)
596
+ throw new common_1.BadRequestException('Utente non trovato.');
597
+ const twoFactor = (_a = user.flagDueFattori) !== null && _a !== void 0 ? _a : current.flagDueFattori;
598
+ const passwordless = (_b = user.passwordlessLoginEnabled) !== null && _b !== void 0 ? _b : current.passwordlessLoginEnabled;
599
+ if (passwordless && !twoFactor)
600
+ throw new common_1.BadRequestException('Il login senza password richiede il codice di accesso attivo.');
601
+ if (twoFactor && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(((_d = (_c = user.email) !== null && _c !== void 0 ? _c : current.email) !== null && _d !== void 0 ? _d : '').trim())) {
602
+ throw new common_1.BadRequestException('Per attivare i codici di accesso serve un indirizzo email valido.');
603
+ }
604
+ }
605
+ const { configColumns } = yield this.validateApplicationFields(user);
401
606
  const utentiUpdates = [];
402
607
  const utentiParams = [];
403
608
  if (user.email !== undefined) {
@@ -410,6 +615,10 @@ let UserService = class UserService {
410
615
  utentiUpdates.push('flggdpr = ?');
411
616
  utentiParams.push(user.flagGdpr);
412
617
  }
618
+ if (allowPrivilegedChanges && user.enableIa !== undefined) {
619
+ utentiUpdates.push('enableia = ?');
620
+ utentiParams.push(user.enableIa ? 1 : 0);
621
+ }
413
622
  if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {
414
623
  utentiUpdates.push('stareg = ?');
415
624
  utentiParams.push(user.statoRegistrazione);
@@ -435,7 +644,11 @@ let UserService = class UserService {
435
644
  }
436
645
  if (user.flagDueFattori !== undefined) {
437
646
  utentiConfigUpdates.push('flg2fatt = ?');
438
- utentiConfigParams.push(user.flagDueFattori);
647
+ utentiConfigParams.push(user.flagDueFattori ? 1 : 0);
648
+ }
649
+ if (user.passwordlessLoginEnabled !== undefined) {
650
+ utentiConfigUpdates.push('flgpwdless = ?');
651
+ utentiConfigParams.push(user.passwordlessLoginEnabled ? 1 : 0);
439
652
  }
440
653
  if (user.codiceLingua !== undefined) {
441
654
  utentiConfigUpdates.push('codlingua = ?');
@@ -453,6 +666,23 @@ let UserService = class UserService {
453
666
  utentiConfigUpdates.push('flgadminconfig = ?');
454
667
  utentiConfigParams.push(user.flagAdminConfigurator);
455
668
  }
669
+ if (allowPrivilegedChanges && user.caumov !== undefined) {
670
+ utentiConfigUpdates.push('caumov = ?');
671
+ utentiConfigParams.push(user.caumov);
672
+ }
673
+ if (allowPrivilegedChanges) {
674
+ for (const flag of APPLICATION_FLAG_FIELDS) {
675
+ const value = user[flag.key];
676
+ if (value !== undefined) {
677
+ utentiConfigUpdates.push(`${flag.column.toLowerCase()} = ?`);
678
+ utentiConfigParams.push(value ? 1 : 0);
679
+ }
680
+ }
681
+ }
682
+ if (allowPrivilegedChanges && user.passwordLoginEnabled !== undefined) {
683
+ utentiConfigUpdates.push('flgpassword = ?');
684
+ utentiConfigParams.push(user.passwordLoginEnabled ? 1 : 0);
685
+ }
456
686
  if (user.paginaDefault !== undefined) {
457
687
  utentiConfigUpdates.push('pagdef = ?');
458
688
  utentiConfigParams.push(user.paginaDefault);
@@ -461,7 +691,7 @@ let UserService = class UserService {
461
691
  utentiConfigUpdates.push('json_metadata = ?');
462
692
  utentiConfigParams.push(user.jsonMetadata);
463
693
  }
464
- if (user.ragSocCli !== undefined) {
694
+ if (user.ragSocCli !== undefined && (user.ragSocCli !== null || (configColumns === null || configColumns === void 0 ? void 0 : configColumns.has('RAGSOCCLI')))) {
465
695
  utentiConfigUpdates.push('ragsoccli = ?');
466
696
  utentiConfigParams.push(user.ragSocCli);
467
697
  }
@@ -470,10 +700,10 @@ let UserService = class UserService {
470
700
  utentiConfigParams.push(codiceUtente);
471
701
  yield Orm_1.Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);
472
702
  }
473
- if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {
703
+ if (allowPrivilegedChanges && Array.isArray(user.roles)) {
474
704
  yield this.permissionService.assignRolesToUser(codiceUtente, user.roles);
475
705
  }
476
- if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {
706
+ if (allowPrivilegedChanges && Array.isArray(user.permissions)) {
477
707
  yield this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);
478
708
  }
479
709
  yield this.filtriService.upsertFiltriUtente(codiceUtente, user);
@@ -485,64 +715,10 @@ let UserService = class UserService {
485
715
  }
486
716
  updateUserFilters(codiceUtente, user) {
487
717
  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
- }
718
+ yield this.filtriService.upsertFiltriUtente(codiceUtente, user);
544
719
  });
545
720
  }
721
+ /** Eliminazione logica: imposta lo stato `DELETE` senza cancellare lo storico o i collegamenti SSO. */
546
722
  deleteUser(codiceCliente) {
547
723
  return __awaiter(this, void 0, void 0, function* () {
548
724
  try {
@@ -557,6 +733,7 @@ let UserService = class UserService {
557
733
  }
558
734
  });
559
735
  }
736
+ /** Cambia esplicitamente lo stato di registrazione; usare questa API per blocco, conferma o eliminazione logica. */
560
737
  setStato(codiceCliente, statoRegistrazione) {
561
738
  return __awaiter(this, void 0, void 0, function* () {
562
739
  try {
@@ -574,15 +751,57 @@ let UserService = class UserService {
574
751
  setGdpr(codiceUtente) {
575
752
  return __awaiter(this, void 0, void 0, function* () {
576
753
  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);
754
+ return yield Orm_1.Orm.executeMultiple(this.accessiOptions.databaseOptions, [
755
+ { query: 'INSERT INTO UTENTI_GDPR (CODUTE, GDPR) VALUES (?, ?)', params: [codiceUtente, 'true'] },
756
+ { query: 'UPDATE UTENTI SET FLGGDPR = 1, DATGDPR = CURRENT_DATE WHERE CODUTE = ?', params: [codiceUtente] },
757
+ ]);
580
758
  }
581
759
  catch (error) {
582
760
  throw error;
583
761
  }
584
762
  });
585
763
  }
764
+ /**
765
+ * Forza l'invio dell'email di reset password per un utente. Operazione amministrativa.
766
+ * Richiede un servizio email configurato: altrimenti solleva ACCESSI_EMAIL_NOT_CONFIGURED.
767
+ */
768
+ forcePasswordReset(codiceUtente) {
769
+ return __awaiter(this, void 0, void 0, function* () {
770
+ var _a, _b;
771
+ (0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
772
+ const rows = yield this.getUsers({ codiceUtente });
773
+ const email = (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.utente) === null || _b === void 0 ? void 0 : _b.email;
774
+ if (typeof email !== 'string' || email.trim() === '') {
775
+ throw new common_1.NotFoundException(`Nessun utente con email per il codice ${codiceUtente}.`);
776
+ }
777
+ yield this.emailService.sendPasswordResetEmail(email);
778
+ });
779
+ }
780
+ /**
781
+ * Forza l'invio dell'email di reset a tutti gli utenti la cui password non e ancora nel formato
782
+ * moderno (`scrypt$...`), cioe' legacy grezza o `scrypt-legacy` non piu verificabile. Utile quando
783
+ * la `encryptionKey` storica e perduta. Richiede email configurata. Ritorna quanti utenti hanno
784
+ * ricevuto l'email.
785
+ */
786
+ forcePasswordResetForLegacyPasswords() {
787
+ return __awaiter(this, void 0, void 0, function* () {
788
+ (0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
789
+ const rows = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT U.CODUTE AS codice_utente, U.USRNAME AS email
790
+ FROM UTENTI U
791
+ JOIN UTENTI_PWD P ON P.CODUTE = U.CODUTE
792
+ WHERE P.PWD IS NOT NULL AND P.PWD NOT STARTING WITH 'scrypt$'`, [], false);
793
+ let sent = 0;
794
+ for (const row of rows) {
795
+ const raw = Utilities_1.RestUtilities.convertKeysToCamelCase(row);
796
+ const email = typeof raw.email === 'string' ? raw.email.trim() : '';
797
+ if (email === '')
798
+ continue;
799
+ yield this.emailService.sendPasswordResetEmail(email);
800
+ sent += 1;
801
+ }
802
+ return sent;
803
+ });
804
+ }
586
805
  };
587
806
  exports.UserService = UserService;
588
807
  exports.UserService = UserService = __decorate([