emilsoftware-utilities 2.0.0-dev.6 → 2.0.0-dev.61

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