emilsoftware-utilities 2.0.0-dev.4 → 2.0.0-dev.41

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 (596) hide show
  1. package/README.MD +199 -38
  2. package/dist/ContractGenerator.d.ts +4 -3
  3. package/dist/ContractGenerator.js +15 -5
  4. package/dist/ContractGenerator.js.map +1 -1
  5. package/dist/DailyFileTransport.d.ts +21 -0
  6. package/dist/DailyFileTransport.js +74 -0
  7. package/dist/DailyFileTransport.js.map +1 -0
  8. package/dist/DatabaseUpdater.d.ts +1 -1
  9. package/dist/DatabaseUpdater.js +32 -29
  10. package/dist/DatabaseUpdater.js.map +1 -1
  11. package/dist/EmilsoftwareModule.js.map +1 -1
  12. package/dist/ExecutionTimeLogger.d.ts +2 -2
  13. package/dist/ExecutionTimeLogger.js +5 -4
  14. package/dist/ExecutionTimeLogger.js.map +1 -1
  15. package/dist/Logger.d.ts +22 -11
  16. package/dist/Logger.js +132 -119
  17. package/dist/Logger.js.map +1 -1
  18. package/dist/Orm.d.ts +28 -12
  19. package/dist/Orm.js +194 -153
  20. package/dist/Orm.js.map +1 -1
  21. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  22. package/dist/Utilities.d.ts +18 -8
  23. package/dist/Utilities.js +117 -38
  24. package/dist/Utilities.js.map +1 -1
  25. package/dist/accessi-module/AccessiModule.d.ts +116 -2
  26. package/dist/accessi-module/AccessiModule.js +36 -5
  27. package/dist/accessi-module/AccessiModule.js.map +1 -1
  28. package/dist/accessi-module/Console/accessiFetch.d.ts +16 -0
  29. package/dist/accessi-module/Console/accessiFetch.js +87 -0
  30. package/dist/accessi-module/Console/accessiFetch.js.map +1 -0
  31. package/dist/accessi-module/Console/console.css +681 -0
  32. package/dist/accessi-module/Console/console.d.ts +1 -0
  33. package/dist/accessi-module/Console/console.js +3414 -0
  34. package/dist/accessi-module/Console/console.js.map +1 -0
  35. package/dist/accessi-module/Console/generated/accessiApi.d.ts +582 -0
  36. package/dist/accessi-module/Console/generated/accessiApi.js +549 -0
  37. package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -0
  38. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.d.ts +39 -0
  39. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js +3 -0
  40. package/dist/accessi-module/Console/generated/model/abilitazioneMenu.js.map +1 -0
  41. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.d.ts +16 -0
  42. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js +17 -0
  43. package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipoAbilitazione.js.map +1 -0
  44. package/dist/accessi-module/Console/generated/model/actionResponse.d.ts +12 -0
  45. package/dist/accessi-module/Console/generated/model/actionResponse.js +9 -0
  46. package/dist/accessi-module/Console/generated/model/actionResponse.js.map +1 -0
  47. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.d.ts +11 -0
  48. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js +3 -0
  49. package/dist/accessi-module/Console/generated/model/assignPermissionsToUserRequest.js.map +1 -0
  50. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.d.ts +10 -0
  51. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js +9 -0
  52. package/dist/accessi-module/Console/generated/model/assignRolesToUserRequest.js.map +1 -0
  53. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.d.ts +10 -0
  54. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js +3 -0
  55. package/dist/accessi-module/Console/generated/model/authenticatedTokenPayloadDto.js.map +1 -0
  56. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.d.ts +19 -0
  57. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js +9 -0
  58. package/dist/accessi-module/Console/generated/model/authenticatedUserPayloadDto.js.map +1 -0
  59. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.d.ts +17 -0
  60. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.js +9 -0
  61. package/dist/accessi-module/Console/generated/model/bootstrapAdminRequest.js.map +1 -0
  62. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.d.ts +14 -0
  63. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.js +3 -0
  64. package/dist/accessi-module/Console/generated/model/bootstrapAdminResponse.js.map +1 -0
  65. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.d.ts +13 -0
  66. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.js +9 -0
  67. package/dist/accessi-module/Console/generated/model/bootstrapAdminResultDto.js.map +1 -0
  68. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.d.ts +14 -0
  69. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js +9 -0
  70. package/dist/accessi-module/Console/generated/model/confirmResetPasswordRequest.js.map +1 -0
  71. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.d.ts +13 -0
  72. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js +9 -0
  73. package/dist/accessi-module/Console/generated/model/createFederatedIdentityRequest.js.map +1 -0
  74. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.d.ts +13 -0
  75. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js +9 -0
  76. package/dist/accessi-module/Console/generated/model/createFederatedProviderRequest.js.map +1 -0
  77. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.d.ts +18 -0
  78. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js +3 -0
  79. package/dist/accessi-module/Console/generated/model/createFederatedUserRequest.js.map +1 -0
  80. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.d.ts +23 -0
  81. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js +3 -0
  82. package/dist/accessi-module/Console/generated/model/createFilterTypeRequest.js.map +1 -0
  83. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.d.ts +14 -0
  84. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js +15 -0
  85. package/dist/accessi-module/Console/generated/model/createFilterTypeRequestFlgEnabled.js.map +1 -0
  86. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.d.ts +22 -0
  87. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js +9 -0
  88. package/dist/accessi-module/Console/generated/model/createMenuGroupRequest.js.map +1 -0
  89. package/dist/accessi-module/Console/generated/model/createMenuRequest.d.ts +52 -0
  90. package/dist/accessi-module/Console/generated/model/createMenuRequest.js +9 -0
  91. package/dist/accessi-module/Console/generated/model/createMenuRequest.js.map +1 -0
  92. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.d.ts +18 -0
  93. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js +9 -0
  94. package/dist/accessi-module/Console/generated/model/createMenuTypeRequest.js.map +1 -0
  95. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.d.ts +16 -0
  96. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js +9 -0
  97. package/dist/accessi-module/Console/generated/model/createServiceTokenRequest.js.map +1 -0
  98. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.d.ts +14 -0
  99. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js +3 -0
  100. package/dist/accessi-module/Console/generated/model/createServiceTokenResponse.js.map +1 -0
  101. package/dist/accessi-module/Console/generated/model/errorResponse.d.ts +18 -0
  102. package/dist/accessi-module/Console/generated/model/errorResponse.js +9 -0
  103. package/dist/accessi-module/Console/generated/model/errorResponse.js.map +1 -0
  104. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.d.ts +14 -0
  105. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js +3 -0
  106. package/dist/accessi-module/Console/generated/model/federatedIdentityListResponse.js.map +1 -0
  107. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.d.ts +14 -0
  108. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js +3 -0
  109. package/dist/accessi-module/Console/generated/model/federatedIdentityResponse.js.map +1 -0
  110. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.d.ts +23 -0
  111. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js +9 -0
  112. package/dist/accessi-module/Console/generated/model/federatedIdentityResponseDto.js.map +1 -0
  113. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.d.ts +14 -0
  114. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js +3 -0
  115. package/dist/accessi-module/Console/generated/model/federatedProviderListResponse.js.map +1 -0
  116. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.d.ts +14 -0
  117. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js +3 -0
  118. package/dist/accessi-module/Console/generated/model/federatedProviderResponse.js.map +1 -0
  119. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.d.ts +13 -0
  120. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js +9 -0
  121. package/dist/accessi-module/Console/generated/model/federatedProviderResponseDto.js.map +1 -0
  122. package/dist/accessi-module/Console/generated/model/filtriUtente.d.ts +32 -0
  123. package/dist/accessi-module/Console/generated/model/filtriUtente.js +9 -0
  124. package/dist/accessi-module/Console/generated/model/filtriUtente.js.map +1 -0
  125. package/dist/accessi-module/Console/generated/model/getFiltriResponse.d.ts +14 -0
  126. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js +3 -0
  127. package/dist/accessi-module/Console/generated/model/getFiltriResponse.js.map +1 -0
  128. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.d.ts +12 -0
  129. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js +9 -0
  130. package/dist/accessi-module/Console/generated/model/getFiltriUtenteParams.js.map +1 -0
  131. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.d.ts +14 -0
  132. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js +3 -0
  133. package/dist/accessi-module/Console/generated/model/getFiltriUtenteResponse.js.map +1 -0
  134. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.d.ts +12 -0
  135. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js +9 -0
  136. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusParams.js.map +1 -0
  137. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.d.ts +14 -0
  138. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js +3 -0
  139. package/dist/accessi-module/Console/generated/model/getGroupsWithMenusResponse.js.map +1 -0
  140. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.d.ts +14 -0
  141. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js +3 -0
  142. package/dist/accessi-module/Console/generated/model/getMenuTypesResponse.js.map +1 -0
  143. package/dist/accessi-module/Console/generated/model/getMenusResponse.d.ts +14 -0
  144. package/dist/accessi-module/Console/generated/model/getMenusResponse.js +3 -0
  145. package/dist/accessi-module/Console/generated/model/getMenusResponse.js.map +1 -0
  146. package/dist/accessi-module/Console/generated/model/getRolesResponse.d.ts +14 -0
  147. package/dist/accessi-module/Console/generated/model/getRolesResponse.js +3 -0
  148. package/dist/accessi-module/Console/generated/model/getRolesResponse.js.map +1 -0
  149. package/dist/accessi-module/Console/generated/model/getSchemaResponse.d.ts +14 -0
  150. package/dist/accessi-module/Console/generated/model/getSchemaResponse.js +3 -0
  151. package/dist/accessi-module/Console/generated/model/getSchemaResponse.js.map +1 -0
  152. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.d.ts +12 -0
  153. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js +9 -0
  154. package/dist/accessi-module/Console/generated/model/getServiceTokensParams.js.map +1 -0
  155. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.d.ts +14 -0
  156. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js +3 -0
  157. package/dist/accessi-module/Console/generated/model/getServiceTokensResponse.js.map +1 -0
  158. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.d.ts +10 -0
  159. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js +9 -0
  160. package/dist/accessi-module/Console/generated/model/getUserByTokenRequest.js.map +1 -0
  161. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.d.ts +14 -0
  162. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js +3 -0
  163. package/dist/accessi-module/Console/generated/model/getUserByTokenResponse.js.map +1 -0
  164. package/dist/accessi-module/Console/generated/model/getUsersParams.d.ts +32 -0
  165. package/dist/accessi-module/Console/generated/model/getUsersParams.js +9 -0
  166. package/dist/accessi-module/Console/generated/model/getUsersParams.js.map +1 -0
  167. package/dist/accessi-module/Console/generated/model/getUsersResponse.d.ts +14 -0
  168. package/dist/accessi-module/Console/generated/model/getUsersResponse.js +3 -0
  169. package/dist/accessi-module/Console/generated/model/getUsersResponse.js.map +1 -0
  170. package/dist/accessi-module/Console/generated/model/getUsersResult.d.ts +17 -0
  171. package/dist/accessi-module/Console/generated/model/getUsersResult.js +3 -0
  172. package/dist/accessi-module/Console/generated/model/getUsersResult.js.map +1 -0
  173. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.d.ts +12 -0
  174. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js +9 -0
  175. package/dist/accessi-module/Console/generated/model/getUsersResultExtensionFields.js.map +1 -0
  176. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.d.ts +19 -0
  177. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js +3 -0
  178. package/dist/accessi-module/Console/generated/model/groupWithMenusEntity.js.map +1 -0
  179. package/dist/accessi-module/Console/generated/model/index.d.ts +99 -0
  180. package/dist/accessi-module/Console/generated/model/index.js +116 -0
  181. package/dist/accessi-module/Console/generated/model/index.js.map +1 -0
  182. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.d.ts +30 -0
  183. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js +9 -0
  184. package/dist/accessi-module/Console/generated/model/issuedServiceTokenDto.js.map +1 -0
  185. package/dist/accessi-module/Console/generated/model/loginRequest.d.ts +12 -0
  186. package/dist/accessi-module/Console/generated/model/loginRequest.js +9 -0
  187. package/dist/accessi-module/Console/generated/model/loginRequest.js.map +1 -0
  188. package/dist/accessi-module/Console/generated/model/loginResponse.d.ts +14 -0
  189. package/dist/accessi-module/Console/generated/model/loginResponse.js +3 -0
  190. package/dist/accessi-module/Console/generated/model/loginResponse.js.map +1 -0
  191. package/dist/accessi-module/Console/generated/model/loginResult.d.ts +32 -0
  192. package/dist/accessi-module/Console/generated/model/loginResult.js +3 -0
  193. package/dist/accessi-module/Console/generated/model/loginResult.js.map +1 -0
  194. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.d.ts +12 -0
  195. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js +9 -0
  196. package/dist/accessi-module/Console/generated/model/loginResultExtensionFields.js.map +1 -0
  197. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.d.ts +13 -0
  198. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js +14 -0
  199. package/dist/accessi-module/Console/generated/model/loginResultPasswordRequired.js.map +1 -0
  200. package/dist/accessi-module/Console/generated/model/menuEntity.d.ts +32 -0
  201. package/dist/accessi-module/Console/generated/model/menuEntity.js +9 -0
  202. package/dist/accessi-module/Console/generated/model/menuEntity.js.map +1 -0
  203. package/dist/accessi-module/Console/generated/model/menuTypeEntity.d.ts +12 -0
  204. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js +9 -0
  205. package/dist/accessi-module/Console/generated/model/menuTypeEntity.js.map +1 -0
  206. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.d.ts +12 -0
  207. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js +9 -0
  208. package/dist/accessi-module/Console/generated/model/passwordExpiredResponse.js.map +1 -0
  209. package/dist/accessi-module/Console/generated/model/permission.d.ts +12 -0
  210. package/dist/accessi-module/Console/generated/model/permission.js +9 -0
  211. package/dist/accessi-module/Console/generated/model/permission.js.map +1 -0
  212. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.d.ts +51 -0
  213. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js +9 -0
  214. package/dist/accessi-module/Console/generated/model/publicRegisterRequest.js.map +1 -0
  215. package/dist/accessi-module/Console/generated/model/registerRequest.d.ts +62 -0
  216. package/dist/accessi-module/Console/generated/model/registerRequest.js +3 -0
  217. package/dist/accessi-module/Console/generated/model/registerRequest.js.map +1 -0
  218. package/dist/accessi-module/Console/generated/model/registerResponse.d.ts +14 -0
  219. package/dist/accessi-module/Console/generated/model/registerResponse.js +3 -0
  220. package/dist/accessi-module/Console/generated/model/registerResponse.js.map +1 -0
  221. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.d.ts +13 -0
  222. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js +9 -0
  223. package/dist/accessi-module/Console/generated/model/resendTwoFactorRequest.js.map +1 -0
  224. package/dist/accessi-module/Console/generated/model/role.d.ts +15 -0
  225. package/dist/accessi-module/Console/generated/model/role.js +3 -0
  226. package/dist/accessi-module/Console/generated/model/role.js.map +1 -0
  227. package/dist/accessi-module/Console/generated/model/ruoliMenu.d.ts +15 -0
  228. package/dist/accessi-module/Console/generated/model/ruoliMenu.js +3 -0
  229. package/dist/accessi-module/Console/generated/model/ruoliMenu.js.map +1 -0
  230. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.d.ts +16 -0
  231. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js +17 -0
  232. package/dist/accessi-module/Console/generated/model/ruoliMenuTipoAbilitazione.js.map +1 -0
  233. package/dist/accessi-module/Console/generated/model/schemaDdlResult.d.ts +20 -0
  234. package/dist/accessi-module/Console/generated/model/schemaDdlResult.js +3 -0
  235. package/dist/accessi-module/Console/generated/model/schemaDdlResult.js.map +1 -0
  236. package/dist/accessi-module/Console/generated/model/schemaDdlSection.d.ts +12 -0
  237. package/dist/accessi-module/Console/generated/model/schemaDdlSection.js +9 -0
  238. package/dist/accessi-module/Console/generated/model/schemaDdlSection.js.map +1 -0
  239. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.d.ts +12 -0
  240. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js +9 -0
  241. package/dist/accessi-module/Console/generated/model/sendResetPasswordEmailRequest.js.map +1 -0
  242. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.d.ts +12 -0
  243. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js +9 -0
  244. package/dist/accessi-module/Console/generated/model/serveResetPasswordPageParams.js.map +1 -0
  245. package/dist/accessi-module/Console/generated/model/serviceTokenDto.d.ts +28 -0
  246. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js +9 -0
  247. package/dist/accessi-module/Console/generated/model/serviceTokenDto.js.map +1 -0
  248. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.d.ts +10 -0
  249. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js +9 -0
  250. package/dist/accessi-module/Console/generated/model/setPasswordLoginPolicyRequest.js.map +1 -0
  251. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.d.ts +13 -0
  252. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js +3 -0
  253. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDto.js.map +1 -0
  254. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.d.ts +18 -0
  255. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js +19 -0
  256. package/dist/accessi-module/Console/generated/model/setStatoRegistrazioneDtoStatoRegistrazione.js.map +1 -0
  257. package/dist/accessi-module/Console/generated/model/status.d.ts +12 -0
  258. package/dist/accessi-module/Console/generated/model/status.js +9 -0
  259. package/dist/accessi-module/Console/generated/model/status.js.map +1 -0
  260. package/dist/accessi-module/Console/generated/model/tipoFiltro.d.ts +23 -0
  261. package/dist/accessi-module/Console/generated/model/tipoFiltro.js +3 -0
  262. package/dist/accessi-module/Console/generated/model/tipoFiltro.js.map +1 -0
  263. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.d.ts +14 -0
  264. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js +15 -0
  265. package/dist/accessi-module/Console/generated/model/tipoFiltroFlgEnabled.js.map +1 -0
  266. package/dist/accessi-module/Console/generated/model/tokenResult.d.ts +15 -0
  267. package/dist/accessi-module/Console/generated/model/tokenResult.js +3 -0
  268. package/dist/accessi-module/Console/generated/model/tokenResult.js.map +1 -0
  269. package/dist/accessi-module/Console/generated/model/tokenResultType.d.ts +14 -0
  270. package/dist/accessi-module/Console/generated/model/tokenResultType.js +15 -0
  271. package/dist/accessi-module/Console/generated/model/tokenResultType.js.map +1 -0
  272. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.d.ts +18 -0
  273. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js +3 -0
  274. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDto.js.map +1 -0
  275. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.d.ts +10 -0
  276. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js +14 -0
  277. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoMethod.js.map +1 -0
  278. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.d.ts +13 -0
  279. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js +14 -0
  280. package/dist/accessi-module/Console/generated/model/twoFactorChallengeDtoTwoFactorRequired.js.map +1 -0
  281. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.d.ts +10 -0
  282. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js +9 -0
  283. package/dist/accessi-module/Console/generated/model/updateEnabledStatusRequest.js.map +1 -0
  284. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.d.ts +11 -0
  285. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js +9 -0
  286. package/dist/accessi-module/Console/generated/model/updateFederatedIdentityRequest.js.map +1 -0
  287. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.d.ts +12 -0
  288. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js +9 -0
  289. package/dist/accessi-module/Console/generated/model/updateFederatedProviderRequest.js.map +1 -0
  290. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.d.ts +21 -0
  291. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js +3 -0
  292. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequest.js.map +1 -0
  293. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.d.ts +14 -0
  294. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js +15 -0
  295. package/dist/accessi-module/Console/generated/model/updateFilterTypeRequestFlgEnabled.js.map +1 -0
  296. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.d.ts +17 -0
  297. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js +9 -0
  298. package/dist/accessi-module/Console/generated/model/updateMenuGroupRequest.js.map +1 -0
  299. package/dist/accessi-module/Console/generated/model/updateMenuRequest.d.ts +47 -0
  300. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js +9 -0
  301. package/dist/accessi-module/Console/generated/model/updateMenuRequest.js.map +1 -0
  302. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.d.ts +13 -0
  303. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js +9 -0
  304. package/dist/accessi-module/Console/generated/model/updateMenuTypeRequest.js.map +1 -0
  305. package/dist/accessi-module/Console/generated/model/userDto.d.ts +88 -0
  306. package/dist/accessi-module/Console/generated/model/userDto.js +3 -0
  307. package/dist/accessi-module/Console/generated/model/userDto.js.map +1 -0
  308. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.d.ts +18 -0
  309. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js +19 -0
  310. package/dist/accessi-module/Console/generated/model/userDtoStatoRegistrazione.js.map +1 -0
  311. package/dist/accessi-module/Console/generated/model/userGrantsDto.d.ts +16 -0
  312. package/dist/accessi-module/Console/generated/model/userGrantsDto.js +3 -0
  313. package/dist/accessi-module/Console/generated/model/userGrantsDto.js.map +1 -0
  314. package/dist/accessi-module/Console/generated/model/userGrantsResponse.d.ts +14 -0
  315. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js +3 -0
  316. package/dist/accessi-module/Console/generated/model/userGrantsResponse.js.map +1 -0
  317. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.d.ts +18 -0
  318. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js +9 -0
  319. package/dist/accessi-module/Console/generated/model/verifyTwoFactorRequest.js.map +1 -0
  320. package/dist/accessi-module/Console/help.d.ts +13 -0
  321. package/dist/accessi-module/Console/help.js +355 -0
  322. package/dist/accessi-module/Console/help.js.map +1 -0
  323. package/dist/accessi-module/Console/index.html +153 -0
  324. package/dist/accessi-module/Console/wiki.d.ts +52 -0
  325. package/dist/accessi-module/Console/wiki.js +731 -0
  326. package/dist/accessi-module/Console/wiki.js.map +1 -0
  327. package/dist/accessi-module/Controllers/AccessiConsoleController.d.ts +18 -0
  328. package/dist/accessi-module/Controllers/AccessiConsoleController.js +111 -0
  329. package/dist/accessi-module/Controllers/AccessiConsoleController.js.map +1 -0
  330. package/dist/accessi-module/Controllers/AuthController.d.ts +12 -6
  331. package/dist/accessi-module/Controllers/AuthController.js +167 -82
  332. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  333. package/dist/accessi-module/Controllers/ConfiguratorController.d.ts +1 -5
  334. package/dist/accessi-module/Controllers/ConfiguratorController.js +26 -44
  335. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  336. package/dist/accessi-module/Controllers/EmailController.d.ts +4 -6
  337. package/dist/accessi-module/Controllers/EmailController.js +12 -14
  338. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  339. package/dist/accessi-module/Controllers/FiltriController.d.ts +5 -4
  340. package/dist/accessi-module/Controllers/FiltriController.js +125 -6
  341. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  342. package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -1
  343. package/dist/accessi-module/Controllers/PermissionController.js +322 -51
  344. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  345. package/dist/accessi-module/Controllers/SchemaController.d.ts +9 -0
  346. package/dist/accessi-module/Controllers/SchemaController.js +79 -0
  347. package/dist/accessi-module/Controllers/SchemaController.js.map +1 -0
  348. package/dist/accessi-module/Controllers/ServiceTokenController.d.ts +23 -0
  349. package/dist/accessi-module/Controllers/ServiceTokenController.js +176 -0
  350. package/dist/accessi-module/Controllers/ServiceTokenController.js.map +1 -0
  351. package/dist/accessi-module/Controllers/UserController.d.ts +8 -4
  352. package/dist/accessi-module/Controllers/UserController.js +161 -28
  353. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  354. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  355. package/dist/accessi-module/Dtos/AbilitazioneMenu.js +16 -8
  356. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  357. package/dist/accessi-module/Dtos/AdminBootstrapDtos.d.ts +19 -0
  358. package/dist/accessi-module/Dtos/AdminBootstrapDtos.js +83 -0
  359. package/dist/accessi-module/Dtos/AdminBootstrapDtos.js.map +1 -0
  360. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +0 -1
  361. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  362. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +1 -2
  363. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  364. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +13 -0
  365. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +70 -0
  366. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -0
  367. package/dist/accessi-module/Dtos/BaseResponse.d.ts +22 -0
  368. package/dist/accessi-module/Dtos/BaseResponse.js +106 -1
  369. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  370. package/dist/accessi-module/Dtos/CatalogDtos.d.ts +64 -0
  371. package/dist/accessi-module/Dtos/CatalogDtos.js +322 -0
  372. package/dist/accessi-module/Dtos/CatalogDtos.js.map +1 -0
  373. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.d.ts +3 -0
  374. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js +31 -0
  375. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -0
  376. package/dist/accessi-module/Dtos/FederatedIdentityDtos.d.ts +69 -0
  377. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js +236 -0
  378. package/dist/accessi-module/Dtos/FederatedIdentityDtos.js.map +1 -0
  379. package/dist/accessi-module/Dtos/FiltriUtente.js +5 -1
  380. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  381. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js +1 -1
  382. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  383. package/dist/accessi-module/Dtos/GetMenusResponse.js +1 -1
  384. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  385. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  386. package/dist/accessi-module/Dtos/GetUserByTokenRequest.d.ts +3 -0
  387. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js +26 -0
  388. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -0
  389. package/dist/accessi-module/Dtos/GetUserByTokenResponse.d.ts +5 -0
  390. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js +27 -0
  391. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -0
  392. package/dist/accessi-module/Dtos/GetUsersResponse.d.ts +1 -1
  393. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  394. package/dist/accessi-module/Dtos/LoginRequest.d.ts +1 -1
  395. package/dist/accessi-module/Dtos/LoginRequest.js +3 -2
  396. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  397. package/dist/accessi-module/Dtos/LoginResponse.d.ts +6 -2
  398. package/dist/accessi-module/Dtos/LoginResponse.js +20 -7
  399. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  400. package/dist/accessi-module/Dtos/MenuItem.js +1 -0
  401. package/dist/accessi-module/Dtos/Permission.d.ts +1 -0
  402. package/dist/accessi-module/Dtos/Permission.js +1 -0
  403. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  404. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +5 -0
  405. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +15 -0
  406. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -0
  407. package/dist/accessi-module/Dtos/RegisterRequest.d.ts +2 -4
  408. package/dist/accessi-module/Dtos/RegisterRequest.js +18 -28
  409. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  410. package/dist/accessi-module/Dtos/RegisterResponse.d.ts +1 -1
  411. package/dist/accessi-module/Dtos/RegisterResponse.js +3 -3
  412. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  413. package/dist/accessi-module/Dtos/Role.d.ts +4 -0
  414. package/dist/accessi-module/Dtos/Role.js +4 -0
  415. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  416. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  417. package/dist/accessi-module/Dtos/SchemaDtos.d.ts +19 -0
  418. package/dist/accessi-module/Dtos/SchemaDtos.js +84 -0
  419. package/dist/accessi-module/Dtos/SchemaDtos.js.map +1 -0
  420. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.d.ts +4 -0
  421. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js +36 -0
  422. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -0
  423. package/dist/accessi-module/Dtos/ServiceToken.d.ts +34 -0
  424. package/dist/accessi-module/Dtos/ServiceToken.js +128 -0
  425. package/dist/accessi-module/Dtos/ServiceToken.js.map +1 -0
  426. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  427. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  428. package/dist/accessi-module/Dtos/TipoAbilitazione.d.ts +4 -0
  429. package/dist/accessi-module/Dtos/TipoAbilitazione.js +4 -0
  430. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  431. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  432. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  433. package/dist/accessi-module/Dtos/TwoFactorDtos.d.ts +13 -0
  434. package/dist/accessi-module/Dtos/TwoFactorDtos.js +60 -0
  435. package/dist/accessi-module/Dtos/TwoFactorDtos.js.map +1 -0
  436. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  437. package/dist/accessi-module/Dtos/UserDto.d.ts +9 -4
  438. package/dist/accessi-module/Dtos/UserDto.js +39 -24
  439. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  440. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  441. package/dist/accessi-module/Dtos/UserGrantsResponse.d.ts +5 -0
  442. package/dist/accessi-module/Dtos/UserGrantsResponse.js +27 -0
  443. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -0
  444. package/dist/accessi-module/Dtos/index.d.ts +13 -0
  445. package/dist/accessi-module/Dtos/index.js +13 -0
  446. package/dist/accessi-module/Dtos/index.js.map +1 -1
  447. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.d.ts +33 -0
  448. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.js +106 -0
  449. package/dist/accessi-module/Services/AdminBootstrapService/AdminBootstrapService.js.map +1 -0
  450. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +40 -5
  451. package/dist/accessi-module/Services/AuthService/AuthService.js +192 -42
  452. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  453. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.d.ts +3 -1
  454. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js +5 -1
  455. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  456. package/dist/accessi-module/Services/EmailService/EmailService.d.ts +9 -2
  457. package/dist/accessi-module/Services/EmailService/EmailService.js +47 -22
  458. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  459. package/dist/accessi-module/Services/FiltriService/FiltriService.d.ts +18 -3
  460. package/dist/accessi-module/Services/FiltriService/FiltriService.js +92 -16
  461. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  462. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +77 -2
  463. package/dist/accessi-module/Services/PermissionService/PermissionService.js +603 -206
  464. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  465. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.d.ts +36 -0
  466. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.js +125 -0
  467. package/dist/accessi-module/Services/SchemaExportService/SchemaExportService.js.map +1 -0
  468. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.d.ts +75 -0
  469. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +265 -0
  470. package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -0
  471. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.d.ts +27 -0
  472. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js +175 -0
  473. package/dist/accessi-module/Services/TwoFactorService/TwoFactorService.js.map +1 -0
  474. package/dist/accessi-module/Services/UserService/UserService.d.ts +51 -5
  475. package/dist/accessi-module/Services/UserService/UserService.js +396 -294
  476. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  477. package/dist/accessi-module/Views/reset-password.html +213 -213
  478. package/dist/accessi-module/accessiRuntime.d.ts +45 -0
  479. package/dist/accessi-module/accessiRuntime.js +39 -0
  480. package/dist/accessi-module/accessiRuntime.js.map +1 -0
  481. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.d.ts +83 -0
  482. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.js +360 -0
  483. package/dist/accessi-module/database-updates/AccessiCatalogMigrator.js.map +1 -0
  484. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +58 -10
  485. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +506 -179
  486. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  487. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.d.ts +5 -0
  488. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js +79 -0
  489. package/dist/accessi-module/database-updates/accessiOptionsFromEnv.js.map +1 -0
  490. package/dist/accessi-module/database-updates/accessiSchema.d.ts +67 -0
  491. package/dist/accessi-module/database-updates/accessiSchema.js +124 -0
  492. package/dist/accessi-module/database-updates/accessiSchema.js.map +1 -0
  493. package/dist/accessi-module/database-updates/optionalColumns.d.ts +7 -0
  494. package/dist/accessi-module/database-updates/optionalColumns.js +58 -0
  495. package/dist/accessi-module/database-updates/optionalColumns.js.map +1 -0
  496. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.d.ts +1 -0
  497. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.js +69 -0
  498. package/dist/accessi-module/database-updates/runAccessiCatalogMigrations.js.map +1 -0
  499. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js +15 -53
  500. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  501. package/dist/accessi-module/federated-auth/FederatedAuthController.d.ts +24 -0
  502. package/dist/accessi-module/federated-auth/FederatedAuthController.js +333 -0
  503. package/dist/accessi-module/federated-auth/FederatedAuthController.js.map +1 -0
  504. package/dist/accessi-module/federated-auth/FederatedAuthService.d.ts +100 -0
  505. package/dist/accessi-module/federated-auth/FederatedAuthService.js +451 -0
  506. package/dist/accessi-module/federated-auth/FederatedAuthService.js.map +1 -0
  507. package/dist/accessi-module/federated-auth/FederatedAuthTypes.d.ts +53 -0
  508. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js +3 -0
  509. package/dist/accessi-module/federated-auth/FederatedAuthTypes.js.map +1 -0
  510. package/dist/accessi-module/index.d.ts +29 -0
  511. package/dist/accessi-module/index.js +89 -19
  512. package/dist/accessi-module/index.js.map +1 -1
  513. package/dist/accessi-module/jwt/jwt.strategy.d.ts +1 -1
  514. package/dist/accessi-module/jwt/jwt.strategy.js +16 -7
  515. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  516. package/dist/accessi-module/middleware/accessiRequirements.d.ts +23 -1
  517. package/dist/accessi-module/middleware/accessiRequirements.js +7 -0
  518. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  519. package/dist/accessi-module/middleware/authenticateGen.d.ts +16 -1
  520. package/dist/accessi-module/middleware/authenticateGen.js +63 -25
  521. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  522. package/dist/accessi-module/security/AccessiHttpExceptionFilter.d.ts +12 -0
  523. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js +74 -0
  524. package/dist/accessi-module/security/AccessiHttpExceptionFilter.js.map +1 -0
  525. package/dist/accessi-module/security/accessControl.d.ts +22 -2
  526. package/dist/accessi-module/security/accessControl.js +47 -8
  527. package/dist/accessi-module/security/accessControl.js.map +1 -1
  528. package/dist/accessi-module/security/accessiValidation.d.ts +9 -0
  529. package/dist/accessi-module/security/accessiValidation.js +41 -0
  530. package/dist/accessi-module/security/accessiValidation.js.map +1 -0
  531. package/dist/accessi-module/security/adminBootstrap.d.ts +8 -0
  532. package/dist/accessi-module/security/adminBootstrap.js +41 -0
  533. package/dist/accessi-module/security/adminBootstrap.js.map +1 -0
  534. package/dist/accessi-module/security/authenticatedToken.d.ts +16 -2
  535. package/dist/accessi-module/security/authenticatedToken.js +31 -4
  536. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  537. package/dist/accessi-module/security/emailConfiguration.d.ts +20 -0
  538. package/dist/accessi-module/security/emailConfiguration.js +41 -0
  539. package/dist/accessi-module/security/emailConfiguration.js.map +1 -0
  540. package/dist/accessi-module/security/passwordResetToken.d.ts +13 -3
  541. package/dist/accessi-module/security/passwordResetToken.js +13 -5
  542. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  543. package/dist/accessi-module/security/publicAuthRateLimit.d.ts +3 -3
  544. package/dist/accessi-module/security/publicAuthRateLimit.js +31 -8
  545. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  546. package/dist/accessi-module/security/serviceTokenGuard.d.ts +25 -0
  547. package/dist/accessi-module/security/serviceTokenGuard.js +85 -0
  548. package/dist/accessi-module/security/serviceTokenGuard.js.map +1 -0
  549. package/dist/accessi-module/security/serviceTokenRateLimit.d.ts +8 -0
  550. package/dist/accessi-module/security/serviceTokenRateLimit.js +49 -0
  551. package/dist/accessi-module/security/serviceTokenRateLimit.js.map +1 -0
  552. package/dist/accessi-module/startupLog.d.ts +6 -0
  553. package/dist/accessi-module/startupLog.js +25 -0
  554. package/dist/accessi-module/startupLog.js.map +1 -0
  555. package/dist/allegati-module/AllegatiModule.d.ts +12 -1
  556. package/dist/allegati-module/AllegatiModule.js +11 -1
  557. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  558. package/dist/allegati-module/Controllers/AllegatiController.d.ts +2 -1
  559. package/dist/allegati-module/Controllers/AllegatiController.js +23 -15
  560. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  561. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  562. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  563. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  564. package/dist/allegati-module/Dtos/index.js.map +1 -1
  565. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  566. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  567. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  568. package/dist/allegati-module/Services/AllegatiService/AllegatiService.d.ts +10 -3
  569. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +150 -101
  570. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  571. package/dist/allegati-module/index.js.map +1 -1
  572. package/dist/allegati-module/security/allegatiAuthorizationGuard.d.ts +14 -0
  573. package/dist/allegati-module/security/allegatiAuthorizationGuard.js +70 -0
  574. package/dist/allegati-module/security/allegatiAuthorizationGuard.js.map +1 -0
  575. package/dist/autobind.d.ts +10 -3
  576. package/dist/autobind.js +24 -9
  577. package/dist/autobind.js.map +1 -1
  578. package/dist/emilsoftware-utilities-2.0.0-dev.41.tgz +0 -0
  579. package/dist/firebird-compat.d.ts +27 -6
  580. package/dist/firebird-compat.js +150 -135
  581. package/dist/firebird-compat.js.map +1 -1
  582. package/dist/index.d.ts +2 -2
  583. package/dist/index.js +2 -2
  584. package/dist/index.js.map +1 -1
  585. package/dist/initEmilsoftwareModule.js +13 -3
  586. package/dist/initEmilsoftwareModule.js.map +1 -1
  587. package/dist/scripts/generateAccessiOpenApi.d.ts +1 -0
  588. package/dist/scripts/generateAccessiOpenApi.js +57 -0
  589. package/dist/scripts/generateAccessiOpenApi.js.map +1 -0
  590. package/dist/scripts/generateAccessiWiki.d.ts +1 -0
  591. package/dist/scripts/generateAccessiWiki.js +131 -0
  592. package/dist/scripts/generateAccessiWiki.js.map +1 -0
  593. package/dist/swagger/SwaggerConfig.d.ts +7 -1
  594. package/dist/swagger/SwaggerConfig.js +22 -8
  595. package/dist/swagger/SwaggerConfig.js.map +1 -1
  596. package/package.json +105 -83
