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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/README.MD +182 -38
  2. package/dist/ContractGenerator.d.ts +4 -3
  3. package/dist/ContractGenerator.js +15 -5
  4. package/dist/ContractGenerator.js.map +1 -1
  5. package/dist/DailyFileTransport.d.ts +21 -0
  6. package/dist/DailyFileTransport.js +74 -0
  7. package/dist/DailyFileTransport.js.map +1 -0
  8. package/dist/DatabaseUpdater.js +32 -29
  9. package/dist/DatabaseUpdater.js.map +1 -1
  10. package/dist/EmilsoftwareModule.js.map +1 -1
  11. package/dist/ExecutionTimeLogger.d.ts +2 -2
  12. package/dist/ExecutionTimeLogger.js +5 -4
  13. package/dist/ExecutionTimeLogger.js.map +1 -1
  14. package/dist/Logger.d.ts +22 -11
  15. package/dist/Logger.js +132 -119
  16. package/dist/Logger.js.map +1 -1
  17. package/dist/Orm.d.ts +26 -6
  18. package/dist/Orm.js +144 -40
  19. package/dist/Orm.js.map +1 -1
  20. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  21. package/dist/Utilities.d.ts +18 -8
  22. package/dist/Utilities.js +115 -35
  23. package/dist/Utilities.js.map +1 -1
  24. package/dist/accessi-module/AccessiModule.d.ts +69 -0
  25. package/dist/accessi-module/AccessiModule.js +29 -5
  26. package/dist/accessi-module/AccessiModule.js.map +1 -1
  27. package/dist/accessi-module/Console/accessiFetch.d.ts +7 -0
  28. package/dist/accessi-module/Console/accessiFetch.js +59 -0
  29. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  30. package/dist/accessi-module/Console/console.css +618 -0
  31. package/dist/accessi-module/Console/console.d.ts +1 -0
  32. package/dist/accessi-module/Console/console.js +3101 -0
  33. package/dist/accessi-module/Console/console.js.map +1 -0
  34. package/dist/accessi-module/Console/generated/accessiApi.d.ts +542 -0
  35. package/dist/accessi-module/Console/generated/accessiApi.js +517 -0
  36. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -0
  37. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +39 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +12 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +9 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +1 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +12 -0
  44. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +9 -0
  45. package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +1 -0
  46. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +12 -0
  47. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +9 -0
  48. package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +1 -0
  49. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +12 -0
  50. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +9 -0
  51. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +1 -0
  52. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  53. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  54. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  55. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  56. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  57. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  58. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  59. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  60. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  61. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  62. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  63. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  64. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  65. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  66. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  67. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  68. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  69. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  70. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  71. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  72. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  73. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  74. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  75. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  76. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  77. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  78. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  79. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  80. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  81. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  82. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  83. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  84. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  85. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  86. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  87. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  88. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +27 -0
  89. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  90. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  91. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  92. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  93. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  94. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  95. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  96. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  97. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  98. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  99. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  100. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  101. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  102. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  103. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  104. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  105. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  106. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  107. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  108. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  109. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  110. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  111. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  112. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  113. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  114. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  115. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  116. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  117. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  118. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  119. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  120. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  121. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  122. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  123. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  124. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  125. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  126. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  127. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  128. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  129. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  130. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  131. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  132. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  133. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  134. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  135. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  136. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +12 -0
  137. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  138. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  139. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  140. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  141. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  142. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  143. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  144. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  145. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  146. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  147. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  148. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  149. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  150. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  151. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  152. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  153. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  154. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  155. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  156. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  157. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  158. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  159. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  160. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  161. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  162. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  163. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +32 -0
  164. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  165. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  166. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  167. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  168. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  169. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  170. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  171. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  172. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  173. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  174. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  175. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  176. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  177. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  178. package/dist/accessi-module/Console/generated/model/index.d.ts +93 -0
  179. package/dist/accessi-module/Console/generated/model/index.js +110 -0
  180. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  181. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  182. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  183. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  184. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +12 -0
  185. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  186. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  187. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  188. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  189. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  190. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +32 -0
  191. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  192. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  193. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  194. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  195. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  196. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  197. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  198. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  199. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  200. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  201. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  202. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  203. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  204. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  205. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  206. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  207. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  208. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  209. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  210. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  211. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  212. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  213. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  214. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +13 -0
  215. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +9 -0
  216. package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +1 -0
  217. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  218. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  219. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  220. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +13 -0
  221. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +9 -0
  222. package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +1 -0
  223. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  224. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  225. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  226. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  227. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  228. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  229. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  230. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  231. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  232. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  233. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  234. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  235. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  236. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  237. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  238. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  239. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  240. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  241. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  242. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  243. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  244. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  245. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  246. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  247. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  248. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  249. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  250. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  251. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  252. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  253. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  254. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  255. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  256. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  257. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  258. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  259. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  260. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  261. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  262. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  263. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  264. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  265. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  266. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  267. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  268. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  269. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  270. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  271. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  272. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  273. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  274. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  275. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  276. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  277. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  278. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  279. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  280. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  281. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  282. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  283. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  284. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  285. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  286. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  287. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  288. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  289. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  290. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  291. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  292. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  293. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  294. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  295. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +22 -0
  296. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  297. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  298. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  299. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  300. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  301. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  302. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  303. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  304. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  305. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  306. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  307. package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +13 -0
  308. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +9 -0
  309. package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +1 -0
  310. package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +13 -0
  311. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +9 -0
  312. package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +1 -0
  313. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  314. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  315. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  316. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  317. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  318. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  319. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  320. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  321. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  322. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +18 -0
  323. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  324. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  325. package/dist/accessi-module/Console/help.d.ts +13 -0
  326. package/dist/accessi-module/Console/help.js +348 -0
  327. package/dist/accessi-module/Console/help.js.map +1 -0
  328. package/dist/accessi-module/Console/index.html +127 -0
  329. package/dist/accessi-module/Console/openApiClient.d.ts +34 -0
  330. package/dist/accessi-module/Console/openApiClient.js +111 -0
  331. package/dist/accessi-module/Console/openApiClient.js.map +1 -0
  332. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  333. package/dist/accessi-module/Console/wiki.js +689 -0
  334. package/dist/accessi-module/Console/wiki.js.map +1 -0
  335. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +18 -0
  336. package/dist/accessi-module/Controllers/AccessiConsoleController.js +111 -0
  337. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  338. package/dist/accessi-module/Controllers/AuthController.d.ts +4 -1
  339. package/dist/accessi-module/Controllers/AuthController.js +86 -47
  340. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  341. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -3
  342. package/dist/accessi-module/Controllers/ConfiguratorController.js +9 -9
  343. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  344. package/dist/accessi-module/Controllers/EmailController.d.ts +2 -2
  345. package/dist/accessi-module/Controllers/EmailController.js +4 -2
  346. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  347. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  348. package/dist/accessi-module/Controllers/FiltriController.js +95 -5
  349. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  350. package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -1
  351. package/dist/accessi-module/Controllers/PermissionController.js +282 -13
  352. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  353. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  354. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  355. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  356. package/dist/accessi-module/Controllers/UserController.d.ts +5 -3
  357. package/dist/accessi-module/Controllers/UserController.js +65 -11
  358. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  359. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  360. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  361. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  362. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  363. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -1
  364. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  365. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +3 -0
  366. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +18 -0
  367. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -1
  368. package/dist/accessi-module/Dtos/BaseResponse.d.ts +2 -0
  369. package/dist/accessi-module/Dtos/BaseResponse.js +21 -2
  370. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  371. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +66 -0
  372. package/dist/accessi-module/Dtos/CatalogDtos.js +336 -0
  373. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  374. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -1
  375. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  376. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  377. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  378. package/dist/accessi-module/Dtos/FiltriUtente.js +4 -1
  379. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  380. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  381. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  382. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  383. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  384. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -1
  385. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -1
  386. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  387. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  388. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  389. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  390. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  391. package/dist/accessi-module/Dtos/LoginResponse.d.ts +6 -2
  392. package/dist/accessi-module/Dtos/LoginResponse.js +20 -7
  393. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  394. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  395. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  396. package/dist/accessi-module/Dtos/Permission.js +1 -0
  397. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  398. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +1 -1
  399. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +1 -0
  400. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -1
  401. package/dist/accessi-module/Dtos/RegisterRequest.js +3 -1
  402. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  403. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  404. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  405. package/dist/accessi-module/Dtos/Role.js +4 -0
  406. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  407. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  408. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -1
  409. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  410. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  411. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  412. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  413. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  414. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  415. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  416. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  417. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  418. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  419. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  420. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  421. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  422. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  423. package/dist/accessi-module/Dtos/UserDto.d.ts +7 -0
  424. package/dist/accessi-module/Dtos/UserDto.js +26 -2
  425. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  426. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  427. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -1
  428. package/dist/accessi-module/Dtos/index.d.ts +4 -0
  429. package/dist/accessi-module/Dtos/index.js +4 -0
  430. package/dist/accessi-module/Dtos/index.js.map +1 -1
  431. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +40 -5
  432. package/dist/accessi-module/Services/AuthService/AuthService.js +192 -40
  433. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  434. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  435. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  436. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  437. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  438. package/dist/accessi-module/Services/EmailService/EmailService.js +43 -22
  439. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  440. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  441. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -9
  442. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  443. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +73 -2
  444. package/dist/accessi-module/Services/PermissionService/PermissionService.js +537 -198
  445. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  446. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  447. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  448. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  449. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  450. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  451. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  452. package/dist/accessi-module/Services/UserService/UserService.d.ts +36 -5
  453. package/dist/accessi-module/Services/UserService/UserService.js +341 -161
  454. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  455. package/dist/accessi-module/Views/reset-password.html +213 -213
  456. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +46 -10
  457. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +399 -181
  458. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  459. package/dist/accessi-module/database-updates/accessiSchema.d.ts +45 -0
  460. package/dist/accessi-module/database-updates/accessiSchema.js +87 -0
  461. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  462. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  463. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  464. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  465. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +18 -8
  466. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  467. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +24 -0
  468. package/dist/accessi-module/federated-auth/FederatedAuthController.js +333 -0
  469. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  470. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +100 -0
  471. package/dist/accessi-module/federated-auth/FederatedAuthService.js +451 -0
  472. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  473. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  474. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  475. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  476. package/dist/accessi-module/index.d.ts +17 -0
  477. package/dist/accessi-module/index.js +25 -11
  478. package/dist/accessi-module/index.js.map +1 -1
  479. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  480. package/dist/accessi-module/jwt/jwt.strategy.js +16 -7
  481. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  482. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  483. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  484. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  485. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  486. package/dist/accessi-module/middleware/authenticateGen.js +63 -25
  487. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  488. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  489. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  490. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  491. package/dist/accessi-module/security/accessControl.d.ts +11 -0
  492. package/dist/accessi-module/security/accessControl.js +19 -4
  493. package/dist/accessi-module/security/accessControl.js.map +1 -1
  494. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  495. package/dist/accessi-module/security/accessiValidation.js +41 -0
  496. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  497. package/dist/accessi-module/security/authenticatedToken.d.ts +15 -1
  498. package/dist/accessi-module/security/authenticatedToken.js +31 -4
  499. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  500. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  501. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  502. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  503. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +3 -3
  504. package/dist/accessi-module/security/publicAuthRateLimit.js +30 -8
  505. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  506. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  507. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  508. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  509. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  510. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  511. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  512. package/dist/allegati-module/AllegatiModule.d.ts +11 -0
  513. package/dist/allegati-module/AllegatiModule.js +11 -1
  514. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  515. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  516. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  517. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  518. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  519. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  520. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  521. package/dist/allegati-module/Dtos/index.js.map +1 -1
  522. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  523. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  524. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  525. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  526. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  527. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  528. package/dist/allegati-module/index.js.map +1 -1
  529. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  530. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  531. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  532. package/dist/autobind.d.ts +10 -3
  533. package/dist/autobind.js +24 -9
  534. package/dist/autobind.js.map +1 -1
  535. package/dist/firebird-compat.d.ts +13 -0
  536. package/dist/firebird-compat.js +3 -2
  537. package/dist/firebird-compat.js.map +1 -1
  538. package/dist/index.js.map +1 -1
  539. package/dist/initEmilsoftwareModule.js +7 -0
  540. package/dist/initEmilsoftwareModule.js.map +1 -1
  541. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  542. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  543. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  544. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  545. package/dist/scripts/generateAccessiWiki.js +131 -0
  546. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  547. package/dist/swagger/SwaggerConfig.js +6 -3
  548. package/dist/swagger/SwaggerConfig.js.map +1 -1
  549. package/package.json +103 -83
  550. package/dist/emilsoftware-utilities-2.0.0-dev.22.tgz +0 -0
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var ServiceTokenController_1;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.ServiceTokenController = void 0;
26
+ const common_1 = require("@nestjs/common");
27
+ const swagger_1 = require("@nestjs/swagger");
28
+ const Utilities_1 = require("../../Utilities");
29
+ const Dtos_1 = require("../Dtos");
30
+ const jwt_strategy_1 = require("../jwt/jwt.strategy");
31
+ const accessControl_1 = require("../security/accessControl");
32
+ const ServiceTokenService_1 = require("../Services/ServiceTokenService/ServiceTokenService");
33
+ /**
34
+ * Gestione amministrativa dei token di servizio (macchina-a-macchina).
35
+ *
36
+ * Il segreto e mostrato una sola volta alla creazione/rotazione; le operazioni richiedono un
37
+ * superutente Accessi. Gli endpoint di utilizzo dei token non sono qui: i consumer autenticano
38
+ * con `Authorization: Bearer <token>` tramite `ServiceTokenGuard`.
39
+ */
40
+ let ServiceTokenController = ServiceTokenController_1 = class ServiceTokenController {
41
+ constructor(serviceTokenService, options) {
42
+ this.serviceTokenService = serviceTokenService;
43
+ this.options = options;
44
+ }
45
+ assertEnabled() {
46
+ var _a;
47
+ if (((_a = this.options.serviceTokens) === null || _a === void 0 ? void 0 : _a.enabled) === false) {
48
+ throw new common_1.HttpException('I token di servizio sono disabilitati in questa istanza.', 404);
49
+ }
50
+ }
51
+ requireSuperUser(req) {
52
+ this.assertEnabled();
53
+ const user = (0, accessControl_1.getAuthenticatedAccessiUser)(req);
54
+ (0, accessControl_1.ensureSuperUser)(user, 'Solo un superutente puo gestire i token di servizio.');
55
+ return user;
56
+ }
57
+ sendError(res, error) {
58
+ // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).
59
+ return Utilities_1.RestUtilities.sendErrorMessage(res, error, ServiceTokenController_1.name);
60
+ }
61
+ create(body, req, res) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ try {
64
+ const user = this.requireSuperUser(req);
65
+ const issued = yield this.serviceTokenService.issue(body, user.codiceUtente);
66
+ return Utilities_1.RestUtilities.sendBaseResponse(res, issued, 201);
67
+ }
68
+ catch (error) {
69
+ return this.sendError(res, error);
70
+ }
71
+ });
72
+ }
73
+ list(includeRevoked, req, res) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ try {
76
+ this.requireSuperUser(req);
77
+ const tokens = yield this.serviceTokenService.list(includeRevoked === 'true');
78
+ return Utilities_1.RestUtilities.sendBaseResponse(res, tokens);
79
+ }
80
+ catch (error) {
81
+ return this.sendError(res, error);
82
+ }
83
+ });
84
+ }
85
+ revoke(tokenId, req, res) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ try {
88
+ const user = this.requireSuperUser(req);
89
+ yield this.serviceTokenService.revoke(tokenId, user.codiceUtente);
90
+ return Utilities_1.RestUtilities.sendOKMessage(res, 'Token di servizio revocato con successo.');
91
+ }
92
+ catch (error) {
93
+ return this.sendError(res, error);
94
+ }
95
+ });
96
+ }
97
+ rotate(tokenId, req, res) {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ try {
100
+ const user = this.requireSuperUser(req);
101
+ const issued = yield this.serviceTokenService.rotate(tokenId, user.codiceUtente);
102
+ return Utilities_1.RestUtilities.sendBaseResponse(res, issued, 201);
103
+ }
104
+ catch (error) {
105
+ return this.sendError(res, error);
106
+ }
107
+ });
108
+ }
109
+ };
110
+ exports.ServiceTokenController = ServiceTokenController;
111
+ __decorate([
112
+ (0, common_1.Post)(),
113
+ (0, swagger_1.ApiOperation)({ summary: 'Emetti un nuovo token di servizio', operationId: 'createServiceToken' }),
114
+ (0, swagger_1.ApiBody)({ type: Dtos_1.CreateServiceTokenRequest }),
115
+ (0, swagger_1.ApiResponse)({ status: 201, description: 'Token creato; il segreto e mostrato solo in questa risposta.', type: Dtos_1.CreateServiceTokenResponse }),
116
+ (0, swagger_1.ApiResponse)({ status: 400, description: 'Dati non validi', type: Dtos_1.ErrorResponse }),
117
+ (0, swagger_1.ApiResponse)({ status: 401, description: 'Token Accessi mancante o non valido', type: Dtos_1.ErrorResponse }),
118
+ (0, swagger_1.ApiResponse)({ status: 403, description: 'Richiede un superutente', type: Dtos_1.ErrorResponse }),
119
+ __param(0, (0, common_1.Body)()),
120
+ __param(1, (0, common_1.Req)()),
121
+ __param(2, (0, common_1.Res)()),
122
+ __metadata("design:type", Function),
123
+ __metadata("design:paramtypes", [Dtos_1.CreateServiceTokenRequest, Object, Object]),
124
+ __metadata("design:returntype", Promise)
125
+ ], ServiceTokenController.prototype, "create", null);
126
+ __decorate([
127
+ (0, common_1.Get)(),
128
+ (0, swagger_1.ApiOperation)({ summary: 'Elenca i token di servizio (senza segreti)', operationId: 'getServiceTokens' }),
129
+ (0, swagger_1.ApiQuery)({ name: 'includeRevoked', required: false, description: 'Includi anche i token revocati.', type: Boolean }),
130
+ (0, swagger_1.ApiResponse)({ status: 200, description: 'Elenco dei token.', type: Dtos_1.GetServiceTokensResponse }),
131
+ (0, swagger_1.ApiResponse)({ status: 401, description: 'Token Accessi mancante o non valido', type: Dtos_1.ErrorResponse }),
132
+ (0, swagger_1.ApiResponse)({ status: 403, description: 'Richiede un superutente', type: Dtos_1.ErrorResponse }),
133
+ __param(0, (0, common_1.Query)('includeRevoked')),
134
+ __param(1, (0, common_1.Req)()),
135
+ __param(2, (0, common_1.Res)()),
136
+ __metadata("design:type", Function),
137
+ __metadata("design:paramtypes", [Object, Object, Object]),
138
+ __metadata("design:returntype", Promise)
139
+ ], ServiceTokenController.prototype, "list", null);
140
+ __decorate([
141
+ (0, common_1.Delete)(':tokenId'),
142
+ (0, swagger_1.ApiOperation)({ summary: 'Revoca un token di servizio', operationId: 'revokeServiceToken' }),
143
+ (0, swagger_1.ApiParam)({ name: 'tokenId', description: 'Identificativo del token.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' }),
144
+ (0, swagger_1.ApiResponse)({ status: 200, description: 'Token revocato.', type: Dtos_1.ErrorResponse }),
145
+ (0, swagger_1.ApiResponse)({ status: 404, description: 'Token non trovato', type: Dtos_1.ErrorResponse }),
146
+ (0, swagger_1.ApiResponse)({ status: 403, description: 'Richiede un superutente', type: Dtos_1.ErrorResponse }),
147
+ __param(0, (0, common_1.Param)('tokenId')),
148
+ __param(1, (0, common_1.Req)()),
149
+ __param(2, (0, common_1.Res)()),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [String, Object, Object]),
152
+ __metadata("design:returntype", Promise)
153
+ ], ServiceTokenController.prototype, "revoke", null);
154
+ __decorate([
155
+ (0, common_1.Post)(':tokenId/rotate'),
156
+ (0, swagger_1.ApiOperation)({ summary: 'Ruota un token di servizio', operationId: 'rotateServiceToken' }),
157
+ (0, swagger_1.ApiParam)({ name: 'tokenId', description: 'Identificativo del token da sostituire.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' }),
158
+ (0, swagger_1.ApiResponse)({ status: 201, description: 'Nuovo token emesso; il vecchio e revocato.', type: Dtos_1.CreateServiceTokenResponse }),
159
+ (0, swagger_1.ApiResponse)({ status: 404, description: 'Token non trovato', type: Dtos_1.ErrorResponse }),
160
+ (0, swagger_1.ApiResponse)({ status: 403, description: 'Richiede un superutente', type: Dtos_1.ErrorResponse }),
161
+ __param(0, (0, common_1.Param)('tokenId')),
162
+ __param(1, (0, common_1.Req)()),
163
+ __param(2, (0, common_1.Res)()),
164
+ __metadata("design:type", Function),
165
+ __metadata("design:paramtypes", [String, Object, Object]),
166
+ __metadata("design:returntype", Promise)
167
+ ], ServiceTokenController.prototype, "rotate", null);
168
+ exports.ServiceTokenController = ServiceTokenController = ServiceTokenController_1 = __decorate([
169
+ (0, swagger_1.ApiBearerAuth)(),
170
+ (0, swagger_1.ApiTags)('ServiceToken'),
171
+ (0, common_1.Controller)('accessi/service-token'),
172
+ (0, common_1.UseGuards)(jwt_strategy_1.JwtSimpleGuard),
173
+ __param(1, (0, common_1.Inject)('ACCESSI_OPTIONS')),
174
+ __metadata("design:paramtypes", [ServiceTokenService_1.ServiceTokenService, Object])
175
+ ], ServiceTokenController);
176
+ //# sourceMappingURL=ServiceTokenController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceTokenController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/ServiceTokenController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, HttpException, Inject, Param, Post, Query, Req, Res, UseGuards } from '@nestjs/common';\nimport { ApiBearerAuth, ApiBody, ApiOperation, ApiParam, ApiQuery, ApiResponse, ApiTags } from '@nestjs/swagger';\nimport { Request, Response } from 'express';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions } from '../AccessiModule';\nimport {\n CreateServiceTokenRequest,\n CreateServiceTokenResponse,\n ErrorResponse,\n GetServiceTokensResponse,\n} from '../Dtos';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport { getAuthenticatedAccessiUser, ensureSuperUser } from '../security/accessControl';\nimport { ServiceTokenService } from '../Services/ServiceTokenService/ServiceTokenService';\n\n/**\n * Gestione amministrativa dei token di servizio (macchina-a-macchina).\n *\n * Il segreto e mostrato una sola volta alla creazione/rotazione; le operazioni richiedono un\n * superutente Accessi. Gli endpoint di utilizzo dei token non sono qui: i consumer autenticano\n * con `Authorization: Bearer <token>` tramite `ServiceTokenGuard`.\n */\n@ApiBearerAuth()\n@ApiTags('ServiceToken')\n@Controller('accessi/service-token')\n@UseGuards(JwtSimpleGuard)\nexport class ServiceTokenController {\n constructor(\n private readonly serviceTokenService: ServiceTokenService,\n @Inject('ACCESSI_OPTIONS') private readonly options: AccessiOptions,\n ) {}\n\n private assertEnabled(): void {\n if (this.options.serviceTokens?.enabled === false) {\n throw new HttpException('I token di servizio sono disabilitati in questa istanza.', 404);\n }\n }\n\n private requireSuperUser(req: Request) {\n this.assertEnabled();\n const user = getAuthenticatedAccessiUser(req);\n ensureSuperUser(user, 'Solo un superutente puo gestire i token di servizio.');\n return user;\n }\n\n private sendError(res: Response, error: unknown): Response {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, ServiceTokenController.name);\n }\n\n @Post()\n @ApiOperation({ summary: 'Emetti un nuovo token di servizio', operationId: 'createServiceToken' })\n @ApiBody({ type: CreateServiceTokenRequest })\n @ApiResponse({ status: 201, description: 'Token creato; il segreto e mostrato solo in questa risposta.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 400, description: 'Dati non validi', type: ErrorResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async create(\n @Body() body: CreateServiceTokenRequest,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.issue(body, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Get()\n @ApiOperation({ summary: 'Elenca i token di servizio (senza segreti)', operationId: 'getServiceTokens' })\n @ApiQuery({ name: 'includeRevoked', required: false, description: 'Includi anche i token revocati.', type: Boolean })\n @ApiResponse({ status: 200, description: 'Elenco dei token.', type: GetServiceTokensResponse })\n @ApiResponse({ status: 401, description: 'Token Accessi mancante o non valido', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async list(\n @Query('includeRevoked') includeRevoked: string | undefined,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n this.requireSuperUser(req);\n const tokens = await this.serviceTokenService.list(includeRevoked === 'true');\n return RestUtilities.sendBaseResponse(res, tokens);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Delete(':tokenId')\n @ApiOperation({ summary: 'Revoca un token di servizio', operationId: 'revokeServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 200, description: 'Token revocato.', type: ErrorResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async revoke(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n await this.serviceTokenService.revoke(tokenId, user.codiceUtente);\n return RestUtilities.sendOKMessage(res, 'Token di servizio revocato con successo.');\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n\n @Post(':tokenId/rotate')\n @ApiOperation({ summary: 'Ruota un token di servizio', operationId: 'rotateServiceToken' })\n @ApiParam({ name: 'tokenId', description: 'Identificativo del token da sostituire.', example: 'st_3f1a2b3c4d5e6f708192a3b4c5d6e7f8' })\n @ApiResponse({ status: 201, description: 'Nuovo token emesso; il vecchio e revocato.', type: CreateServiceTokenResponse })\n @ApiResponse({ status: 404, description: 'Token non trovato', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Richiede un superutente', type: ErrorResponse })\n async rotate(\n @Param('tokenId') tokenId: string,\n @Req() req: Request,\n @Res() res: Response,\n ): Promise<Response> {\n try {\n const user = this.requireSuperUser(req);\n const issued = await this.serviceTokenService.rotate(tokenId, user.codiceUtente);\n return RestUtilities.sendBaseResponse(res, issued, 201);\n } catch (error) {\n return this.sendError(res, error);\n }\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { Request, Response } from 'express';
2
- import { AccessiOptions } from '../AccessiModule';
2
+ import type { AccessiOptions } from '../AccessiModule';
3
3
  import { PublicRegisterRequest } from '../Dtos/PublicRegisterRequest';