@@ -0,0 +1,53 @@
1
+ import { LoginResult } from '../Dtos/LoginResponse';
2
+ import { TokenResult } from '../Dtos/TokenResult';
3
+ /**
4
+ * Identita esterna gia verificata dal backend ospitante.
5
+ *
6
+ * Questa e l unica informazione che il backend passa ad Accessi dopo avere
7
+ * concluso il proprio flusso SSO. Accessi non riceve e non verifica token del
8
+ * provider: decide solo quale utente interno corrisponde all identita e quali
9
+ * grant possiede.
10
+ */
11
+ export interface VerifiedFederatedIdentity {
12
+ /** Chiave stabile censita in Accessi e configurata nel backend, ad esempio `azure-ad-acme-produzione`. Non e il nome commerciale del provider. */
13
+ provider: string;
14
+ /** ID opaco e stabile dell account presso il provider, ad esempio oid, sub o NameID persistente. Non usare email, nome o username. */
15
+ subject: string;
16
+ }
17
+ /** Provider SSO censito in Accessi. Le configurazioni e i segreti restano nel backend ospitante. */
18
+ export interface FederatedProvider {
19
+ /** Chiave stabile usata dal backend nei payload `{ provider, subject }`. */
20
+ provider: string;
21
+ /** Nome leggibile mostrato agli amministratori nella console. */
22
+ description: string;
23
+ /** Un provider disabilitato non puo autenticare nuove sessioni SSO. */
24
+ active: boolean;
25
+ createdAt?: Date | string;
26
+ note?: string;
27
+ }
28
+ /** Collegamento persistito fra una identita esterna e un utente Accessi. */
29
+ export interface FederatedIdentity {
30
+ /** Chiave tecnica SHA-256 del collegamento. Serve solo alle CRUD amministrative, mai al login SSO. */
31
+ identityKey: string;
32
+ /** Chiave dell utente Accessi che riceve ruoli, grant e sessione interna. */
33
+ codiceUtente: number;
34
+ /** Namespace backend salvato al momento del collegamento. */
35
+ provider: string;
36
+ /** Identificativo esterno usato insieme a provider per riconoscere la persona. */
37
+ subject: string;
38
+ /** Indica se l utente puo usare anche la password locale. */
39
+ passwordLoginEnabled: boolean;
40
+ /** Indica se questo singolo collegamento SSO puo ancora autenticare. */
41
+ active: boolean;
42
+ createdAt?: Date | string;
43
+ lastLoginAt?: Date | string;
44
+ disabledAt?: Date | string;
45
+ note?: string;
46
+ }
47
+ /** Risultato dello scambio di un identita esterna verificata con una normale sessione Accessi. */
48
+ export interface FederatedAuthenticationResult {
49
+ codiceUtente: number;
50
+ login: LoginResult;
51
+ /** Assente quando login.challenge richiede la verifica email. */
52
+ token?: TokenResult;
53
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=FederatedAuthTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FederatedAuthTypes.js","sourceRoot":"","sources":["../../../src/accessi-module/federated-auth/FederatedAuthTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { LoginResult } from '../Dtos/LoginResponse';\nimport { TokenResult } from '../Dtos/TokenResult';\n\n/**\n * Identita esterna gia verificata dal backend ospitante.\n *\n * Questa e l unica informazione che il backend passa ad Accessi dopo avere\n * concluso il proprio flusso SSO. Accessi non riceve e non verifica token del\n * provider: decide solo quale utente interno corrisponde all identita e quali\n * grant possiede.\n */\nexport interface VerifiedFederatedIdentity {\n /** Chiave stabile censita in Accessi e configurata nel backend, ad esempio `azure-ad-acme-produzione`. Non e il nome commerciale del provider. */\n provider: string;\n /** ID opaco e stabile dell account presso il provider, ad esempio oid, sub o NameID persistente. Non usare email, nome o username. */\n subject: string;\n}\n\n/** Provider SSO censito in Accessi. Le configurazioni e i segreti restano nel backend ospitante. */\nexport interface FederatedProvider {\n /** Chiave stabile usata dal backend nei payload `{ provider, subject }`. */\n provider: string;\n /** Nome leggibile mostrato agli amministratori nella console. */\n description: string;\n /** Un provider disabilitato non puo autenticare nuove sessioni SSO. */\n active: boolean;\n createdAt?: Date | string;\n note?: string;\n}\n\n/** Collegamento persistito fra una identita esterna e un utente Accessi. */\nexport interface FederatedIdentity {\n /** Chiave tecnica SHA-256 del collegamento. Serve solo alle CRUD amministrative, mai al login SSO. */\n identityKey: string;\n /** Chiave dell utente Accessi che riceve ruoli, grant e sessione interna. */\n codiceUtente: number;\n /** Namespace backend salvato al momento del collegamento. */\n provider: string;\n /** Identificativo esterno usato insieme a provider per riconoscere la persona. */\n subject: string;\n /** Indica se l utente puo usare anche la password locale. */\n passwordLoginEnabled: boolean;\n /** Indica se questo singolo collegamento SSO puo ancora autenticare. */\n active: boolean;\n createdAt?: Date | string;\n lastLoginAt?: Date | string;\n disabledAt?: Date | string;\n note?: string;\n}\n\n/** Risultato dello scambio di un identita esterna verificata con una normale sessione Accessi. */\nexport interface FederatedAuthenticationResult {\n codiceUtente: number;\n login: LoginResult;\n /** Assente quando login.challenge richiede la verifica email. */\n token?: TokenResult;\n}\n"]}
@@ -1,9 +1,38 @@
1
1
  import { Application } from "express";
2
2
  import { AccessiOptions } from "./AccessiModule";
3
+ /**
4
+ * Monta il modulo Accessi in un'applicazione Express gia esistente.
5
+ *
6
+ * Il bootstrap crea un host Nest isolato per le rotte `/api/accessi`, inizializza Swagger,
7
+ * validazione ed error handler, quindi rende disponibile `authorizeAccessi` al resto dell'app.
8
+ * Attendere questa Promise prima di aprire la porta HTTP: durante il bootstrap il middleware
9
+ * restituisce `ACCESSI_AUTH_INITIALIZING` invece di autorizzare richieste parzialmente inizializzate.
10
+ *
11
+ * @param app Applicazione Express ospitante. Non viene sostituita ne vengono intercettate rotte estranee ad Accessi.
12
+ * @param options Configurazione riservata del modulo; proviene normalmente da variabili d'ambiente o secret manager.
13
+ */
3
14
  export declare function initializeAccessiModule(app: Application, options: AccessiOptions): Promise<void>;
4
15
  export { AccessiModule } from "./AccessiModule";
5
16
  export { AccessiDatabaseUpdater } from "./database-updates/AccessiDatabaseUpdater";
17
+ export type { AccessiOptions, EmailOptions, JwtOptions, ExtensionFieldsOptions, PublicAuthRateLimitOptions, PublicAuthRateLimitRuleOptions } from "./AccessiModule";
18
+ export type { PublicRegistrationOptions, FederatedAuthenticationOptions, ServiceTokenOptions } from "./AccessiModule";
19
+ export type { CatalogScriptsOptions, CatalogScriptChecksumPolicy } from "./AccessiModule";
20
+ export { AccessiCatalogMigrator, applyCatalogScripts, listPendingCatalogScripts, splitSqlStatements, analyzeCatalogScript, leadingStatementKeyword, computeCatalogScriptChecksum, discoverCatalogScripts } from "./database-updates/AccessiCatalogMigrator";
21
+ export type { CatalogMigrationReport, CatalogScriptMigration } from "./database-updates/AccessiCatalogMigrator";
22
+ export { ServiceTokenService } from './Services/ServiceTokenService/ServiceTokenService';
23
+ export type { ServiceTokenMetadata, IssuedServiceToken, VerifiedServiceToken, IssueServiceTokenInput } from './Services/ServiceTokenService/ServiceTokenService';
24
+ export { SchemaExportService } from './Services/SchemaExportService/SchemaExportService';
25
+ export type { SchemaDdlResult, SchemaDdlSection, SchemaEntitiesResult } from './Services/SchemaExportService/SchemaExportService';
26
+ export { AdminBootstrapService } from './Services/AdminBootstrapService/AdminBootstrapService';
27
+ export type { BootstrapAdminResult } from './Services/AdminBootstrapService/AdminBootstrapService';
28
+ export { getOrCreateAdminBootstrapToken, getAdminBootstrapToken, clearAdminBootstrapToken, isValidAdminBootstrapToken } from './security/adminBootstrap';
29
+ export { ServiceTokenGuard, RequireServiceTokenScopes, getAccessiServiceToken } from './security/serviceTokenGuard';
30
+ export { assertEmailConfigured, isEmailConfigured, AccessiEmailNotConfiguredError, ACCESSI_EMAIL_NOT_CONFIGURED } from './security/emailConfiguration';
31
+ export { FederatedAuthService } from './federated-auth/FederatedAuthService';
32
+ export type { FederatedAuthenticationResult, FederatedIdentity, FederatedProvider, VerifiedFederatedIdentity } from './federated-auth/FederatedAuthTypes';
6
33
  export * from "./Dtos";
7
34
  export { authorizeAccessi, authenticateGen } from "./middleware/authenticateGen";
8
35
  export { accessiRequirement } from "./middleware/accessiRequirements";
36
+ export { registerAccessiModuleServices, getAccessiModuleServices, ACCESSI_MODULE_SERVICES_LOCALS_KEY } from "./accessiRuntime";
37
+ export type { AccessiModuleServices } from "./accessiRuntime";
9
38
  export type { AccessiAuthorizationOptions, AccessiRequirementNode, AccessiCustomRequirementContext, AccessiCustomRequirementHandler } from "./middleware/accessiRequirements";
@@ -22,23 +22,45 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
22
22
  step((generator = generator.apply(thisArg, _arguments || [])).next());
23
23
  });
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.accessiRequirement = exports.authenticateGen = exports.authorizeAccessi = exports.AccessiDatabaseUpdater = exports.AccessiModule = void 0;
29
+ exports.ACCESSI_MODULE_SERVICES_LOCALS_KEY = exports.getAccessiModuleServices = exports.registerAccessiModuleServices = exports.accessiRequirement = exports.authenticateGen = exports.authorizeAccessi = exports.FederatedAuthService = exports.ACCESSI_EMAIL_NOT_CONFIGURED = exports.AccessiEmailNotConfiguredError = exports.isEmailConfigured = exports.assertEmailConfigured = exports.getAccessiServiceToken = exports.RequireServiceTokenScopes = exports.ServiceTokenGuard = exports.isValidAdminBootstrapToken = exports.clearAdminBootstrapToken = exports.getAdminBootstrapToken = exports.getOrCreateAdminBootstrapToken = exports.AdminBootstrapService = exports.SchemaExportService = exports.ServiceTokenService = exports.discoverCatalogScripts = exports.computeCatalogScriptChecksum = exports.leadingStatementKeyword = exports.analyzeCatalogScript = exports.splitSqlStatements = exports.listPendingCatalogScripts = exports.applyCatalogScripts = exports.AccessiCatalogMigrator = exports.AccessiDatabaseUpdater = exports.AccessiModule = void 0;
27
30
  exports.initializeAccessiModule = initializeAccessiModule;
28
- const common_1 = require("@nestjs/common");
31
+ const express_1 = __importDefault(require("express"));
29
32
  const core_1 = require("@nestjs/core");
30
33
  const platform_express_1 = require("@nestjs/platform-express");
31
34
  const AccessiModule_1 = require("./AccessiModule");
32
35
  const Logger_1 = require("../Logger");
33
36
  const AuthService_1 = require("./Services/AuthService/AuthService");
37
+ const SwaggerConfig_1 = require("../swagger/SwaggerConfig");
34
38
  const authenticateGen_1 = require("./middleware/authenticateGen");
39
+ const accessiRuntime_1 = require("./accessiRuntime");
40
+ const startupLog_1 = require("./startupLog");
41
+ const accessiValidation_1 = require("./security/accessiValidation");
42
+ const AccessiHttpExceptionFilter_1 = require("./security/AccessiHttpExceptionFilter");
43
+ const emailConfiguration_1 = require("./security/emailConfiguration");
35
44
  function describeDatabaseTarget(options) {
36
45
  var _a, _b, _c, _d;
37
46
  const dbOptions = options.databaseOptions;
38
47
  return `${(_a = dbOptions.host) !== null && _a !== void 0 ? _a : "?"}:${(_b = dbOptions.port) !== null && _b !== void 0 ? _b : "?"} -> ${(_c = dbOptions.database) !== null && _c !== void 0 ? _c : "?"} as ${(_d = dbOptions.user) !== null && _d !== void 0 ? _d : "?"}`;
39
48
  }