4
+ import { RegisterRequest } from '../Dtos/RegisterRequest';
4
5
  import { SetStatoRegistrazioneDto } from '../Dtos/SetStatoRegistrazione';
5
6
  import { UserDto } from '../Dtos/UserDto';
6
7
  import { EmailService } from '../Services/EmailService/EmailService';
@@ -12,11 +13,12 @@ export declare class UserController {
12
13
  private readonly logger;
13
14
  constructor(accessiOptions: AccessiOptions, userService: UserService, emailService: EmailService);
14
15
  private sendControllerError;
15
- serveResetPasswordPage(res: Response, token: string): Promise<void>;
16
- getUsers(request: Request, res: Response, email?: string, codiceUtente?: number, includeExtensionFields?: boolean, includeGrants?: boolean): Promise<Response<any, Record<string, any>>>;
16
+ serveResetPasswordPage(res: Response, _token: string): Promise<void>;
17
+ getUsers(request: Request, res: Response, email?: string, codiceUtente?: number, includeExtensionFields?: boolean, includeGrants?: boolean, limit?: number, offset?: number): Promise<Response<any, Record<string, any>>>;
17
18
  deleteUser(request: Request, codiceUtente: number, res: Response): Promise<Response<any, Record<string, any>>>;
18
19
  setStatoRegistrazione(request: Request, body: SetStatoRegistrazioneDto, res: Response): Promise<Response<any, Record<string, any>>>;
19
20
  register(request: Request, registrationData: PublicRegisterRequest, res: Response): Promise<Response<any, Record<string, any>>>;
21
+ createManagedUser(request: Request, registrationData: RegisterRequest, res: Response): Promise<Response<any, Record<string, any>>>;
20
22
  updateUtente(request: Request, codiceUtente: number, user: UserDto, res: Response): Promise<Response<any, Record<string, any>>>;
21
23
  setGdpr(request: Request, codiceUtente: number, res: Response): Promise<Response<any, Record<string, any>>>;
22
24
  }