49
+ /**
50
+ * Monta il modulo Accessi in un'applicazione Express gia esistente.
51
+ *
52
+ * Il bootstrap crea un host Nest isolato per le rotte `/api/accessi`, inizializza Swagger,
53
+ * validazione ed error handler, quindi rende disponibile `authorizeAccessi` al resto dell'app.
54
+ * Attendere questa Promise prima di aprire la porta HTTP: durante il bootstrap il middleware
55
+ * restituisce `ACCESSI_AUTH_INITIALIZING` invece di autorizzare richieste parzialmente inizializzate.
56
+ *
57
+ * @param app Applicazione Express ospitante. Non viene sostituita ne vengono intercettate rotte estranee ad Accessi.
58
+ * @param options Configurazione riservata del modulo; proviene normalmente da variabili d'ambiente o secret manager.
59
+ */
40
60
  function initializeAccessiModule(app, options) {
41
61
  return __awaiter(this, void 0, void 0, function* () {
62
+ // Il servizio email e obbligatorio: reset password, 2FA e creazione utente ne dipendono.
63
+ (0, emailConfiguration_1.assertEmailConfigured)(options);
42
64
  const logger = new Logger_1.Logger("initializeAccessiModule");
43
65
  (0, authenticateGen_1.beginAccessiAuthInitialization)();
44
66
  const startedAt = performance.now();
@@ -46,26 +68,36 @@ function initializeAccessiModule(app, options) {
46
68
  logger.info("Inizializzazione modulo accessi avviata.");
47
69
  logger.info(`Target database accessi: ${describeDatabaseTarget(options)}`);
48
70
  logger.info(`Configurazione accessi: autoUpdateDatabase=${options.autoUpdateDatabase !== false}, legacyPasswordMigrationOnStartup=${options.legacyPasswordMigrationOnStartup !== false}`);
49
- // Creiamo un'istanza Express separata per NestJS
50
- const nestExpressInstance = new platform_express_1.ExpressAdapter(app);
51
- // Creiamo l'app NestJS attaccata a Express
71
+ const nestHostApp = (0, express_1.default)();
72
+ const isNestRoute = (path) => path === "/api/accessi" ||
73
+ path.startsWith("/api/accessi/") ||
74
+ path === "/accessi/swagger" ||
75
+ path.startsWith("/accessi/swagger/") ||
76
+ path === "/accessi/swagger.json" ||
77
+ path === "/accessi/swagger-json";
78
+ app.use((req, res, next) => {
79
+ if (!isNestRoute(req.path)) {
80
+ return next();
81
+ }
82
+ return nestHostApp(req, res, next);
83
+ });
84
+ const nestExpressInstance = new platform_express_1.ExpressAdapter(nestHostApp);
52
85
  const nestApp = yield core_1.NestFactory.create(AccessiModule_1.AccessiModule.forRoot(options), nestExpressInstance, {
53
86
  bufferLogs: true
54
87
  });
55
88
  logger.info("Applicazione Nest accessi creata.");
56
- nestApp.enableCors();
57
- nestApp.useGlobalPipes(new common_1.ValidationPipe({
58
- whitelist: true,
59
- forbidNonWhitelisted: true,
60
- transform: true,
61
- transformOptions: {
62
- enableImplicitConversion: true,
63
- },
64
- }));
89
+ nestApp.enableCors({ exposedHeaders: ['X-Total-Count'] });
90
+ nestApp.useGlobalPipes((0, accessiValidation_1.createAccessiValidationPipe)());
91
+ nestApp.useGlobalFilters(new AccessiHttpExceptionFilter_1.AccessiHttpExceptionFilter());
65
92
  nestApp.setGlobalPrefix('api', {
66
93
  exclude: ['/swagger', '/swagger/(.*)']
67
94
  });
68
- // Note: Swagger setup is now handled by the unified module
95
+ (0, SwaggerConfig_1.setupSwagger)(nestApp, {
96
+ swaggerPath: "accessi/swagger",
97
+ swaggerJsonPath: "accessi/swagger.json",
98
+ title: "Accessi API Documentation",
99
+ description: "API del modulo accessi",
100
+ });
69
101
  logger.info("Avvio init del modulo accessi.");
70
102
  yield nestApp.init();
71
103
  logger.info("Init del modulo accessi completata.");
@@ -75,15 +107,18 @@ function initializeAccessiModule(app, options) {
75
107
  yield passwordMigrationService.migrateLegacyEncryptedPasswords();
76
108
  logger.info("Migrazione password legacy accessi completata.");
77
109
  }
78
- const accessiAuthService = nestApp.get(authenticateGen_1.AuthenticateGenService);
79
- app.locals.accessiAuthService = accessiAuthService;
80
- (0, authenticateGen_1.setAccessiAuthService)(accessiAuthService);
110
+ const accessiServices = (0, accessiRuntime_1.registerAccessiModuleServices)(app, nestApp);
111
+ app.locals.accessiAuthService = accessiServices.authenticateGenService;
112
+ (0, authenticateGen_1.setAccessiAuthService)(accessiServices.authenticateGenService);
113
+ (0, startupLog_1.logAccessiStartup)(options);
81
114
  const elapsedMs = performance.now() - startedAt;
82
115
  logger.info(`Accessi initialized. Tempo totale bootstrap: ${elapsedMs.toFixed(2)} ms`);
83
116
  }
84
117
  catch (error) {
85
118
  (0, authenticateGen_1.failAccessiAuthInitialization)(error);
86
- logger.error("Errore in initialize AccessiModule:", error);
119
+ logger.error("Errore in initialize AccessiModule:", error instanceof Error
120
+ ? { name: error.name, message: error.message, stack: error.stack }
121
+ : { error: String(error) });
87
122
  throw error;
88
123
  }
89
124
  });
@@ -92,10 +127,45 @@ var AccessiModule_2 = require("./AccessiModule");
92
127
  Object.defineProperty(exports, "AccessiModule", { enumerable: true, get: function () { return AccessiModule_2.AccessiModule; } });
93
128
  var AccessiDatabaseUpdater_1 = require("./database-updates/AccessiDatabaseUpdater");
94
129
  Object.defineProperty(exports, "AccessiDatabaseUpdater", { enumerable: true, get: function () { return AccessiDatabaseUpdater_1.AccessiDatabaseUpdater; } });
130
+ var AccessiCatalogMigrator_1 = require("./database-updates/AccessiCatalogMigrator");
131
+ Object.defineProperty(exports, "AccessiCatalogMigrator", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.AccessiCatalogMigrator; } });
132
+ Object.defineProperty(exports, "applyCatalogScripts", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.applyCatalogScripts; } });
133
+ Object.defineProperty(exports, "listPendingCatalogScripts", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.listPendingCatalogScripts; } });
134
+ Object.defineProperty(exports, "splitSqlStatements", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.splitSqlStatements; } });
135
+ Object.defineProperty(exports, "analyzeCatalogScript", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.analyzeCatalogScript; } });
136
+ Object.defineProperty(exports, "leadingStatementKeyword", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.leadingStatementKeyword; } });
137
+ Object.defineProperty(exports, "computeCatalogScriptChecksum", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.computeCatalogScriptChecksum; } });
138
+ Object.defineProperty(exports, "discoverCatalogScripts", { enumerable: true, get: function () { return AccessiCatalogMigrator_1.discoverCatalogScripts; } });
139
+ var ServiceTokenService_1 = require("./Services/ServiceTokenService/ServiceTokenService");
140
+ Object.defineProperty(exports, "ServiceTokenService", { enumerable: true, get: function () { return ServiceTokenService_1.ServiceTokenService; } });
141
+ var SchemaExportService_1 = require("./Services/SchemaExportService/SchemaExportService");
142
+ Object.defineProperty(exports, "SchemaExportService", { enumerable: true, get: function () { return SchemaExportService_1.SchemaExportService; } });
143
+ var AdminBootstrapService_1 = require("./Services/AdminBootstrapService/AdminBootstrapService");
144
+ Object.defineProperty(exports, "AdminBootstrapService", { enumerable: true, get: function () { return AdminBootstrapService_1.AdminBootstrapService; } });
145
+ var adminBootstrap_1 = require("./security/adminBootstrap");
146
+ Object.defineProperty(exports, "getOrCreateAdminBootstrapToken", { enumerable: true, get: function () { return adminBootstrap_1.getOrCreateAdminBootstrapToken; } });
147
+ Object.defineProperty(exports, "getAdminBootstrapToken", { enumerable: true, get: function () { return adminBootstrap_1.getAdminBootstrapToken; } });
148
+ Object.defineProperty(exports, "clearAdminBootstrapToken", { enumerable: true, get: function () { return adminBootstrap_1.clearAdminBootstrapToken; } });
149
+ Object.defineProperty(exports, "isValidAdminBootstrapToken", { enumerable: true, get: function () { return adminBootstrap_1.isValidAdminBootstrapToken; } });
150
+ var serviceTokenGuard_1 = require("./security/serviceTokenGuard");
151
+ Object.defineProperty(exports, "ServiceTokenGuard", { enumerable: true, get: function () { return serviceTokenGuard_1.ServiceTokenGuard; } });
152
+ Object.defineProperty(exports, "RequireServiceTokenScopes", { enumerable: true, get: function () { return serviceTokenGuard_1.RequireServiceTokenScopes; } });
153
+ Object.defineProperty(exports, "getAccessiServiceToken", { enumerable: true, get: function () { return serviceTokenGuard_1.getAccessiServiceToken; } });
154
+ var emailConfiguration_2 = require("./security/emailConfiguration");
155
+ Object.defineProperty(exports, "assertEmailConfigured", { enumerable: true, get: function () { return emailConfiguration_2.assertEmailConfigured; } });
156
+ Object.defineProperty(exports, "isEmailConfigured", { enumerable: true, get: function () { return emailConfiguration_2.isEmailConfigured; } });
157
+ Object.defineProperty(exports, "AccessiEmailNotConfiguredError", { enumerable: true, get: function () { return emailConfiguration_2.AccessiEmailNotConfiguredError; } });
158
+ Object.defineProperty(exports, "ACCESSI_EMAIL_NOT_CONFIGURED", { enumerable: true, get: function () { return emailConfiguration_2.ACCESSI_EMAIL_NOT_CONFIGURED; } });
159
+ var FederatedAuthService_1 = require("./federated-auth/FederatedAuthService");
160
+ Object.defineProperty(exports, "FederatedAuthService", { enumerable: true, get: function () { return FederatedAuthService_1.FederatedAuthService; } });
95
161
  __exportStar(require("./Dtos"), exports);