@@ -32,6 +32,7 @@ const BaseResponse_1 = require("../Dtos/BaseResponse");
32
32
  const GetUsersResponse_1 = require("../Dtos/GetUsersResponse");
33
33
  const PublicRegisterRequest_1 = require("../Dtos/PublicRegisterRequest");
34
34
  const RegisterResponse_1 = require("../Dtos/RegisterResponse");
35
+ const RegisterRequest_1 = require("../Dtos/RegisterRequest");
35
36
  const SetStatoRegistrazione_1 = require("../Dtos/SetStatoRegistrazione");
36
37
  const UserDto_1 = require("../Dtos/UserDto");
37
38
  const EmailService_1 = require("../Services/EmailService/EmailService");
@@ -47,24 +48,26 @@ let UserController = UserController_1 = class UserController {
47
48
  this.logger = new Logger_1.Logger(UserController_1.name);
48
49
  }
49
50
  sendControllerError(res, error) {
50
- const status = error instanceof common_1.HttpException ? error.getStatus() : common_1.HttpStatus.INTERNAL_SERVER_ERROR;
51
- return Utilities_1.RestUtilities.sendErrorMessage(res, error, UserController_1.name, status);
51
+ // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).
52
+ return Utilities_1.RestUtilities.sendErrorMessage(res, error, UserController_1.name);
52
53
  }
53
- serveResetPasswordPage(res, token) {
54
+ serveResetPasswordPage(res, _token) {
54
55
  return __awaiter(this, void 0, void 0, function* () {
55
56
  return res.sendFile((0, path_1.join)(__dirname, '..', 'Views', 'reset-password.html'));
56
57
  });
57
58
  }
58
- getUsers(request, res, email, codiceUtente, includeExtensionFields, includeGrants) {
59
+ getUsers(request, res, email, codiceUtente, includeExtensionFields, includeGrants, limit, offset) {
59
60
  return __awaiter(this, void 0, void 0, function* () {
60
61
  try {
61
62
  (0, accessControl_1.ensureSuperUser)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono consultare gli utenti.');
62
- const filters = { email, codiceUtente };
63
+ const filters = { email, codiceUtente, limit, offset };
63
64
  const options = {
64
65
  includeExtensionFields: includeExtensionFields !== null && includeExtensionFields !== void 0 ? includeExtensionFields : true,
65
66
  includeGrants: includeGrants !== null && includeGrants !== void 0 ? includeGrants : true,
66
67
  };
67
68
  const users = yield this.userService.getUsers(filters, options);
69
+ const total = yield this.userService.countUsers({ email, codiceUtente });
70
+ res.setHeader('X-Total-Count', String(total));
68
71
  return Utilities_1.RestUtilities.sendBaseResponse(res, users);
69
72
  }
70
73
  catch (error) {
@@ -91,9 +94,9 @@ let UserController = UserController_1 = class UserController {
91
94
  (0, accessControl_1.ensureSuperUser)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono modificare lo stato di registrazione.');
92
95
  const { codiceUtente, statoRegistrazione } = body;
93
96
  if (!codiceUtente)
94
- throw new Error('Il codice utente e\' obbligatorio.');
97
+ throw new common_1.BadRequestException('Il codice utente e\' obbligatorio.');
95
98
  if (statoRegistrazione === undefined) {
96
- throw new Error('Lo stato registrazione e\' obbligatorio.');
99
+ throw new common_1.BadRequestException('Lo stato registrazione e\' obbligatorio.');
97
100
  }
98
101
  yield this.userService.setStato(codiceUtente, statoRegistrazione);
99
102
  return Utilities_1.RestUtilities.sendOKMessage(res, `Lo stato dell'utente ${codiceUtente} e' stato aggiornato a ${statoRegistrazione}.`);
@@ -105,7 +108,11 @@ let UserController = UserController_1 = class UserController {
105
108
  }
106
109
  register(request, registrationData, res) {
107
110
  return __awaiter(this, void 0, void 0, function* () {
111
+ var _a;
108
112
  try {
113
+ if (((_a = this.accessiOptions.publicRegistration) === null || _a === void 0 ? void 0 : _a.enabled) !== true) {
114
+ throw new common_1.HttpException('La registrazione pubblica e disabilitata. Un amministratore deve creare l utente.', common_1.HttpStatus.FORBIDDEN);
115
+ }
109
116
  const rateLimitDecision = (0, publicAuthRateLimit_1.checkPublicAuthRateLimit)(this.accessiOptions, 'register', request, [registrationData === null || registrationData === void 0 ? void 0 : registrationData.email]);
110
117
  if (!rateLimitDecision.allowed) {
111
118
  return (0, publicAuthRateLimit_1.sendPublicAuthRateLimitExceeded)(res, rateLimitDecision.retryAfterSeconds);
@@ -114,7 +121,7 @@ let UserController = UserController_1 = class UserController {
114
121
  allowPrivilegedFields: false,
115
122
  });
116
123
  yield this.emailService.sendPasswordResetEmail(registrationData.email);
117
- return Utilities_1.RestUtilities.sendBaseResponse(res, codiceUtente);
124
+ return Utilities_1.RestUtilities.sendBaseResponse(res, codiceUtente, common_1.HttpStatus.CREATED);
118
125
  }
119
126
  catch (error) {
120
127
  const status = error instanceof common_1.HttpException ? error.getStatus() : common_1.HttpStatus.BAD_REQUEST;
@@ -122,6 +129,19 @@ let UserController = UserController_1 = class UserController {
122
129
  }
123
130
  });
124
131
  }
132
+ createManagedUser(request, registrationData, res) {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ try {
135
+ (0, accessControl_1.ensureSuperUser)((0, accessControl_1.getAuthenticatedAccessiUser)(request), 'Solo gli amministratori possono creare utenti.');
136
+ const codiceUtente = yield this.userService.register(registrationData, { allowPrivilegedFields: true });
137
+ yield this.emailService.sendPasswordResetEmail(registrationData.email, registrationData.htmlMail);
138
+ return Utilities_1.RestUtilities.sendBaseResponse(res, codiceUtente, common_1.HttpStatus.CREATED);
139
+ }
140
+ catch (error) {
141
+ return this.sendControllerError(res, error);
142
+ }
143
+ });
144
+ }
125
145
  updateUtente(request, codiceUtente, user, res) {
126
146
  return __awaiter(this, void 0, void 0, function* () {
127
147
  try {
@@ -134,7 +154,7 @@ let UserController = UserController_1 = class UserController {
134
154
  (0, accessControl_1.ensureSelfOrSuperUser)(authenticatedUser, codiceUtente, 'Puoi modificare solo il tuo profilo.');
135
155
  }
136
156
  if (user.codiceUtente !== undefined && user.codiceUtente !== codiceUtente) {
137
- throw new Error('Il codice utente nel body non coincide con quello del path.');
157
+ throw new common_1.BadRequestException('Il codice utente nel body non coincide con quello del path.');
138
158
  }
139
159
  yield this.userService.updateUser(codiceUtente, user, {
140
160
  allowPrivilegedChanges: authenticatedUser.flagSuper,
@@ -214,6 +234,18 @@ __decorate([
214
234
  description: 'Includi permessi',
215
235
  type: Boolean,
216
236
  }),
237
+ (0, swagger_1.ApiQuery)({
238
+ name: 'limit',
239
+ required: false,
240
+ description: 'Numero massimo di utenti restituiti (1-1000). Omesso = tutti.',
241
+ type: Number,
242
+ }),
243
+ (0, swagger_1.ApiQuery)({
244
+ name: 'offset',
245
+ required: false,
246
+ description: 'Numero di utenti da saltare (paginazione).',
247
+ type: Number,
248
+ }),
217
249
  (0, swagger_1.ApiBearerAuth)(),
218
250
  (0, common_1.UseGuards)(jwt_strategy_1.JwtSimpleGuard),
219
251
  (0, common_1.Get)('get-users'),
@@ -223,8 +255,10 @@ __decorate([
223
255
  __param(3, (0, common_1.Query)('codiceUtente', new common_1.ParseIntPipe({ optional: true }))),
224
256
  __param(4, (0, common_1.Query)('includeExtensionFields', new common_1.ParseBoolPipe({ optional: true }))),
225
257
  __param(5, (0, common_1.Query)('includeGrants', new common_1.ParseBoolPipe({ optional: true }))),
258
+ __param(6, (0, common_1.Query)('limit', new common_1.ParseIntPipe({ optional: true }))),
259
+ __param(7, (0, common_1.Query)('offset', new common_1.ParseIntPipe({ optional: true }))),
226
260
  __metadata("design:type", Function),
227
- __metadata("design:paramtypes", [Object, Object, String, Number, Boolean, Boolean]),
261
+ __metadata("design:paramtypes", [Object, Object, String, Number, Boolean, Boolean, Number, Number]),
228
262
  __metadata("design:returntype", Promise)
229
263
  ], UserController.prototype, "getUsers", null);
230
264
  __decorate([
@@ -290,6 +324,7 @@ __decorate([
290
324
  __decorate([
291
325
  (0, swagger_1.ApiOperation)({
292
326
  summary: 'Registra un nuovo utente',
327
+ description: 'Disponibile soltanto quando publicRegistration.enabled e true. Per utenti SSO usare il provisioning master nel tag Federated authentication.',
293
328
  operationId: 'register',
294
329
  }),
295
330
  (0, swagger_1.ApiBody)({
@@ -318,6 +353,20 @@ __decorate([
318
353
  __metadata("design:paramtypes", [Object, PublicRegisterRequest_1.PublicRegisterRequest, Object]),
319
354
  __metadata("design:returntype", Promise)
320
355
  ], UserController.prototype, "register", null);
356
+ __decorate([
357
+ (0, swagger_1.ApiOperation)({ summary: 'Crea un utente locale da amministrazione', operationId: 'createManagedUser', description: 'Riservato a superutente. Crea un utente in attesa di impostazione password e invia la mail di reset.' }),
358
+ (0, swagger_1.ApiBody)({ type: RegisterRequest_1.RegisterRequest }),
359
+ (0, swagger_1.ApiCreatedResponse)({ type: RegisterResponse_1.RegisterResponse }),
360
+ (0, swagger_1.ApiBearerAuth)(),
361
+ (0, common_1.UseGuards)(jwt_strategy_1.JwtSimpleGuard),
362
+ (0, common_1.Post)('create-managed-user'),
363
+ __param(0, (0, common_1.Req)()),
364
+ __param(1, (0, common_1.Body)()),
365
+ __param(2, (0, common_1.Res)()),
366
+ __metadata("design:type", Function),
367
+ __metadata("design:paramtypes", [Object, RegisterRequest_1.RegisterRequest, Object]),
368
+ __metadata("design:returntype", Promise)
369
+ ], UserController.prototype, "createManagedUser", null);
321
370
  __decorate([
322
371
  (0, swagger_1.ApiOperation)({
323
372
  summary: 'Aggiorna un utente esistente',
@@ -382,7 +431,12 @@ __decorate([
382
431
  ], UserController.prototype, "setGdpr", null);
383
432
  exports.UserController = UserController = UserController_1 = __decorate([
384
433
  (0, swagger_1.ApiTags)('User'),
385
- (0, common_1.Controller)('accessi/user'),
434
+ (0, common_1.Controller)('accessi/user')
435
+ /**
436
+ * Gestione utenti: la registrazione pubblica e opt-in, mentre creazione, stato e profili privilegiati
437
+ * richiedono un superutente Accessi. Le API restituiscono sempre il wrapper `BaseResponse` storico.
438
+ */
439
+ ,
386
440
  __param(0, (0, common_1.Inject)('ACCESSI_OPTIONS')),
387
441
  __metadata("design:paramtypes", [Object, UserService_1.UserService,
388
442
  EmailService_1.EmailService])
@@ -1 +1 @@
1
- {"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/UserController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAkBwB;AAExB,6CASyB;AACzB,+BAA4B;AAC5B,yCAAsC;AACtC,+CAAgD;AAEhD,uDAAqE;AACrE,+DAA4D;AAC5D,yEAAsE;AACtE,+DAA4D;AAC5D,yEAAyE;AACzE,6CAA0C;AAC1C,wEAAqE;AACrE,qEAAkE;AAClE,sDAAqD;AACrD,yEAGyC;AACzC,6DAKmC;AAI5B,IAAM,cAAc,sBAApB,MAAM,cAAc;IAGzB,YAC6B,cAA+C,EACzD,WAAwB,EACxB,YAA0B;QAFC,mBAAc,GAAd,cAAc,CAAgB;QACzD,gBAAW,GAAX,WAAW,CAAa;QACxB,iBAAY,GAAZ,YAAY,CAAc;QAL5B,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IAMvD,CAAC;IAEI,mBAAmB,CAAC,GAAa,EAAE,KAAc;QACvD,MAAM,MAAM,GACV,KAAK,YAAY,sBAAa,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,mBAAU,CAAC,qBAAqB,CAAC;QACxF,OAAO,yBAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IAYK,sBAAsB,CAAQ,GAAa,EAAkB,KAAa;;YAC9E,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7E,CAAC;KAAA;IAyCK,QAAQ,CACL,OAAgB,EAChB,GAAa,EACJ,KAAc,EAC+B,YAAqB,EAElF,sBAAgC,EAEhC,aAAuB;;YAEvB,IAAI,CAAC;gBACH,IAAA,+BAAe,EACb,IAAA,2CAA2B,EAAC,OAAO,CAAC,EACpC,wDAAwD,CACzD,CAAC;gBAEF,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG;oBACd,sBAAsB,EAAE,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,IAAI;oBACtD,aAAa,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,IAAI;iBACrC,CAAC;gBAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChE,OAAO,yBAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;IAuBK,UAAU,CACP,OAAgB,EACc,YAAoB,EAClD,GAAa;;YAEpB,IAAI,CAAC;gBACH,IAAA,+BAAe,EACb,IAAA,2CAA2B,EAAC,OAAO,CAAC,EACpC,mDAAmD,CACpD,CAAC;gBAEF,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAChD,OAAO,yBAAa,CAAC,aAAa,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;YACvF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;IAyBK,qBAAqB,CAClB,OAAgB,EACf,IAA8B,EAC/B,GAAa;;YAEpB,IAAI,CAAC;gBACH,IAAA,+BAAe,EACb,IAAA,2CAA2B,EAAC,OAAO,CAAC,EACpC,uEAAuE,CACxE,CAAC;gBAEF,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;gBAClD,IAAI,CAAC,YAAY;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACzE,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACrC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,CAAC;gBAED,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBAClE,OAAO,yBAAa,CAAC,aAAa,CAChC,GAAG,EACH,wBAAwB,YAAY,0BAA0B,kBAAkB,GAAG,CACpF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;IA0BK,QAAQ,CACL,OAAgB,EACf,gBAAuC,EACxC,GAAa;;YAEpB,IAAI,CAAC;gBACH,MAAM,iBAAiB,GAAG,IAAA,8CAAwB,EAChD,IAAI,CAAC,cAAc,EACnB,UAAU,EACV,OAAO,EACP,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,CAAC,CAC1B,CAAC;gBACF,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBAC/B,OAAO,IAAA,qDAA+B,EAAC,GAAG,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;gBACnF,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE;oBACrE,qBAAqB,EAAE,KAAK;iBAC7B,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,yBAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GACV,KAAK,YAAY,sBAAa,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,mBAAU,CAAC,WAAW,CAAC;gBAC9E,OAAO,yBAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,gBAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;KAAA;IA2BK,YAAY,CACT,OAAgB,EACc,YAAoB,EACjD,IAAa,EACd,GAAa;;YAEpB,IAAI,CAAC;gBACH,MAAM,iBAAiB,GAAG,IAAA,2CAA2B,EAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM,kBAAkB,GAAG,IAAA,wCAAwB,EAAC,IAAI,CAAC,CAAC;gBAE1D,IAAI,kBAAkB,EAAE,CAAC;oBACvB,IAAA,+BAAe,EACb,iBAAiB,EACjB,iFAAiF,CAClF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAA,qCAAqB,EACnB,iBAAiB,EACjB,YAAY,EACZ,sCAAsC,CACvC,CAAC;gBACJ,CAAC;gBAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;oBAC1E,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBACjF,CAAC;gBAED,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE;oBACpD,sBAAsB,EAAE,iBAAiB,CAAC,SAAS;iBACpD,CAAC,CAAC;gBAEH,OAAO,yBAAa,CAAC,aAAa,CAChC,GAAG,EACH,YAAY,YAAY,oCAAoC,CAC7D,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;IAsBK,OAAO,CACJ,OAAgB,EACc,YAAoB,EAClD,GAAa;;YAEpB,IAAI,CAAC;gBACH,IAAA,qCAAqB,EACnB,IAAA,2CAA2B,EAAC,OAAO,CAAC,EACpC,YAAY,EACZ,6CAA6C,CAC9C,CAAC;gBAEF,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC7C,OAAO,yBAAa,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,YAAY,wBAAwB,CAAC,CAAC;YAC5F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAvVY,wCAAc;AAyBnB;IAVL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,mCAAmC;QAC5C,WAAW,EAAE,4BAA4B;KAC1C,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,YAAG,EAAC,uBAAuB,CAAC;IACC,WAAA,IAAA,YAAG,GAAE,CAAA;IAAiB,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;4DAEjE;AAyCK;IAvCL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,UAAU;KACxB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,mCAAgB;KACvB,CAAC;IACD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IACxF,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,4BAA4B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC5F,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC3F,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE,MAAM;KACb,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,MAAM;KACb,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,OAAO;KACd,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,OAAO;KACd,CAAC;IACD,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAc,CAAC;IACzB,IAAA,YAAG,EAAC,WAAW,CAAC;IAEd,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;IACd,WAAA,IAAA,cAAK,EAAC,cAAc,EAAE,IAAI,qBAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3D,WAAA,IAAA,cAAK,EAAC,wBAAwB,EAAE,IAAI,sBAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEtE,WAAA,IAAA,cAAK,EAAC,eAAe,EAAE,IAAI,sBAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;;;;8CAqB/D;AAuBK;IArBL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,qEAAqE;KACnF,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,gDAAgD;QAC7D,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,+BAA+B,EAAE,IAAI,EAAE,6BAAc,EAAE,CAAC;IAChG,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,4BAAa;KACpB,CAAC;IACD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC3F,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAc,CAAC;IACzB,IAAA,eAAM,EAAC,2BAA2B,CAAC;IAEjC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,cAAc,EAAE,qBAAY,CAAC,CAAA;IACnC,WAAA,IAAA,YAAG,GAAE,CAAA;;;;gDAaP;AAyBK;IAvBL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gDAAgD;QACzD,WAAW,EAAE,uBAAuB;KACrC,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,6BAAc;KACrB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,4BAAa;KACpB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,4BAAa;KACpB,CAAC;IACD,IAAA,iBAAO,EAAC,EAAE,IAAI,EAAE,gDAAwB,EAAE,CAAC;IAC3C,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAc,CAAC;IACzB,IAAA,aAAI,EAAC,WAAW,CAAC;IAEf,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;;6CADQ,gDAAwB;;2DAuBvC;AA0BK;IAxBL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,0BAA0B;QACnC,WAAW,EAAE,UAAU;KACxB,CAAC;IACD,IAAA,iBAAO,EAAC;QACP,IAAI,EAAE,6CAAqB;QAC3B,WAAW,EAAE,iDAAiD;KAC/D,CAAC;IACD,IAAA,4BAAkB,EAAC;QAClB,WAAW,EACT,kGAAkG;QACpG,IAAI,EAAE,mCAAgB;KACvB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,mBAAU,CAAC,WAAW;QAC9B,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,4BAAa;KACpB,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,mBAAU,CAAC,qBAAqB;QACxC,WAAW,EAAE,sEAAsE;QACnF,IAAI,EAAE,4BAAa;KACpB,CAAC;IACD,IAAA,aAAI,EAAC,UAAU,CAAC;IAEd,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;;6CADoB,6CAAqB;;8CAyBhD;AA2BK;IAzBL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,cAAc;KAC5B,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,iDAAiD;QAC9D,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,iBAAO,EAAC;QACP,IAAI,EAAE,iBAAO;QACb,WAAW,EAAE,6BAA6B;KAC3C,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,mBAAU,CAAC,EAAE;QACrB,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,6BAAc;KACrB,CAAC;IACD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC3F,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,4BAA4B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC5F,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC3F,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAc,CAAC;IACzB,IAAA,YAAG,EAAC,2BAA2B,CAAC;IAE9B,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,cAAc,EAAE,qBAAY,CAAC,CAAA;IACnC,WAAA,IAAA,aAAI,GAAE,CAAA;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;;qDADQ,iBAAO;;kDAmCtB;AAsBK;IApBL,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,wCAAwC;QACjD,WAAW,EAAE,SAAS;KACvB,CAAC;IACD,IAAA,kBAAQ,EAAC;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uDAAuD;QACpE,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,6BAAc;KACrB,CAAC;IACD,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IACxF,IAAA,qBAAW,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,4BAA4B,EAAE,IAAI,EAAE,4BAAa,EAAE,CAAC;IAC5F,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,6BAAc,CAAC;IACzB,IAAA,cAAK,EAAC,wBAAwB,CAAC;IAE7B,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,cAAc,EAAE,qBAAY,CAAC,CAAA;IACnC,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAcP;yBAtVU,cAAc;IAF1B,IAAA,iBAAO,EAAC,MAAM,CAAC;IACf,IAAA,mBAAU,EAAC,cAAc,CAAC;IAKtB,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CACI,yBAAW;QACV,2BAAY;GANlC,cAAc,CAuV1B","sourcesContent":["import {\n Body,\n Controller,\n Delete,\n Get,\n HttpException,\n HttpStatus,\n Param,\n ParseBoolPipe,\n ParseIntPipe,\n Patch,\n Post,\n Put,\n Query,\n Inject,\n Req,\n Res,\n UseGuards,\n} from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport {\n ApiBearerAuth,\n ApiBody,\n ApiCreatedResponse,\n ApiOperation,\n ApiParam,\n ApiQuery,\n ApiResponse,\n ApiTags,\n} from '@nestjs/swagger';\nimport { join } from 'path';\nimport { Logger } from '../../Logger';\nimport { RestUtilities } from '../../Utilities';\nimport { AccessiOptions } from '../AccessiModule';\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\nimport { GetUsersResponse } from '../Dtos/GetUsersResponse';\nimport { PublicRegisterRequest } from '../Dtos/PublicRegisterRequest';\nimport { RegisterResponse } from '../Dtos/RegisterResponse';\nimport { SetStatoRegistrazioneDto } from '../Dtos/SetStatoRegistrazione';\nimport { UserDto } from '../Dtos/UserDto';\nimport { EmailService } from '../Services/EmailService/EmailService';\nimport { UserService } from '../Services/UserService/UserService';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport {\n checkPublicAuthRateLimit,\n sendPublicAuthRateLimitExceeded,\n} from '../security/publicAuthRateLimit';\nimport {\n ensureSelfOrSuperUser,\n ensureSuperUser,\n getAuthenticatedAccessiUser,\n hasPrivilegedUserChanges,\n} from '../security/accessControl';\n\n@ApiTags('User')\n@Controller('accessi/user')\nexport class UserController {\n private readonly logger = new Logger(UserController.name);\n\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly userService: UserService,\n private readonly emailService: EmailService,\n ) {}\n\n private sendControllerError(res: Response, error: unknown) {\n const status =\n error instanceof HttpException ? error.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR;\n return RestUtilities.sendErrorMessage(res, error, UserController.name, status);\n }\n\n @ApiOperation({\n summary: 'Serve la pagina di reset password',\n operationId: 'serveResetPasswordPageUser',\n })\n @ApiParam({\n name: 'token',\n description: 'Token per il reset della password',\n required: true,\n })\n @Get('reset-password/:token')\n async serveResetPasswordPage(@Res() res: Response, @Param('token') token: string) {\n return res.sendFile(join(__dirname, '..', 'Views', 'reset-password.html'));\n }\n\n @ApiOperation({\n summary: 'Recupera la lista degli utenti',\n operationId: 'getUsers',\n })\n @ApiResponse({\n status: 200,\n description: 'Lista utenti recuperata con successo',\n type: GetUsersResponse,\n })\n @ApiResponse({ status: 401, description: 'Credenziali non valide', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiQuery({\n name: 'email',\n required: false,\n description: \"Email dell'utente da cercare\",\n type: String,\n })\n @ApiQuery({\n name: 'codiceUtente',\n required: false,\n description: \"Codice dell'utente da cercare\",\n type: Number,\n })\n @ApiQuery({\n name: 'includeExtensionFields',\n required: false,\n description: 'Includi extension fields',\n type: Boolean,\n })\n @ApiQuery({\n name: 'includeGrants',\n required: false,\n description: 'Includi permessi',\n type: Boolean,\n })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Get('get-users')\n async getUsers(\n @Req() request: Request,\n @Res() res: Response,\n @Query('email') email?: string,\n @Query('codiceUtente', new ParseIntPipe({ optional: true })) codiceUtente?: number,\n @Query('includeExtensionFields', new ParseBoolPipe({ optional: true }))\n includeExtensionFields?: boolean,\n @Query('includeGrants', new ParseBoolPipe({ optional: true }))\n includeGrants?: boolean,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono consultare gli utenti.',\n );\n\n const filters = { email, codiceUtente };\n const options = {\n includeExtensionFields: includeExtensionFields ?? true,\n includeGrants: includeGrants ?? true,\n };\n\n const users = await this.userService.getUsers(filters, options);\n return RestUtilities.sendBaseResponse(res, users);\n } catch (error) {\n this.logger.error('Errore durante il recupero degli utenti: ', error);\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Elimina un utente',\n operationId: 'deleteUser',\n description: 'Imposta lo stato di un utente a eliminato senza rimuovere i record.',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da eliminare\",\n required: true,\n example: 123,\n })\n @ApiResponse({ status: 200, description: 'Utente eliminato con successo', type: ActionResponse })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Delete('delete-user/:codiceUtente')\n async deleteUser(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono eliminare utenti.',\n );\n\n await this.userService.deleteUser(codiceUtente);\n return RestUtilities.sendOKMessage(res, \"L'utente e' stato eliminato con successo.\");\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta lo stato di registrazione di un utente',\n operationId: 'setStatoRegistrazione',\n })\n @ApiResponse({\n status: 200,\n description: 'Stato registrazione aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: 500,\n description: 'Errore interno del server',\n type: ErrorResponse,\n })\n @ApiBody({ type: SetStatoRegistrazioneDto })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('set-stato')\n async setStatoRegistrazione(\n @Req() request: Request,\n @Body() body: SetStatoRegistrazioneDto,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono modificare lo stato di registrazione.',\n );\n\n const { codiceUtente, statoRegistrazione } = body;\n if (!codiceUtente) throw new Error('Il codice utente e\\' obbligatorio.');\n if (statoRegistrazione === undefined) {\n throw new Error('Lo stato registrazione e\\' obbligatorio.');\n }\n\n await this.userService.setStato(codiceUtente, statoRegistrazione);\n return RestUtilities.sendOKMessage(\n res,\n `Lo stato dell'utente ${codiceUtente} e' stato aggiornato a ${statoRegistrazione}.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Registra un nuovo utente',\n operationId: 'register',\n })\n @ApiBody({\n type: PublicRegisterRequest,\n description: \"Dati necessari per la registrazione dell'utente\",\n })\n @ApiCreatedResponse({\n description:\n 'Utente registrato con successo. Restituisce il codice utente e invia una mail di reset password.',\n type: RegisterResponse,\n })\n @ApiResponse({\n status: HttpStatus.BAD_REQUEST,\n description: 'Errore nella registrazione.',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: HttpStatus.INTERNAL_SERVER_ERROR,\n description: 'Errore interno del server durante la registrazione o l\\'invio email.',\n type: ErrorResponse,\n })\n @Post('register')\n async register(\n @Req() request: Request,\n @Body() registrationData: PublicRegisterRequest,\n @Res() res: Response,\n ) {\n try {\n const rateLimitDecision = checkPublicAuthRateLimit(\n this.accessiOptions,\n 'register',\n request,\n [registrationData?.email],\n );\n if (!rateLimitDecision.allowed) {\n return sendPublicAuthRateLimitExceeded(res, rateLimitDecision.retryAfterSeconds);\n }\n\n const codiceUtente = await this.userService.register(registrationData, {\n allowPrivilegedFields: false,\n });\n\n await this.emailService.sendPasswordResetEmail(registrationData.email);\n return RestUtilities.sendBaseResponse(res, codiceUtente);\n } catch (error) {\n const status =\n error instanceof HttpException ? error.getStatus() : HttpStatus.BAD_REQUEST;\n return RestUtilities.sendErrorMessage(res, error, UserController.name, status);\n }\n }\n\n @ApiOperation({\n summary: 'Aggiorna un utente esistente',\n operationId: 'updateUtente',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da aggiornare\",\n required: true,\n example: 123,\n })\n @ApiBody({\n type: UserDto,\n description: \"Dati aggiornati dell'utente\",\n })\n @ApiResponse({\n status: HttpStatus.OK,\n description: 'Utente aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: \"Errore nell'aggiornamento\", type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Put('update-user/:codiceUtente')\n async updateUtente(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() user: UserDto,\n @Res() res: Response,\n ) {\n try {\n const authenticatedUser = getAuthenticatedAccessiUser(request);\n const isPrivilegedUpdate = hasPrivilegedUserChanges(user);\n\n if (isPrivilegedUpdate) {\n ensureSuperUser(\n authenticatedUser,\n 'Solo gli amministratori possono modificare ruoli, permessi o flag privilegiati.',\n );\n } else {\n ensureSelfOrSuperUser(\n authenticatedUser,\n codiceUtente,\n 'Puoi modificare solo il tuo profilo.',\n );\n }\n\n if (user.codiceUtente !== undefined && user.codiceUtente !== codiceUtente) {\n throw new Error('Il codice utente nel body non coincide con quello del path.');\n }\n\n await this.userService.updateUser(codiceUtente, user, {\n allowPrivilegedChanges: authenticatedUser.flagSuper,\n });\n\n return RestUtilities.sendOKMessage(\n res,\n `L'utente ${codiceUtente} e' stato aggiornato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta il consenso GDPR per un utente',\n operationId: 'setGdpr',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente che accetta il GDPR\",\n required: true,\n example: 123,\n })\n @ApiResponse({\n status: 200,\n description: 'Consenso GDPR impostato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: 'Errore nella richiesta', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Patch('set-gdpr/:codiceUtente')\n async setGdpr(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSelfOrSuperUser(\n getAuthenticatedAccessiUser(request),\n codiceUtente,\n 'Puoi impostare il GDPR solo sul tuo utente.',\n );\n\n await this.userService.setGdpr(codiceUtente);\n return RestUtilities.sendOKMessage(res, `L'utente ${codiceUtente} ha accettato il GDPR.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/UserController.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n BadRequestException,\r\n Body,\r\n Controller,\r\n Delete,\r\n Get,\r\n HttpException,\r\n HttpStatus,\r\n Param,\r\n ParseBoolPipe,\r\n ParseIntPipe,\r\n Patch,\r\n Post,\r\n Put,\r\n Query,\r\n Inject,\r\n Req,\r\n Res,\r\n UseGuards,\r\n} from '@nestjs/common';\r\nimport { Request, Response } from 'express';\r\nimport {\r\n ApiBearerAuth,\r\n ApiBody,\r\n ApiCreatedResponse,\r\n ApiOperation,\r\n ApiParam,\r\n ApiQuery,\r\n ApiResponse,\r\n ApiTags,\r\n} from '@nestjs/swagger';\r\nimport { join } from 'path';\r\nimport { Logger } from '../../Logger';\r\nimport { RestUtilities } from '../../Utilities';\r\nimport type { AccessiOptions } from '../AccessiModule';\r\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\r\nimport { GetUsersResponse } from '../Dtos/GetUsersResponse';\r\nimport { PublicRegisterRequest } from '../Dtos/PublicRegisterRequest';\r\nimport { RegisterResponse } from '../Dtos/RegisterResponse';\r\nimport { RegisterRequest } from '../Dtos/RegisterRequest';\r\nimport { SetStatoRegistrazioneDto } from '../Dtos/SetStatoRegistrazione';\r\nimport { UserDto } from '../Dtos/UserDto';\r\nimport { EmailService } from '../Services/EmailService/EmailService';\r\nimport { UserService } from '../Services/UserService/UserService';\r\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\r\nimport {\r\n checkPublicAuthRateLimit,\r\n sendPublicAuthRateLimitExceeded,\r\n} from '../security/publicAuthRateLimit';\r\nimport {\r\n ensureSelfOrSuperUser,\r\n ensureSuperUser,\r\n getAuthenticatedAccessiUser,\r\n hasPrivilegedUserChanges,\r\n} from '../security/accessControl';\r\n\r\n@ApiTags('User')\r\n@Controller('accessi/user')\r\n/**\r\n * Gestione utenti: la registrazione pubblica e opt-in, mentre creazione, stato e profili privilegiati\r\n * richiedono un superutente Accessi. Le API restituiscono sempre il wrapper `BaseResponse` storico.\r\n */\r\nexport class UserController {\r\n private readonly logger = new Logger(UserController.name);\r\n\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n private readonly userService: UserService,\r\n private readonly emailService: EmailService,\r\n ) {}\r\n\r\n private sendControllerError(res: Response, error: unknown) {\r\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\r\n return RestUtilities.sendErrorMessage(res, error, UserController.name);\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Serve la pagina di reset password',\r\n operationId: 'serveResetPasswordPageUser',\r\n })\r\n @ApiParam({\r\n name: 'token',\r\n description: 'Token per il reset della password',\r\n required: true,\r\n })\r\n @Get('reset-password/:token')\r\n async serveResetPasswordPage(@Res() res: Response, @Param('token') _token: string) {\r\n return res.sendFile(join(__dirname, '..', 'Views', 'reset-password.html'));\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Recupera la lista degli utenti',\r\n operationId: 'getUsers',\r\n })\r\n @ApiResponse({\r\n status: 200,\r\n description: 'Lista utenti recuperata con successo',\r\n type: GetUsersResponse,\r\n })\r\n @ApiResponse({ status: 401, description: 'Credenziali non valide', type: ErrorResponse })\r\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\r\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\r\n @ApiQuery({\r\n name: 'email',\r\n required: false,\r\n description: \"Email dell'utente da cercare\",\r\n type: String,\r\n })\r\n @ApiQuery({\r\n name: 'codiceUtente',\r\n required: false,\r\n description: \"Codice dell'utente da cercare\",\r\n type: Number,\r\n })\r\n @ApiQuery({\r\n name: 'includeExtensionFields',\r\n required: false,\r\n description: 'Includi extension fields',\r\n type: Boolean,\r\n })\r\n @ApiQuery({\r\n name: 'includeGrants',\r\n required: false,\r\n description: 'Includi permessi',\r\n type: Boolean,\r\n })\r\n @ApiQuery({\r\n name: 'limit',\r\n required: false,\r\n description: 'Numero massimo di utenti restituiti (1-1000). Omesso = tutti.',\r\n type: Number,\r\n })\r\n @ApiQuery({\r\n name: 'offset',\r\n required: false,\r\n description: 'Numero di utenti da saltare (paginazione).',\r\n type: Number,\r\n })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Get('get-users')\r\n async getUsers(\r\n @Req() request: Request,\r\n @Res() res: Response,\r\n @Query('email') email?: string,\r\n @Query('codiceUtente', new ParseIntPipe({ optional: true })) codiceUtente?: number,\r\n @Query('includeExtensionFields', new ParseBoolPipe({ optional: true }))\r\n includeExtensionFields?: boolean,\r\n @Query('includeGrants', new ParseBoolPipe({ optional: true }))\r\n includeGrants?: boolean,\r\n @Query('limit', new ParseIntPipe({ optional: true })) limit?: number,\r\n @Query('offset', new ParseIntPipe({ optional: true })) offset?: number,\r\n ) {\r\n try {\r\n ensureSuperUser(\r\n getAuthenticatedAccessiUser(request),\r\n 'Solo gli amministratori possono consultare gli utenti.',\r\n );\r\n\r\n const filters = { email, codiceUtente, limit, offset };\r\n const options = {\r\n includeExtensionFields: includeExtensionFields ?? true,\r\n includeGrants: includeGrants ?? true,\r\n };\r\n\r\n const users = await this.userService.getUsers(filters, options);\r\n const total = await this.userService.countUsers({ email, codiceUtente });\r\n res.setHeader('X-Total-Count', String(total));\r\n return RestUtilities.sendBaseResponse(res, users);\r\n } catch (error) {\r\n this.logger.error('Errore durante il recupero degli utenti: ', error);\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Elimina un utente',\r\n operationId: 'deleteUser',\r\n description: 'Imposta lo stato di un utente a eliminato senza rimuovere i record.',\r\n })\r\n @ApiParam({\r\n name: 'codiceUtente',\r\n description: \"Codice identificativo dell'utente da eliminare\",\r\n required: true,\r\n example: 123,\r\n })\r\n @ApiResponse({ status: 200, description: 'Utente eliminato con successo', type: ActionResponse })\r\n @ApiResponse({\r\n status: 400,\r\n description: 'Errore nei parametri della richiesta',\r\n type: ErrorResponse,\r\n })\r\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Delete('delete-user/:codiceUtente')\r\n async deleteUser(\r\n @Req() request: Request,\r\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\r\n @Res() res: Response,\r\n ) {\r\n try {\r\n ensureSuperUser(\r\n getAuthenticatedAccessiUser(request),\r\n 'Solo gli amministratori possono eliminare utenti.',\r\n );\r\n\r\n await this.userService.deleteUser(codiceUtente);\r\n return RestUtilities.sendOKMessage(res, \"L'utente e' stato eliminato con successo.\");\r\n } catch (error) {\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Imposta lo stato di registrazione di un utente',\r\n operationId: 'setStatoRegistrazione',\r\n })\r\n @ApiResponse({\r\n status: 200,\r\n description: 'Stato registrazione aggiornato con successo',\r\n type: ActionResponse,\r\n })\r\n @ApiResponse({\r\n status: 400,\r\n description: 'Errore nei parametri della richiesta',\r\n type: ErrorResponse,\r\n })\r\n @ApiResponse({\r\n status: 500,\r\n description: 'Errore interno del server',\r\n type: ErrorResponse,\r\n })\r\n @ApiBody({ type: SetStatoRegistrazioneDto })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Post('set-stato')\r\n async setStatoRegistrazione(\r\n @Req() request: Request,\r\n @Body() body: SetStatoRegistrazioneDto,\r\n @Res() res: Response,\r\n ) {\r\n try {\r\n ensureSuperUser(\r\n getAuthenticatedAccessiUser(request),\r\n 'Solo gli amministratori possono modificare lo stato di registrazione.',\r\n );\r\n\r\n const { codiceUtente, statoRegistrazione } = body;\r\n if (!codiceUtente) throw new BadRequestException('Il codice utente e\\' obbligatorio.');\r\n if (statoRegistrazione === undefined) {\r\n throw new BadRequestException('Lo stato registrazione e\\' obbligatorio.');\r\n }\r\n\r\n await this.userService.setStato(codiceUtente, statoRegistrazione);\r\n return RestUtilities.sendOKMessage(\r\n res,\r\n `Lo stato dell'utente ${codiceUtente} e' stato aggiornato a ${statoRegistrazione}.`,\r\n );\r\n } catch (error) {\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Registra un nuovo utente',\r\n description: 'Disponibile soltanto quando publicRegistration.enabled e true. Per utenti SSO usare il provisioning master nel tag Federated authentication.',\r\n operationId: 'register',\r\n })\r\n @ApiBody({\r\n type: PublicRegisterRequest,\r\n description: \"Dati necessari per la registrazione dell'utente\",\r\n })\r\n @ApiCreatedResponse({\r\n description:\r\n 'Utente registrato con successo. Restituisce il codice utente e invia una mail di reset password.',\r\n type: RegisterResponse,\r\n })\r\n @ApiResponse({\r\n status: HttpStatus.BAD_REQUEST,\r\n description: 'Errore nella registrazione.',\r\n type: ErrorResponse,\r\n })\r\n @ApiResponse({\r\n status: HttpStatus.INTERNAL_SERVER_ERROR,\r\n description: 'Errore interno del server durante la registrazione o l\\'invio email.',\r\n type: ErrorResponse,\r\n })\r\n @Post('register')\r\n async register(\r\n @Req() request: Request,\r\n @Body() registrationData: PublicRegisterRequest,\r\n @Res() res: Response,\r\n ) {\r\n try {\r\n if (this.accessiOptions.publicRegistration?.enabled !== true) {\r\n throw new HttpException(\r\n 'La registrazione pubblica e disabilitata. Un amministratore deve creare l utente.',\r\n HttpStatus.FORBIDDEN,\r\n );\r\n }\r\n\r\n const rateLimitDecision = checkPublicAuthRateLimit(\r\n this.accessiOptions,\r\n 'register',\r\n request,\r\n [registrationData?.email],\r\n );\r\n if (!rateLimitDecision.allowed) {\r\n return sendPublicAuthRateLimitExceeded(res, rateLimitDecision.retryAfterSeconds);\r\n }\r\n\r\n const codiceUtente = await this.userService.register(registrationData, {\r\n allowPrivilegedFields: false,\r\n });\r\n\r\n await this.emailService.sendPasswordResetEmail(registrationData.email);\r\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\r\n } catch (error) {\r\n const status =\r\n error instanceof HttpException ? error.getStatus() : HttpStatus.BAD_REQUEST;\r\n return RestUtilities.sendErrorMessage(res, error, UserController.name, status);\r\n }\r\n }\r\n\r\n @ApiOperation({ summary: 'Crea un utente locale da amministrazione', operationId: 'createManagedUser', description: 'Riservato a superutente. Crea un utente in attesa di impostazione password e invia la mail di reset.' })\r\n @ApiBody({ type: RegisterRequest })\r\n @ApiCreatedResponse({ type: RegisterResponse })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Post('create-managed-user')\r\n async createManagedUser(@Req() request: Request, @Body() registrationData: RegisterRequest, @Res() res: Response) {\r\n try {\r\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare utenti.');\r\n const codiceUtente = await this.userService.register(registrationData, { allowPrivilegedFields: true });\r\n await this.emailService.sendPasswordResetEmail(registrationData.email, registrationData.htmlMail);\r\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\r\n } catch (error) {\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Aggiorna un utente esistente',\r\n operationId: 'updateUtente',\r\n })\r\n @ApiParam({\r\n name: 'codiceUtente',\r\n description: \"Codice identificativo dell'utente da aggiornare\",\r\n required: true,\r\n example: 123,\r\n })\r\n @ApiBody({\r\n type: UserDto,\r\n description: \"Dati aggiornati dell'utente\",\r\n })\r\n @ApiResponse({\r\n status: HttpStatus.OK,\r\n description: 'Utente aggiornato con successo',\r\n type: ActionResponse,\r\n })\r\n @ApiResponse({ status: 400, description: \"Errore nell'aggiornamento\", type: ErrorResponse })\r\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\r\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Put('update-user/:codiceUtente')\r\n async updateUtente(\r\n @Req() request: Request,\r\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\r\n @Body() user: UserDto,\r\n @Res() res: Response,\r\n ) {\r\n try {\r\n const authenticatedUser = getAuthenticatedAccessiUser(request);\r\n const isPrivilegedUpdate = hasPrivilegedUserChanges(user);\r\n\r\n if (isPrivilegedUpdate) {\r\n ensureSuperUser(\r\n authenticatedUser,\r\n 'Solo gli amministratori possono modificare ruoli, permessi o flag privilegiati.',\r\n );\r\n } else {\r\n ensureSelfOrSuperUser(\r\n authenticatedUser,\r\n codiceUtente,\r\n 'Puoi modificare solo il tuo profilo.',\r\n );\r\n }\r\n\r\n if (user.codiceUtente !== undefined && user.codiceUtente !== codiceUtente) {\r\n throw new BadRequestException('Il codice utente nel body non coincide con quello del path.');\r\n }\r\n\r\n await this.userService.updateUser(codiceUtente, user, {\r\n allowPrivilegedChanges: authenticatedUser.flagSuper,\r\n });\r\n\r\n return RestUtilities.sendOKMessage(\r\n res,\r\n `L'utente ${codiceUtente} e' stato aggiornato con successo.`,\r\n );\r\n } catch (error) {\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n\r\n @ApiOperation({\r\n summary: 'Imposta il consenso GDPR per un utente',\r\n operationId: 'setGdpr',\r\n })\r\n @ApiParam({\r\n name: 'codiceUtente',\r\n description: \"Codice identificativo dell'utente che accetta il GDPR\",\r\n required: true,\r\n example: 123,\r\n })\r\n @ApiResponse({\r\n status: 200,\r\n description: 'Consenso GDPR impostato con successo',\r\n type: ActionResponse,\r\n })\r\n @ApiResponse({ status: 400, description: 'Errore nella richiesta', type: ErrorResponse })\r\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\r\n @ApiBearerAuth()\r\n @UseGuards(JwtSimpleGuard)\r\n @Patch('set-gdpr/:codiceUtente')\r\n async setGdpr(\r\n @Req() request: Request,\r\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\r\n @Res() res: Response,\r\n ) {\r\n try {\r\n ensureSelfOrSuperUser(\r\n getAuthenticatedAccessiUser(request),\r\n codiceUtente,\r\n 'Puoi impostare il GDPR solo sul tuo utente.',\r\n );\r\n\r\n await this.userService.setGdpr(codiceUtente);\r\n return RestUtilities.sendOKMessage(res, `L'utente ${codiceUtente} ha accettato il GDPR.`);\r\n } catch (error) {\r\n return this.sendControllerError(res, error);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Abilitazione.js","sourceRoot":"","sources":["../../../src/accessi-module/Dtos/Abilitazione.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,yDAAsD;AACtD,qDAAuE;AAEvE,MAAa,YAAY;CA2BxB;AA3BD,oCA2BC;AAlBC;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;IAC3D,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC;;kDAC5D;AASrB;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IACzD,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;;gDAC5D;AAQnB;IANC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,mCAAgB;QACtB,OAAO,EAAE,mCAAgB,CAAC,OAAO;KAClC,CAAC;IACD,IAAA,wBAAM,EAAC,mCAAgB,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;;sDAC5C","sourcesContent":["import { ApiProperty } from \"@nestjs/swagger\";\nimport { TipoAbilitazione } from \"./TipoAbilitazione\";\nimport { IsString, IsNotEmpty, Length, IsEnum } from \"class-validator\";\n\nexport class Abilitazione {\n\n @ApiProperty({\n description: 'Codice univoco dell\\'utente',\n example: 'USR12345'\n })\n @IsString()\n @IsNotEmpty({ message: \"Il codice utente è obbligatorio.\" })\n @Length(5, 20, { message: \"Il codice utente deve essere tra 5 e 20 caratteri.\" })\n codiceUtente: number;\n\n @ApiProperty({\n description: 'Codice univoco del menu',\n example: 'MENU_001'\n })\n @IsString()\n @IsNotEmpty({ message: \"Il codice menu è obbligatorio.\" })\n @Length(3, 20, { message: \"Il codice menu deve essere tra 3 e 20 caratteri.\" })\n codiceMenu: string;\n\n @ApiProperty({\n description: 'Tipo di abilitazione',\n enum: TipoAbilitazione,\n example: TipoAbilitazione.LETTURA\n })\n @IsEnum(TipoAbilitazione, { message: \"Il tipo di abilitazione non è valido.\" })\n tipoAbilitazione: TipoAbilitazione;\n}"]}
1
+ {"version":3,"file":"Abilitazione.js","sourceRoot":"","sources":["../../../src/accessi-module/Dtos/Abilitazione.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,yDAAsD;AACtD,qDAAuE;AAEvE,MAAa,YAAY;CA2BxB;AA3BD,oCA2BC;AAlBC;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;IAC3D,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC;;kDAC3D;AAStB;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,UAAU;KACpB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IACzD,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;;gDAC3D;AAQpB;IANC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,mCAAgB;QACtB,OAAO,EAAE,mCAAgB,CAAC,OAAO;KAClC,CAAC;IACD,IAAA,wBAAM,EAAC,mCAAgB,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;;sDAC3C","sourcesContent":["import { ApiProperty } from \"@nestjs/swagger\";\r\nimport { TipoAbilitazione } from \"./TipoAbilitazione\";\r\nimport { IsString, IsNotEmpty, Length, IsEnum } from \"class-validator\";\r\n\r\nexport class Abilitazione {\r\n\r\n @ApiProperty({\r\n description: 'Codice univoco dell\\'utente',\r\n example: 'USR12345'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"Il codice utente è obbligatorio.\" })\r\n @Length(5, 20, { message: \"Il codice utente deve essere tra 5 e 20 caratteri.\" })\r\n codiceUtente!: number;\r\n\r\n @ApiProperty({\r\n description: 'Codice univoco del menu',\r\n example: 'MENU_001'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"Il codice menu è obbligatorio.\" })\r\n @Length(3, 20, { message: \"Il codice menu deve essere tra 3 e 20 caratteri.\" })\r\n codiceMenu!: string;\r\n\r\n @ApiProperty({\r\n description: 'Tipo di abilitazione',\r\n enum: TipoAbilitazione,\r\n example: TipoAbilitazione.LETTURA\r\n })\r\n @IsEnum(TipoAbilitazione, { message: \"Il tipo di abilitazione non è valido.\" })\r\n tipoAbilitazione!: TipoAbilitazione;\r\n}"]}
@@ -65,37 +65,45 @@ __decorate([
65
65
  __decorate([
66
66
  (0, swagger_1.ApiPropertyOptional)({
67
67
  description: 'Nome dell\'icona associata al menu',
68
- example: 'people'
68
+ type: String,
69
+ example: 'people',
70
+ nullable: true
69
71
  }),
70
72
  (0, class_validator_1.IsString)(),
71
73
  (0, class_validator_1.IsOptional)(),
72
- __metadata("design:type", String)
74
+ __metadata("design:type", Object)
73
75
  ], AbilitazioneMenu.prototype, "icona", void 0);
74
76
  __decorate([
75
77
  (0, swagger_1.ApiPropertyOptional)({
76
78
  description: 'Tipo di menu',
77
- example: 'M'
79
+ type: String,
80
+ example: 'M',
81
+ nullable: true
78
82
  }),
79
83
  (0, class_validator_1.IsString)(),
80
84
  (0, class_validator_1.IsOptional)(),
81
- __metadata("design:type", String)
85
+ __metadata("design:type", Object)
82
86
  ], AbilitazioneMenu.prototype, "tipo", void 0);
83
87
  __decorate([
84
88
  (0, swagger_1.ApiPropertyOptional)({
85
89
  description: 'Percorso della pagina associata al menu',
86
- example: '/lista-clienti'
90
+ type: String,
91
+ example: '/lista-clienti',
92
+ nullable: true
87
93
  }),
88
94
  (0, class_validator_1.IsString)(),
89
95
  (0, class_validator_1.IsOptional)(),
90
- __metadata("design:type", String)
96
+ __metadata("design:type", Object)
91
97
  ], AbilitazioneMenu.prototype, "pagina", void 0);
92
98
  __decorate([
93
99
  (0, swagger_1.ApiPropertyOptional)({
94
100
  description: 'Nota informativa associata al menu',
95
- example: 'Visibile solo dopo abilitazione'
101
+ type: String,
102
+ example: 'Visibile solo dopo abilitazione',
103
+ nullable: true
96
104
  }),
97
105
  (0, class_validator_1.IsString)(),
98
106
  (0, class_validator_1.IsOptional)(),
99
- __metadata("design:type", String)
107
+ __metadata("design:type", Object)
100
108
  ], AbilitazioneMenu.prototype, "note", void 0);
101
109
  //# sourceMappingURL=AbilitazioneMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbilitazioneMenu.js","sourceRoot":"","sources":["../../../src/accessi-module/Dtos/AbilitazioneMenu.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,yDAAsD;AACtD,qDAAmF;AAEnF,MAAa,gBAAgB;CA0E5B;AA1ED,4CA0EC;AAjEC;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,kBAAkB;KAC5B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IACzD,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;;oDAC5D;AAQnB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,mCAAgB;QACtB,OAAO,EAAE,mCAAgB,CAAC,SAAS;KACpC,CAAC;IACD,IAAA,wBAAM,EAAC,mCAAgB,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;;0DAC3C;AAQpC;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,eAAe;KACzB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;;yDAC1C;AAQzB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;;2DAC1C;AAQ3B;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;;sDACtC;AAQtB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,QAAQ;KAClB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACS;AAQtB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8CACQ;AAQrB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,gBAAgB;KAC1B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;gDACU;AAQvB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,iCAAiC;KAC3C,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8CACQ","sourcesContent":["import { ApiProperty, ApiPropertyOptional } from \"@nestjs/swagger\";\nimport { TipoAbilitazione } from \"./TipoAbilitazione\";\nimport { IsEnum, IsNotEmpty, IsString, Length, IsOptional } from \"class-validator\";\n\nexport class AbilitazioneMenu {\n \n @ApiProperty({\n description: 'Codice univoco del menu',\n example: 'MNUELENCOCLIENTI'\n })\n @IsString()\n @IsNotEmpty({ message: \"Il codice menu è obbligatorio.\" })\n @Length(3, 20, { message: \"Il codice menu deve essere tra 3 e 20 caratteri.\" })\n codiceMenu: string;\n\n @ApiPropertyOptional({\n description: 'Tipo di abilitazione',\n enum: TipoAbilitazione,\n example: TipoAbilitazione.SCRITTURA\n })\n @IsEnum(TipoAbilitazione, { message: \"Il tipo di abilitazione non è valido.\" })\n tipoAbilitazione?: TipoAbilitazione;\n\n @ApiPropertyOptional({\n description: 'Descrizione del menu',\n example: 'Lista Clienti'\n })\n @IsString()\n @IsNotEmpty({ message: \"La descrizione del menu è obbligatoria.\" })\n descrizioneMenu?: string;\n\n @ApiPropertyOptional({\n description: 'Descrizione del gruppo a cui appartiene il menu',\n example: 'Amministrazione'\n })\n @IsString()\n @IsNotEmpty({ message: \"La descrizione del gruppo è obbligatoria.\" })\n descrizioneGruppo?: string;\n\n @ApiPropertyOptional({\n description: 'Codice univoco del gruppo a cui appartiene il menu',\n example: 'C'\n })\n @IsString()\n @IsNotEmpty({ message: \"Il codice gruppo è obbligatorio.\" })\n codiceGruppo?: string;\n\n @ApiPropertyOptional({\n description: 'Nome dell\\'icona associata al menu',\n example: 'people'\n })\n @IsString()\n @IsOptional()\n icona?: string | null;\n\n @ApiPropertyOptional({\n description: 'Tipo di menu',\n example: 'M'\n })\n @IsString()\n @IsOptional()\n tipo?: string | null;\n\n @ApiPropertyOptional({\n description: 'Percorso della pagina associata al menu',\n example: '/lista-clienti'\n })\n @IsString()\n @IsOptional()\n pagina?: string | null;\n\n @ApiPropertyOptional({\n description: 'Nota informativa associata al menu',\n example: 'Visibile solo dopo abilitazione'\n })\n @IsString()\n @IsOptional()\n note?: string | null;\n}\n"]}
1
+ {"version":3,"file":"AbilitazioneMenu.js","sourceRoot":"","sources":["../../../src/accessi-module/Dtos/AbilitazioneMenu.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,yDAAsD;AACtD,qDAAmF;AAEnF,MAAa,gBAAgB;CAkF5B;AAlFD,4CAkFC;AAzEC;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,kBAAkB;KAC5B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IACzD,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;;oDAC3D;AAQpB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,mCAAgB;QACtB,OAAO,EAAE,mCAAgB,CAAC,SAAS;KACpC,CAAC;IACD,IAAA,wBAAM,EAAC,mCAAgB,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;;0DAC3C;AAQpC;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,eAAe;KACzB,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;;yDAC1C;AAQzB;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;;2DAC1C;AAQ3B;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,GAAG;KACb,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;;sDACtC;AAUtB;IARC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACS;AAUtB;IARC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8CACQ;AAUrB;IARC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;gDACU;AAUvB;IARC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,iCAAiC;QAC1C,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8CACQ","sourcesContent":["import { ApiProperty, ApiPropertyOptional } from \"@nestjs/swagger\";\r\nimport { TipoAbilitazione } from \"./TipoAbilitazione\";\r\nimport { IsEnum, IsNotEmpty, IsString, Length, IsOptional } from \"class-validator\";\r\n\r\nexport class AbilitazioneMenu {\r\n \r\n @ApiProperty({\r\n description: 'Codice univoco del menu',\r\n example: 'MNUELENCOCLIENTI'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"Il codice menu è obbligatorio.\" })\r\n @Length(3, 20, { message: \"Il codice menu deve essere tra 3 e 20 caratteri.\" })\r\n codiceMenu!: string;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Tipo di abilitazione',\r\n enum: TipoAbilitazione,\r\n example: TipoAbilitazione.SCRITTURA\r\n })\r\n @IsEnum(TipoAbilitazione, { message: \"Il tipo di abilitazione non è valido.\" })\r\n tipoAbilitazione?: TipoAbilitazione;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Descrizione del menu',\r\n example: 'Lista Clienti'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"La descrizione del menu è obbligatoria.\" })\r\n descrizioneMenu?: string;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Descrizione del gruppo a cui appartiene il menu',\r\n example: 'Amministrazione'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"La descrizione del gruppo è obbligatoria.\" })\r\n descrizioneGruppo?: string;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Codice univoco del gruppo a cui appartiene il menu',\r\n example: 'C'\r\n })\r\n @IsString()\r\n @IsNotEmpty({ message: \"Il codice gruppo è obbligatorio.\" })\r\n codiceGruppo?: string;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Nome dell\\'icona associata al menu',\r\n type: String,\r\n example: 'people',\r\n nullable: true\r\n })\r\n @IsString()\r\n @IsOptional()\r\n icona?: string | null;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Tipo di menu',\r\n type: String,\r\n example: 'M',\r\n nullable: true\r\n })\r\n @IsString()\r\n @IsOptional()\r\n tipo?: string | null;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Percorso della pagina associata al menu',\r\n type: String,\r\n example: '/lista-clienti',\r\n nullable: true\r\n })\r\n @IsString()\r\n @IsOptional()\r\n pagina?: string | null;\r\n\r\n @ApiPropertyOptional({\r\n description: 'Nota informativa associata al menu',\r\n type: String,\r\n example: 'Visibile solo dopo abilitazione',\r\n nullable: true\r\n })\r\n @IsString()\r\n @IsOptional()\r\n note?: string | null;\r\n}\r\n"]}