96
162
  var authenticateGen_2 = require("./middleware/authenticateGen");
97
163
  Object.defineProperty(exports, "authorizeAccessi", { enumerable: true, get: function () { return authenticateGen_2.authorizeAccessi; } });
98
164
  Object.defineProperty(exports, "authenticateGen", { enumerable: true, get: function () { return authenticateGen_2.authenticateGen; } });
99
165
  var accessiRequirements_1 = require("./middleware/accessiRequirements");
100
166
  Object.defineProperty(exports, "accessiRequirement", { enumerable: true, get: function () { return accessiRequirements_1.accessiRequirement; } });
167
+ var accessiRuntime_2 = require("./accessiRuntime");
168
+ Object.defineProperty(exports, "registerAccessiModuleServices", { enumerable: true, get: function () { return accessiRuntime_2.registerAccessiModuleServices; } });
169
+ Object.defineProperty(exports, "getAccessiModuleServices", { enumerable: true, get: function () { return accessiRuntime_2.getAccessiModuleServices; } });
170
+ Object.defineProperty(exports, "ACCESSI_MODULE_SERVICES_LOCALS_KEY", { enumerable: true, get: function () { return accessiRuntime_2.ACCESSI_MODULE_SERVICES_LOCALS_KEY; } });
101
171
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessi-module/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Application } from \"express\";\r\nimport { ValidationPipe } from \"@nestjs/common\";\r\nimport { NestFactory } from \"@nestjs/core\";\r\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\r\nimport { AccessiModule, AccessiOptions } from \"./AccessiModule\";\r\nimport { Logger } from \"../Logger\";\r\nimport { AuthService } from \"./Services/AuthService/AuthService\";\r\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n AuthenticateGenService,\n setAccessiAuthService\n} from \"./middleware/authenticateGen\";\n\nfunction describeDatabaseTarget(options: AccessiOptions): string {\n const dbOptions = options.databaseOptions as {\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n };\n\n return `${dbOptions.host ?? \"?\"}:${dbOptions.port ?? \"?\"} -> ${dbOptions.database ?? \"?\"} as ${dbOptions.user ?? \"?\"}`;\n}\n\nexport async function initializeAccessiModule(app: Application, options: AccessiOptions) {\n const logger: Logger = new Logger(\"initializeAccessiModule\");\n beginAccessiAuthInitialization();\n const startedAt = performance.now();\n\n try {\n logger.info(\"Inizializzazione modulo accessi avviata.\");\n logger.info(`Target database accessi: ${describeDatabaseTarget(options)}`);\n logger.info(\n `Configurazione accessi: autoUpdateDatabase=${options.autoUpdateDatabase !== false}, legacyPasswordMigrationOnStartup=${options.legacyPasswordMigrationOnStartup !== false}`\n );\n // Creiamo un'istanza Express separata per NestJS\n const nestExpressInstance = new ExpressAdapter(app);\n\n // Creiamo l'app NestJS attaccata a Express\n const nestApp = await NestFactory.create(AccessiModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n logger.info(\"Applicazione Nest accessi creata.\");\n\n nestApp.enableCors();\n nestApp.useGlobalPipes(\n new ValidationPipe({\n whitelist: true,\r\n forbidNonWhitelisted: true,\r\n transform: true,\r\n transformOptions: {\r\n enableImplicitConversion: true,\r\n },\r\n }),\r\n );\r\n\r\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n // Note: Swagger setup is now handled by the unified module\n logger.info(\"Avvio init del modulo accessi.\");\n await nestApp.init();\n logger.info(\"Init del modulo accessi completata.\");\n if (options.legacyPasswordMigrationOnStartup !== false) {\n logger.info(\"Avvio migrazione password legacy accessi.\");\n const passwordMigrationService = nestApp.get(AuthService);\n await passwordMigrationService.migrateLegacyEncryptedPasswords();\n logger.info(\"Migrazione password legacy accessi completata.\");\n }\n\n const accessiAuthService = nestApp.get(AuthenticateGenService);\n app.locals.accessiAuthService = accessiAuthService;\n setAccessiAuthService(accessiAuthService);\n const elapsedMs = performance.now() - startedAt;\n logger.info(`Accessi initialized. Tempo totale bootstrap: ${elapsedMs.toFixed(2)} ms`);\n\n } catch (error) {\n failAccessiAuthInitialization(error);\n logger.error(\"Errore in initialize AccessiModule:\", error);\n throw error;\r\n }\r\n}\r\n\r\nexport { AccessiModule } from \"./AccessiModule\";\r\nexport { AccessiDatabaseUpdater } from \"./database-updates/AccessiDatabaseUpdater\";\r\nexport * from \"./Dtos\";\r\nexport {\r\n authorizeAccessi,\r\n authenticateGen\r\n} from \"./middleware/authenticateGen\";\r\nexport { accessiRequirement } from \"./middleware/accessiRequirements\";\r\nexport type {\r\n AccessiAuthorizationOptions,\r\n AccessiRequirementNode,\r\n AccessiCustomRequirementContext,\r\n AccessiCustomRequirementHandler\r\n} from \"./middleware/accessiRequirements\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessi-module/index.ts"],"names":[],"mappings":"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","sourcesContent":["import express, { Application, Request } from \"express\";\nimport { NestFactory } from \"@nestjs/core\";\nimport { ExpressAdapter } from \"@nestjs/platform-express\";\nimport { AccessiModule, AccessiOptions } from \"./AccessiModule\";\nimport { Logger } from \"../Logger\";\nimport { AuthService } from \"./Services/AuthService/AuthService\";\nimport { setupSwagger } from \"../swagger/SwaggerConfig\";\nimport {\n beginAccessiAuthInitialization,\n failAccessiAuthInitialization,\n setAccessiAuthService\n} from \"./middleware/authenticateGen\";\nimport { registerAccessiModuleServices } from \"./accessiRuntime\";\nimport { logAccessiStartup } from \"./startupLog\";\nimport { createAccessiValidationPipe } from './security/accessiValidation';\nimport { AccessiHttpExceptionFilter } from './security/AccessiHttpExceptionFilter';\nimport { assertEmailConfigured } from './security/emailConfiguration';\n\nfunction describeDatabaseTarget(options: AccessiOptions): string {\n const dbOptions = options.databaseOptions as {\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n };\n\n return `${dbOptions.host ?? \"?\"}:${dbOptions.port ?? \"?\"} -> ${dbOptions.database ?? \"?\"} as ${dbOptions.user ?? \"?\"}`;\n}\n\n/**\n * Monta il modulo Accessi in un'applicazione Express gia esistente.\n *\n * Il bootstrap crea un host Nest isolato per le rotte `/api/accessi`, inizializza Swagger,\n * validazione ed error handler, quindi rende disponibile `authorizeAccessi` al resto dell'app.\n * Attendere questa Promise prima di aprire la porta HTTP: durante il bootstrap il middleware\n * restituisce `ACCESSI_AUTH_INITIALIZING` invece di autorizzare richieste parzialmente inizializzate.\n *\n * @param app Applicazione Express ospitante. Non viene sostituita ne vengono intercettate rotte estranee ad Accessi.\n * @param options Configurazione riservata del modulo; proviene normalmente da variabili d'ambiente o secret manager.\n */\nexport async function initializeAccessiModule(app: Application, options: AccessiOptions): Promise<void> {\n // Il servizio email e obbligatorio: reset password, 2FA e creazione utente ne dipendono.\n assertEmailConfigured(options);\n const logger: Logger = new Logger(\"initializeAccessiModule\");\n beginAccessiAuthInitialization();\n const startedAt = performance.now();\n\n try {\n logger.info(\"Inizializzazione modulo accessi avviata.\");\n logger.info(`Target database accessi: ${describeDatabaseTarget(options)}`);\n logger.info(\n `Configurazione accessi: autoUpdateDatabase=${options.autoUpdateDatabase !== false}, legacyPasswordMigrationOnStartup=${options.legacyPasswordMigrationOnStartup !== false}`\n );\n const nestHostApp = express();\n const isNestRoute = (path: string) =>\n path === \"/api/accessi\" ||\n path.startsWith(\"/api/accessi/\") ||\n path === \"/accessi/swagger\" ||\n path.startsWith(\"/accessi/swagger/\") ||\n path === \"/accessi/swagger.json\" ||\n path === \"/accessi/swagger-json\";\n\n app.use((req: Request, res, next) => {\n if (!isNestRoute(req.path)) {\n return next();\n }\n\n return nestHostApp(req, res, next);\n });\n\n const nestExpressInstance = new ExpressAdapter(nestHostApp);\n\n const nestApp = await NestFactory.create(AccessiModule.forRoot(options), nestExpressInstance, {\n bufferLogs: true\n });\n logger.info(\"Applicazione Nest accessi creata.\");\n\n nestApp.enableCors({ exposedHeaders: ['X-Total-Count'] });\n nestApp.useGlobalPipes(createAccessiValidationPipe());\n nestApp.useGlobalFilters(new AccessiHttpExceptionFilter());\n\n nestApp.setGlobalPrefix('api', {\n exclude: ['/swagger', '/swagger/(.*)']\n });\n\n setupSwagger(nestApp, {\n swaggerPath: \"accessi/swagger\",\n swaggerJsonPath: \"accessi/swagger.json\",\n title: \"Accessi API Documentation\",\n description: \"API del modulo accessi\",\n });\n logger.info(\"Avvio init del modulo accessi.\");\n await nestApp.init();\n logger.info(\"Init del modulo accessi completata.\");\n if (options.legacyPasswordMigrationOnStartup !== false) {\n logger.info(\"Avvio migrazione password legacy accessi.\");\n const passwordMigrationService = nestApp.get(AuthService);\n await passwordMigrationService.migrateLegacyEncryptedPasswords();\n logger.info(\"Migrazione password legacy accessi completata.\");\n }\n\n const accessiServices = registerAccessiModuleServices(app, nestApp);\n app.locals.accessiAuthService = accessiServices.authenticateGenService;\n setAccessiAuthService(accessiServices.authenticateGenService);\n logAccessiStartup(options);\n const elapsedMs = performance.now() - startedAt;\n logger.info(`Accessi initialized. Tempo totale bootstrap: ${elapsedMs.toFixed(2)} ms`);\n\n } catch (error) {\n failAccessiAuthInitialization(error);\n logger.error(\n \"Errore in initialize AccessiModule:\",\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : { error: String(error) }\n );\n throw error;\n }\n}\n\nexport { AccessiModule } from \"./AccessiModule\";\nexport { AccessiDatabaseUpdater } from \"./database-updates/AccessiDatabaseUpdater\";\nexport type { AccessiOptions, EmailOptions, JwtOptions, ExtensionFieldsOptions, PublicAuthRateLimitOptions, PublicAuthRateLimitRuleOptions } from \"./AccessiModule\";\nexport type { PublicRegistrationOptions, FederatedAuthenticationOptions, ServiceTokenOptions } from \"./AccessiModule\";\nexport type { CatalogScriptsOptions, CatalogScriptChecksumPolicy } from \"./AccessiModule\";\nexport {\n AccessiCatalogMigrator,\n applyCatalogScripts,\n listPendingCatalogScripts,\n splitSqlStatements,\n analyzeCatalogScript,\n leadingStatementKeyword,\n computeCatalogScriptChecksum,\n discoverCatalogScripts\n} from \"./database-updates/AccessiCatalogMigrator\";\nexport type { CatalogMigrationReport, CatalogScriptMigration } from \"./database-updates/AccessiCatalogMigrator\";\nexport { ServiceTokenService } from './Services/ServiceTokenService/ServiceTokenService';\nexport type {\n ServiceTokenMetadata,\n IssuedServiceToken,\n VerifiedServiceToken,\n IssueServiceTokenInput\n} from './Services/ServiceTokenService/ServiceTokenService';\nexport { SchemaExportService } from './Services/SchemaExportService/SchemaExportService';\nexport type { SchemaDdlResult, SchemaDdlSection, SchemaEntitiesResult } from './Services/SchemaExportService/SchemaExportService';\nexport { AdminBootstrapService } from './Services/AdminBootstrapService/AdminBootstrapService';\nexport type { BootstrapAdminResult } from './Services/AdminBootstrapService/AdminBootstrapService';\nexport {\n getOrCreateAdminBootstrapToken,\n getAdminBootstrapToken,\n clearAdminBootstrapToken,\n isValidAdminBootstrapToken\n} from './security/adminBootstrap';\nexport { ServiceTokenGuard, RequireServiceTokenScopes, getAccessiServiceToken } from './security/serviceTokenGuard';\nexport { assertEmailConfigured, isEmailConfigured, AccessiEmailNotConfiguredError, ACCESSI_EMAIL_NOT_CONFIGURED } from './security/emailConfiguration';\nexport { FederatedAuthService } from './federated-auth/FederatedAuthService';\nexport type { FederatedAuthenticationResult, FederatedIdentity, FederatedProvider, VerifiedFederatedIdentity } from './federated-auth/FederatedAuthTypes';\nexport * from \"./Dtos\";\nexport {\n authorizeAccessi,\n authenticateGen\n} from \"./middleware/authenticateGen\";\nexport { accessiRequirement } from \"./middleware/accessiRequirements\";\nexport {\n registerAccessiModuleServices,\n getAccessiModuleServices,\n ACCESSI_MODULE_SERVICES_LOCALS_KEY\n} from \"./accessiRuntime\";\nexport type { AccessiModuleServices } from \"./accessiRuntime\";\nexport type {\n AccessiAuthorizationOptions,\n AccessiRequirementNode,\n AccessiCustomRequirementContext,\n AccessiCustomRequirementHandler\n} from \"./middleware/accessiRequirements\";\n"]}
@@ -1,5 +1,5 @@
1
1
  import { CanActivate, ExecutionContext } from '@nestjs/common';
2
- import { AccessiOptions } from '../AccessiModule';
2
+ import type { AccessiOptions } from '../AccessiModule';
3
3
  import { UserService } from '../Services/UserService/UserService';
4
4
  export declare class JwtSimpleGuard implements CanActivate {
5
5
  private readonly accessiOptions;
@@ -59,6 +59,7 @@ const common_1 = require("@nestjs/common");
59
59
  const jwt = __importStar(require("jsonwebtoken"));
60
60
  const UserService_1 = require("../Services/UserService/UserService");
61
61
  const authenticatedToken_1 = require("../security/authenticatedToken");
62
+ const passwordResetToken_1 = require("../security/passwordResetToken");
62
63
  let JwtSimpleGuard = class JwtSimpleGuard {
63
64
  constructor(accessiOptions, userService) {
64
65
  this.accessiOptions = accessiOptions;
@@ -66,26 +67,34 @@ let JwtSimpleGuard = class JwtSimpleGuard {
66
67
  }
67
68
  canActivate(context) {
68
69
  return __awaiter(this, void 0, void 0, function* () {
69
- var _a, _b;
70
70
  const request = context.switchToHttp().getRequest();
71
71
  const authHeader = request.headers['authorization'];
72
72
  if (!authHeader)
73
73
  throw new common_1.UnauthorizedException('Token mancante.');
74
- const token = authHeader.split(' ')[1];
74
+ const token = (0, authenticatedToken_1.extractAccessiBearerToken)(authHeader);
75
75
  if (!token)
76
76
  throw new common_1.UnauthorizedException('Formato token non valido.');
77
77
  try {
78
- const secret = ((_b = (_a = this.accessiOptions) === null || _a === void 0 ? void 0 : _a.jwtOptions) === null || _b === void 0 ? void 0 : _b.secret) || process.env.ACC_JWT_SECRET;
79
- if (!secret) {
78
+ let secret;
79
+ try {
80
+ secret = (0, passwordResetToken_1.getAccessiJwtSecret)(this.accessiOptions, 'access');
81
+ }
82
+ catch (_a) {
80
83
  throw new common_1.InternalServerErrorException('JWT secret non configurato.');
81
84
  }
82
- const payload = jwt.verify(token, secret);
85
+ let payload;
86
+ try {
87
+ payload = jwt.verify(token, secret, { algorithms: ['HS256'] });
88
+ }
89
+ catch (_b) {
90
+ throw new common_1.UnauthorizedException('Token non valido o scaduto.');
91
+ }
83
92
  const codiceUtente = (0, authenticatedToken_1.resolveCodiceUtenteFromTokenPayload)(payload);
84
93
  if (!codiceUtente) {
85
94
  throw new common_1.UnauthorizedException('Token privo di un utente valido.');
86
95
  }
87
96
  const currentUser = yield this.userService.getAuthenticatedUserSnapshot(codiceUtente);
88
- if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser)) {
97
+ if (!(0, authenticatedToken_1.isAuthenticatedUserEnabledForJwt)(currentUser) || !(0, authenticatedToken_1.isAccessiTokenAllowedForUser)(payload, currentUser)) {
89
98
  throw new common_1.UnauthorizedException('Utente non piu autorizzato.');
90
99
  }
91
100
  request.user = (0, authenticatedToken_1.buildAuthenticatedTokenPayload)(payload, currentUser);
@@ -95,7 +104,7 @@ let JwtSimpleGuard = class JwtSimpleGuard {
95
104
  if (error instanceof common_1.InternalServerErrorException || error instanceof common_1.UnauthorizedException) {
96
105
  throw error;
97
106
  }
98
- throw new common_1.UnauthorizedException('Token non valido o scaduto.');
107
+ throw new common_1.InternalServerErrorException('Errore durante la verifica dell utente.');
99
108
  }
100
109
  });
101
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../../src/accessi-module/jwt/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,kDAAoC;AAEpC,qEAAkE;AAClE,uEAIwC;AAGjC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAC8C,cAA8B,EACzD,WAAwB;QADG,mBAAc,GAAd,cAAc,CAAgB;QACzD,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEE,WAAW,CAAC,OAAyB;;;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;YAEzE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,cAAc,0CAAE,UAAU,0CAAE,MAAM,KAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBACrF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,qCAA4B,CAAC,6BAA6B,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,YAAY,GAAG,IAAA,wDAAmC,EAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,8BAAqB,CAAC,kCAAkC,CAAC,CAAC;gBACtE,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAA,qDAAgC,EAAC,WAAW,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBAED,OAAO,CAAC,IAAI,GAAG,IAAA,mDAA8B,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qCAA4B,IAAI,KAAK,YAAY,8BAAqB,EAAE,CAAC;oBAC5F,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAxCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CACI,yBAAW;GAHhC,cAAc,CAwC1B","sourcesContent":["import {\r\n CanActivate,\r\n ExecutionContext,\r\n Inject,\r\n Injectable,\r\n InternalServerErrorException,\r\n UnauthorizedException,\r\n} from '@nestjs/common';\r\nimport * as jwt from 'jsonwebtoken';\r\nimport { AccessiOptions } from '../AccessiModule';\r\nimport { UserService } from '../Services/UserService/UserService';\r\nimport {\r\n buildAuthenticatedTokenPayload,\r\n isAuthenticatedUserEnabledForJwt,\r\n resolveCodiceUtenteFromTokenPayload,\r\n} from '../security/authenticatedToken';\r\n\r\n@Injectable()\r\nexport class JwtSimpleGuard implements CanActivate {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n private readonly userService: UserService,\r\n ) {}\r\n\r\n async canActivate(context: ExecutionContext): Promise<boolean> {\r\n const request = context.switchToHttp().getRequest();\r\n\r\n const authHeader = request.headers['authorization'];\r\n if (!authHeader) throw new UnauthorizedException('Token mancante.');\r\n\r\n const token = authHeader.split(' ')[1];\r\n if (!token) throw new UnauthorizedException('Formato token non valido.');\r\n\r\n try {\r\n const secret = this.accessiOptions?.jwtOptions?.secret || process.env.ACC_JWT_SECRET;\r\n if (!secret) {\r\n throw new InternalServerErrorException('JWT secret non configurato.');\r\n }\r\n const payload = jwt.verify(token, secret);\r\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(payload);\r\n if (!codiceUtente) {\r\n throw new UnauthorizedException('Token privo di un utente valido.');\r\n }\r\n\r\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\r\n if (!isAuthenticatedUserEnabledForJwt(currentUser)) {\r\n throw new UnauthorizedException('Utente non piu autorizzato.');\r\n }\r\n\r\n request.user = buildAuthenticatedTokenPayload(payload, currentUser);\r\n return true;\r\n } catch (error) {\r\n if (error instanceof InternalServerErrorException || error instanceof UnauthorizedException) {\r\n throw error;\r\n }\r\n throw new UnauthorizedException('Token non valido o scaduto.');\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"jwt.strategy.js","sourceRoot":"","sources":["../../../src/accessi-module/jwt/jwt.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,kDAAoC;AAEpC,qEAAkE;AAClE,uEAMwC;AACxC,uEAAqE;AAG9D,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAC8C,cAA8B,EACzD,WAAwB;QADG,mBAAc,GAAd,cAAc,CAAgB;QACzD,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEE,WAAW,CAAC,OAAyB;;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,8BAAqB,CAAC,iBAAiB,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,IAAA,8CAAyB,EAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;YAEzE,IAAI,CAAC;gBACH,IAAI,MAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,GAAG,IAAA,wCAAmB,EAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBAC9D,CAAC;gBAAC,WAAM,CAAC;oBACP,MAAM,IAAI,qCAA4B,CAAC,6BAA6B,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,OAAgC,CAAC;gBACrC,IAAI,CAAC;oBACC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrE,CAAC;gBAAC,WAAM,CAAC;oBACP,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM,YAAY,GAAG,IAAA,wDAAmC,EAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,8BAAqB,CAAC,kCAAkC,CAAC,CAAC;gBACtE,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,IAAA,qDAAgC,EAAC,WAAW,CAAC,IAAI,CAAC,IAAA,iDAA4B,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;oBAC1G,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;gBACjE,CAAC;gBAED,OAAO,CAAC,IAAI,GAAG,IAAA,mDAA8B,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qCAA4B,IAAI,KAAK,YAAY,8BAAqB,EAAE,CAAC;oBAC5F,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,qCAA4B,CAAC,yCAAyC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AA/CY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CACI,yBAAW;GAHhC,cAAc,CA+C1B","sourcesContent":["import {\n CanActivate,\n ExecutionContext,\n Inject,\n Injectable,\n InternalServerErrorException,\n UnauthorizedException,\n} from '@nestjs/common';\nimport * as jwt from 'jsonwebtoken';\nimport type { AccessiOptions } from '../AccessiModule';\nimport { UserService } from '../Services/UserService/UserService';\nimport {\n buildAuthenticatedTokenPayload,\n extractAccessiBearerToken,\n isAuthenticatedUserEnabledForJwt,\n isAccessiTokenAllowedForUser,\n resolveCodiceUtenteFromTokenPayload,\n} from '../security/authenticatedToken';\nimport { getAccessiJwtSecret } from '../security/passwordResetToken';\n\n@Injectable()\nexport class JwtSimpleGuard implements CanActivate {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly userService: UserService,\n ) {}\n\n async canActivate(context: ExecutionContext): Promise<boolean> {\n const request = context.switchToHttp().getRequest();\n\n const authHeader = request.headers['authorization'];\n if (!authHeader) throw new UnauthorizedException('Token mancante.');\n\n const token = extractAccessiBearerToken(authHeader);\n if (!token) throw new UnauthorizedException('Formato token non valido.');\n\n try {\n let secret: string;\n try {\n secret = getAccessiJwtSecret(this.accessiOptions, 'access');\n } catch {\n throw new InternalServerErrorException('JWT secret non configurato.');\n }\n let payload: jwt.JwtPayload | string;\n try {\n payload = jwt.verify(token, secret, { algorithms: ['HS256'] });\n } catch {\n throw new UnauthorizedException('Token non valido o scaduto.');\n }\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(payload);\n if (!codiceUtente) {\n throw new UnauthorizedException('Token privo di un utente valido.');\n }\n\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\n if (!isAuthenticatedUserEnabledForJwt(currentUser) || !isAccessiTokenAllowedForUser(payload, currentUser)) {\n throw new UnauthorizedException('Utente non piu autorizzato.');\n }\n\n request.user = buildAuthenticatedTokenPayload(payload, currentUser);\n return true;\n } catch (error) {\n if (error instanceof InternalServerErrorException || error instanceof UnauthorizedException) {\n throw error;\n }\n throw new InternalServerErrorException('Errore durante la verifica dell utente.');\n }\n }\n}\n"]}
@@ -1,42 +1,57 @@
1
1
  import { Request } from "express";
2
+ /** Grant effettivo letto da Accessi. Il confronto usa `tipoAbilitazione >= minPermissionLevel`. */
2
3
  export type AccessiGrant = {
3
4
  codiceMenu: string;
4
5
  tipoAbilitazione?: number;
5
6
  };
7
+ /** Risultato memoizzato durante una singola autorizzazione. Non modificarlo nel custom handler. */
6
8
  export type GrantsResult = {
7
9
  grants?: AccessiGrant[];
8
10
  [key: string]: unknown;
9
11
  };
12
+ /** Richiede l'accesso a un menu con almeno il livello indicato. Valori convenzionali: 10 lettura, 20 scrittura. */
10
13
  export type AccessiPermissionRequirement = {
11
14
  type: "permission";
12
15
  menuCode: string;
13
16
  minPermissionLevel: number;
14
17
  };
18
+ /** Tutti i requisiti figli devono essere soddisfatti. Una lista vuota e una configurazione non valida. */
15
19
  export type AccessiAllRequirement = {
16
20
  type: "and";
17
21
  requirements: AccessiRequirementNode[];
18
22
  };
23
+ /** Almeno un requisito figlio deve essere soddisfatto. Una lista vuota e una configurazione non valida. */
19
24
  export type AccessiAnyRequirement = {
20
25
  type: "or";
21
26
  requirements: AccessiRequirementNode[];
22
27
  };
28
+ /** Nega il risultato del requisito figlio. Usarlo con cautela per non creare policy difficili da verificare. */
23
29
  export type AccessiNotRequirement = {
24
30
  type: "not";
25
31
  requirement: AccessiRequirementNode;
26
32
  };
33
+ /** Delega una condizione applicativa a un handler registrato dal backend. */
27
34
  export type AccessiCustomRequirement = {
28
35
  type: "custom";
29
36
  key: string;
30
37
  payload?: unknown;
31
38
  };
39
+ /** Nodo composabile dell'albero di autorizzazione valutato da `authorizeAccessi`. */
32
40
  export type AccessiRequirementNode = AccessiPermissionRequirement | AccessiAllRequirement | AccessiAnyRequirement | AccessiNotRequirement | AccessiCustomRequirement;
41
+ /** Contesto in sola lettura consegnato a un requisito personalizzato. */
33
42
  export type AccessiCustomRequirementContext = {
34
43
  req: Request;
35
- decodedToken: any;
44
+ decodedToken: Record<string, unknown>;
36
45
  userCode: number;
37
46
  getGrantsResult: () => Promise<GrantsResult>;
38
47
  };
48
+ /** Handler applicativo per `accessiRequirement.custom`; `false` nega la richiesta, un errore produce 500. */
39
49
  export type AccessiCustomRequirementHandler = (context: AccessiCustomRequirementContext, payload?: unknown) => boolean | Promise<boolean>;
50
+ /**
51
+ * Policy passata a `authorizeAccessi`.
52
+ * `requirements` e la forma compatibile storica ed equivale a un AND; `requirementTree`
53
+ * permette policy annidate e ha precedenza quando entrambi sono presenti.
54
+ */
40
55
  export type AccessiAuthorizationOptions = {
41
56
  requirements?: {
42
57
  menuCode: string;
@@ -45,10 +60,12 @@ export type AccessiAuthorizationOptions = {
45
60
  requirementTree?: AccessiRequirementNode;
46
61
  customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;
47
62
  };
63
+ /** Errore di configurazione di una policy, distinto dal normale diniego 403. */
48
64
  export declare class RequirementEvaluationError extends Error {
49
65
  readonly code: string;
50
66
  constructor(code: string, message: string);
51
67
  }
68
+ /** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */
52
69
  export declare const accessiRequirement: {
53
70
  permission: (menuCode: string, minPermissionLevel: number) => AccessiPermissionRequirement;
54
71
  and: (...requirements: AccessiRequirementNode[]) => AccessiAllRequirement;
@@ -56,5 +73,10 @@ export declare const accessiRequirement: {
56
73
  not: (requirement: AccessiRequirementNode) => AccessiNotRequirement;
57
74
  custom: (key: string, payload?: unknown) => AccessiCustomRequirement;
58
75
  };
76
+ /** Normalizza la forma compatibile `requirements` nell'albero interno. */
59
77
  export declare function buildRequirementTree(options?: AccessiAuthorizationOptions): AccessiRequirementNode | undefined;
78
+ /**
79
+ * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.
80
+ * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.
81
+ */
60
82
  export declare function evaluateRequirement(requirement: AccessiRequirementNode, context: AccessiCustomRequirementContext, options?: AccessiAuthorizationOptions): Promise<boolean>;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.accessiRequirement = exports.RequirementEvaluationError = void 0;
13
13
  exports.buildRequirementTree = buildRequirementTree;
14
14
  exports.evaluateRequirement = evaluateRequirement;
15
+ /** Errore di configurazione di una policy, distinto dal normale diniego 403. */
15
16
  class RequirementEvaluationError extends Error {
16
17
  constructor(code, message) {
17
18
  super(message);
@@ -23,6 +24,7 @@ exports.RequirementEvaluationError = RequirementEvaluationError;
23
24
  function requirementError(code, message) {
24
25
  return new RequirementEvaluationError(code, message);
25
26
  }
27
+ /** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */
26
28
  exports.accessiRequirement = {
27
29
  permission: (menuCode, minPermissionLevel) => ({
28
30
  type: "permission",
@@ -47,6 +49,7 @@ exports.accessiRequirement = {
47
49
  payload,
48
50
  }),
49
51
  };
52
+ /** Normalizza la forma compatibile `requirements` nell'albero interno. */
50
53
  function buildRequirementTree(options) {
51
54
  var _a;
52
55
  if (options === null || options === void 0 ? void 0 : options.requirementTree)
@@ -57,6 +60,10 @@ function buildRequirementTree(options) {
57
60
  const nodes = requirements.map((requirement) => exports.accessiRequirement.permission(requirement.menuCode, requirement.minPermissionLevel));
58
61
  return exports.accessiRequirement.and(...nodes);
59
62
  }
63
+ /**
64
+ * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.
65
+ * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.
66
+ */
60
67
  function evaluateRequirement(requirement, context, options) {
61
68
  return __awaiter(this, void 0, void 0, function* () {
62
69
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"accessiRequirements.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/accessiRequirements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\r\n\r\nexport type AccessiGrant = {\r\n codiceMenu: string;\r\n tipoAbilitazione?: number;\r\n};\r\n\r\nexport type GrantsResult = {\r\n grants?: AccessiGrant[];\r\n [key: string]: unknown;\r\n};\r\n\r\nexport type AccessiPermissionRequirement = {\r\n type: \"permission\";\r\n menuCode: string;\r\n minPermissionLevel: number;\r\n};\r\n\r\nexport type AccessiAllRequirement = {\r\n type: \"and\";\r\n requirements: AccessiRequirementNode[];\r\n};\r\n\r\nexport type AccessiAnyRequirement = {\r\n type: \"or\";\r\n requirements: AccessiRequirementNode[];\r\n};\r\n\r\nexport type AccessiNotRequirement = {\r\n type: \"not\";\r\n requirement: AccessiRequirementNode;\r\n};\r\n\r\nexport type AccessiCustomRequirement = {\r\n type: \"custom\";\r\n key: string;\r\n payload?: unknown;\r\n};\r\n\r\nexport type AccessiRequirementNode =\r\n | AccessiPermissionRequirement\r\n | AccessiAllRequirement\r\n | AccessiAnyRequirement\r\n | AccessiNotRequirement\r\n | AccessiCustomRequirement;\r\n\r\nexport type AccessiCustomRequirementContext = {\r\n req: Request;\r\n decodedToken: any;\r\n userCode: number;\r\n getGrantsResult: () => Promise<GrantsResult>;\r\n};\r\n\r\nexport type AccessiCustomRequirementHandler = (\r\n context: AccessiCustomRequirementContext,\r\n payload?: unknown\r\n) => boolean | Promise<boolean>;\r\n\r\nexport type AccessiAuthorizationOptions = {\r\n requirements?: { menuCode: string; minPermissionLevel: number }[];\r\n requirementTree?: AccessiRequirementNode;\r\n customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;\r\n};\r\n\r\nexport class RequirementEvaluationError extends Error {\r\n constructor(public readonly code: string, message: string) {\r\n super(message);\r\n this.name = \"RequirementEvaluationError\";\r\n }\r\n}\r\n\r\nfunction requirementError(code: string, message: string): RequirementEvaluationError {\r\n return new RequirementEvaluationError(code, message);\r\n}\r\n\r\nexport const accessiRequirement = {\r\n permission: (\r\n menuCode: string,\r\n minPermissionLevel: number\r\n ): AccessiPermissionRequirement => ({\r\n type: \"permission\",\r\n menuCode,\r\n minPermissionLevel,\r\n }),\r\n and: (...requirements: AccessiRequirementNode[]): AccessiAllRequirement => ({\r\n type: \"and\",\r\n requirements,\r\n }),\r\n or: (...requirements: AccessiRequirementNode[]): AccessiAnyRequirement => ({\r\n type: \"or\",\r\n requirements,\r\n }),\r\n not: (requirement: AccessiRequirementNode): AccessiNotRequirement => ({\r\n type: \"not\",\r\n requirement,\r\n }),\r\n custom: (key: string, payload?: unknown): AccessiCustomRequirement => ({\r\n type: \"custom\",\r\n key,\r\n payload,\r\n }),\r\n};\r\n\r\nexport function buildRequirementTree(\r\n options?: AccessiAuthorizationOptions\r\n): AccessiRequirementNode | undefined {\r\n if (options?.requirementTree) return options.requirementTree;\r\n\r\n const requirements = options?.requirements ?? [];\r\n if (requirements.length === 0) return undefined;\r\n\r\n const nodes: AccessiRequirementNode[] = requirements.map((requirement) =>\r\n accessiRequirement.permission(\r\n requirement.menuCode,\r\n requirement.minPermissionLevel\r\n )\r\n );\r\n\r\n return accessiRequirement.and(...nodes);\r\n}\r\n\r\nexport async function evaluateRequirement(\r\n requirement: AccessiRequirementNode,\r\n context: AccessiCustomRequirementContext,\r\n options?: AccessiAuthorizationOptions\r\n): Promise<boolean> {\r\n switch (requirement.type) {\r\n case \"permission\": {\r\n const grantsResult = await context.getGrantsResult();\r\n const grants = grantsResult.grants ?? [];\r\n return grants.some(\r\n (grant) =>\r\n grant.codiceMenu == requirement.menuCode &&\r\n Number(grant.tipoAbilitazione ?? 0) >= requirement.minPermissionLevel\r\n );\r\n }\r\n case \"and\":\r\n if (!requirement.requirements || requirement.requirements.length === 0) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"AND requirement must contain at least one child requirement\"\r\n );\r\n }\r\n for (const child of requirement.requirements) {\r\n if (!(await evaluateRequirement(child, context, options))) return false;\r\n }\r\n return true;\r\n case \"or\":\r\n if (!requirement.requirements || requirement.requirements.length === 0) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"OR requirement must contain at least one child requirement\"\r\n );\r\n }\r\n for (const child of requirement.requirements) {\r\n if (await evaluateRequirement(child, context, options)) return true;\r\n }\r\n return false;\r\n case \"not\":\r\n return !(await evaluateRequirement(requirement.requirement, context, options));\r\n case \"custom\": {\r\n const handlers = options?.customRequirementHandlers ?? {};\r\n const handler = handlers[requirement.key];\r\n if (!handler) {\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n `Custom requirement handler \"${requirement.key}\" not found`\r\n );\r\n }\r\n return Boolean(await handler(context, requirement.payload));\r\n }\r\n default:\r\n throw requirementError(\r\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\r\n \"Unknown requirement node type\"\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"accessiRequirements.js","sourceRoot":"","sources":["../../../src/accessi-module/middleware/accessiRequirements.ts"],"names":[],"mappings":"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","sourcesContent":["import { Request } from \"express\";\n\n/** Grant effettivo letto da Accessi. Il confronto usa `tipoAbilitazione >= minPermissionLevel`. */\nexport type AccessiGrant = {\n codiceMenu: string;\n tipoAbilitazione?: number;\n};\n\n/** Risultato memoizzato durante una singola autorizzazione. Non modificarlo nel custom handler. */\nexport type GrantsResult = {\n grants?: AccessiGrant[];\n [key: string]: unknown;\n};\n\n/** Richiede l'accesso a un menu con almeno il livello indicato. Valori convenzionali: 10 lettura, 20 scrittura. */\nexport type AccessiPermissionRequirement = {\n type: \"permission\";\n menuCode: string;\n minPermissionLevel: number;\n};\n\n/** Tutti i requisiti figli devono essere soddisfatti. Una lista vuota e una configurazione non valida. */\nexport type AccessiAllRequirement = {\n type: \"and\";\n requirements: AccessiRequirementNode[];\n};\n\n/** Almeno un requisito figlio deve essere soddisfatto. Una lista vuota e una configurazione non valida. */\nexport type AccessiAnyRequirement = {\n type: \"or\";\n requirements: AccessiRequirementNode[];\n};\n\n/** Nega il risultato del requisito figlio. Usarlo con cautela per non creare policy difficili da verificare. */\nexport type AccessiNotRequirement = {\n type: \"not\";\n requirement: AccessiRequirementNode;\n};\n\n/** Delega una condizione applicativa a un handler registrato dal backend. */\nexport type AccessiCustomRequirement = {\n type: \"custom\";\n key: string;\n payload?: unknown;\n};\n\n/** Nodo composabile dell'albero di autorizzazione valutato da `authorizeAccessi`. */\nexport type AccessiRequirementNode =\n | AccessiPermissionRequirement\n | AccessiAllRequirement\n | AccessiAnyRequirement\n | AccessiNotRequirement\n | AccessiCustomRequirement;\n\n/** Contesto in sola lettura consegnato a un requisito personalizzato. */\nexport type AccessiCustomRequirementContext = {\n req: Request;\n decodedToken: Record<string, unknown>;\n userCode: number;\n getGrantsResult: () => Promise<GrantsResult>;\n};\n\n/** Handler applicativo per `accessiRequirement.custom`; `false` nega la richiesta, un errore produce 500. */\nexport type AccessiCustomRequirementHandler = (\n context: AccessiCustomRequirementContext,\n payload?: unknown\n) => boolean | Promise<boolean>;\n\n/**\n * Policy passata a `authorizeAccessi`.\n * `requirements` e la forma compatibile storica ed equivale a un AND; `requirementTree`\n * permette policy annidate e ha precedenza quando entrambi sono presenti.\n */\nexport type AccessiAuthorizationOptions = {\n requirements?: { menuCode: string; minPermissionLevel: number }[];\n requirementTree?: AccessiRequirementNode;\n customRequirementHandlers?: Record<string, AccessiCustomRequirementHandler>;\n};\n\n/** Errore di configurazione di una policy, distinto dal normale diniego 403. */\nexport class RequirementEvaluationError extends Error {\n constructor(public readonly code: string, message: string) {\n super(message);\n this.name = \"RequirementEvaluationError\";\n }\n}\n\nfunction requirementError(code: string, message: string): RequirementEvaluationError {\n return new RequirementEvaluationError(code, message);\n}\n\n/** Factory tipizzata per costruire policy leggibili senza dipendere dalla struttura interna dei nodi. */\nexport const accessiRequirement = {\n permission: (\n menuCode: string,\n minPermissionLevel: number\n ): AccessiPermissionRequirement => ({\n type: \"permission\",\n menuCode,\n minPermissionLevel,\n }),\n and: (...requirements: AccessiRequirementNode[]): AccessiAllRequirement => ({\n type: \"and\",\n requirements,\n }),\n or: (...requirements: AccessiRequirementNode[]): AccessiAnyRequirement => ({\n type: \"or\",\n requirements,\n }),\n not: (requirement: AccessiRequirementNode): AccessiNotRequirement => ({\n type: \"not\",\n requirement,\n }),\n custom: (key: string, payload?: unknown): AccessiCustomRequirement => ({\n type: \"custom\",\n key,\n payload,\n }),\n};\n\n/** Normalizza la forma compatibile `requirements` nell'albero interno. */\nexport function buildRequirementTree(\n options?: AccessiAuthorizationOptions\n): AccessiRequirementNode | undefined {\n if (options?.requirementTree) return options.requirementTree;\n\n const requirements = options?.requirements ?? [];\n if (requirements.length === 0) return undefined;\n\n const nodes: AccessiRequirementNode[] = requirements.map((requirement) =>\n accessiRequirement.permission(\n requirement.menuCode,\n requirement.minPermissionLevel\n )\n );\n\n return accessiRequirement.and(...nodes);\n}\n\n/**\n * Valuta ricorsivamente una policy. I grant sono caricati solo se necessari tramite `getGrantsResult`.\n * Questa funzione e pubblica per test e integrazioni avanzate; normalmente usare `authorizeAccessi`.\n */\nexport async function evaluateRequirement(\n requirement: AccessiRequirementNode,\n context: AccessiCustomRequirementContext,\n options?: AccessiAuthorizationOptions\n): Promise<boolean> {\n switch (requirement.type) {\n case \"permission\": {\n const grantsResult = await context.getGrantsResult();\n const grants = grantsResult.grants ?? [];\n return grants.some(\n (grant) =>\n grant.codiceMenu == requirement.menuCode &&\n Number(grant.tipoAbilitazione ?? 0) >= requirement.minPermissionLevel\n );\n }\n case \"and\":\n if (!requirement.requirements || requirement.requirements.length === 0) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"AND requirement must contain at least one child requirement\"\n );\n }\n for (const child of requirement.requirements) {\n if (!(await evaluateRequirement(child, context, options))) return false;\n }\n return true;\n case \"or\":\n if (!requirement.requirements || requirement.requirements.length === 0) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"OR requirement must contain at least one child requirement\"\n );\n }\n for (const child of requirement.requirements) {\n if (await evaluateRequirement(child, context, options)) return true;\n }\n return false;\n case \"not\":\n return !(await evaluateRequirement(requirement.requirement, context, options));\n case \"custom\": {\n const handlers = options?.customRequirementHandlers ?? {};\n const handler = handlers[requirement.key];\n if (!handler) {\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n `Custom requirement handler \"${requirement.key}\" not found`\n );\n }\n return Boolean(await handler(context, requirement.payload));\n }\n default:\n throw requirementError(\n \"AUTH_REQUIREMENTS_MISCONFIGURED\",\n \"Unknown requirement node type\"\n );\n }\n}\n"]}