emilsoftware-utilities 2.0.0-dev.2 → 2.0.0-dev.21

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 (141) hide show
  1. package/README.MD +38 -38
  2. package/dist/ContractGenerator.js.map +1 -1
  3. package/dist/DatabaseUpdater.d.ts +1 -1
  4. package/dist/DatabaseUpdater.js +24 -24
  5. package/dist/DatabaseUpdater.js.map +1 -1
  6. package/dist/EmilsoftwareModule.js.map +1 -1
  7. package/dist/ExecutionTimeLogger.js.map +1 -1
  8. package/dist/Logger.js.map +1 -1
  9. package/dist/Orm.d.ts +7 -1
  10. package/dist/Orm.js +172 -78
  11. package/dist/Orm.js.map +1 -1
  12. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  13. package/dist/Utilities.d.ts +2 -2
  14. package/dist/Utilities.js +3 -0
  15. package/dist/Utilities.js.map +1 -1
  16. package/dist/accessi-module/AccessiModule.d.ts +1 -1
  17. package/dist/accessi-module/AccessiModule.js.map +1 -1
  18. package/dist/accessi-module/Controllers/AuthController.d.ts +4 -4
  19. package/dist/accessi-module/Controllers/AuthController.js +43 -33
  20. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  21. package/dist/accessi-module/Controllers/ConfiguratorController.js +25 -30
  22. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  23. package/dist/accessi-module/Controllers/EmailController.d.ts +2 -4
  24. package/dist/accessi-module/Controllers/EmailController.js +8 -12
  25. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  26. package/dist/accessi-module/Controllers/FiltriController.js +29 -0
  27. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  28. package/dist/accessi-module/Controllers/PermissionController.js +35 -33
  29. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  30. package/dist/accessi-module/Controllers/UserController.d.ts +2 -2
  31. package/dist/accessi-module/Controllers/UserController.js +30 -12
  32. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  33. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  34. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  35. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +0 -1
  36. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  37. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +0 -1
  38. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  39. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.d.ts +10 -0
  40. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js +52 -0
  41. package/dist/accessi-module/Dtos/AuthenticatedUserPayloadDto.js.map +1 -0
  42. package/dist/accessi-module/Dtos/BaseResponse.d.ts +20 -0
  43. package/dist/accessi-module/Dtos/BaseResponse.js +87 -1
  44. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  45. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.d.ts +3 -0
  46. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js +31 -0
  47. package/dist/accessi-module/Dtos/ConfirmResetPasswordRequest.js.map +1 -0
  48. package/dist/accessi-module/Dtos/FiltriUtente.js +1 -0
  49. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  50. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  51. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  52. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  53. package/dist/accessi-module/Dtos/GetUserByTokenRequest.d.ts +3 -0
  54. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js +26 -0
  55. package/dist/accessi-module/Dtos/GetUserByTokenRequest.js.map +1 -0
  56. package/dist/accessi-module/Dtos/GetUserByTokenResponse.d.ts +5 -0
  57. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js +27 -0
  58. package/dist/accessi-module/Dtos/GetUserByTokenResponse.js.map +1 -0
  59. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  60. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  61. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  62. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  63. package/dist/accessi-module/Dtos/PublicRegisterRequest.d.ts +5 -0
  64. package/dist/accessi-module/Dtos/PublicRegisterRequest.js +14 -0
  65. package/dist/accessi-module/Dtos/PublicRegisterRequest.js.map +1 -0
  66. package/dist/accessi-module/Dtos/RegisterRequest.js +4 -0
  67. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  68. package/dist/accessi-module/Dtos/RegisterResponse.d.ts +1 -1
  69. package/dist/accessi-module/Dtos/RegisterResponse.js +3 -3
  70. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  71. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  72. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  73. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.d.ts +4 -0
  74. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js +36 -0
  75. package/dist/accessi-module/Dtos/SendResetPasswordEmailRequest.js.map +1 -0
  76. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  77. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  78. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  79. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  80. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  81. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  82. package/dist/accessi-module/Dtos/UserDto.js +5 -1
  83. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  84. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  85. package/dist/accessi-module/Dtos/UserGrantsResponse.d.ts +5 -0
  86. package/dist/accessi-module/Dtos/UserGrantsResponse.js +27 -0
  87. package/dist/accessi-module/Dtos/UserGrantsResponse.js.map +1 -0
  88. package/dist/accessi-module/Dtos/index.d.ts +7 -0
  89. package/dist/accessi-module/Dtos/index.js +7 -0
  90. package/dist/accessi-module/Dtos/index.js.map +1 -1
  91. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  92. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  93. package/dist/accessi-module/Services/EmailService/EmailService.js +11 -11
  94. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  95. package/dist/accessi-module/Services/FiltriService/FiltriService.js +1 -8
  96. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  97. package/dist/accessi-module/Services/PermissionService/PermissionService.d.ts +4 -0
  98. package/dist/accessi-module/Services/PermissionService/PermissionService.js +210 -147
  99. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  100. package/dist/accessi-module/Services/UserService/UserService.js +77 -174
  101. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  102. package/dist/accessi-module/Views/reset-password.html +213 -213
  103. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +16 -16
  104. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  105. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  106. package/dist/accessi-module/index.d.ts +1 -0
  107. package/dist/accessi-module/index.js +28 -5
  108. package/dist/accessi-module/index.js.map +1 -1
  109. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  110. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  111. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  112. package/dist/accessi-module/security/accessControl.js.map +1 -1
  113. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  114. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  115. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  116. package/dist/allegati-module/AllegatiModule.d.ts +1 -1
  117. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  118. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  119. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  120. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  121. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  122. package/dist/allegati-module/Dtos/index.js.map +1 -1
  123. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  124. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  125. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  126. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +49 -49
  127. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  128. package/dist/allegati-module/index.js.map +1 -1
  129. package/dist/autobind.js.map +1 -1
  130. package/dist/emilsoftware-utilities-2.0.0-dev.21.tgz +0 -0
  131. package/dist/firebird-compat.d.ts +25 -0
  132. package/dist/firebird-compat.js +218 -0
  133. package/dist/firebird-compat.js.map +1 -0
  134. package/dist/index.d.ts +5 -2
  135. package/dist/index.js +28 -2
  136. package/dist/index.js.map +1 -1
  137. package/dist/initEmilsoftwareModule.js.map +1 -1
  138. package/dist/swagger/SwaggerConfig.d.ts +7 -1
  139. package/dist/swagger/SwaggerConfig.js +18 -7
  140. package/dist/swagger/SwaggerConfig.js.map +1 -1
  141. package/package.json +83 -83
@@ -1 +1 @@
1
- {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/AuthService/AuthService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from \"@nestjs/common\";\r\nimport * as jwt from \"jsonwebtoken\";\r\nimport { Orm } from \"../../../Orm\";\r\nimport { CryptUtilities, PasswordUtilities, RestUtilities } from \"../../../Utilities\";\r\nimport { AccessiOptions } from \"../../AccessiModule\";\r\nimport { LoginRequest } from \"../../Dtos/LoginRequest\";\r\nimport { LoginResult } from \"../../Dtos/LoginResponse\";\r\nimport { StatoRegistrazione } from \"../../Dtos/StatoRegistrazione\";\r\nimport { UserService } from \"../UserService/UserService\";\r\nimport { PermissionService } from \"../PermissionService/PermissionService\";\r\nimport { FiltriService } from \"../FiltriService/FiltriService\";\r\nimport {\r\n buildAuthenticatedTokenPayload,\r\n isAuthenticatedUserEnabledForJwt,\r\n resolveCodiceUtenteFromTokenPayload,\r\n} from \"../../security/authenticatedToken\";\r\nimport {\n getAccessiJwtSecret,\n verifyPasswordResetToken,\n} from \"../../security/passwordResetToken\";\nimport { Logger } from \"../../../Logger\";\n\n@Injectable()\nexport class AuthService {\n private readonly logger = new Logger(AuthService.name);\n\n constructor(\r\n private userService: UserService,\r\n private permissionService: PermissionService,\r\n private filtriService: FiltriService,\r\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\r\n ) {}\r\n\r\n private async refreshPasswordExpiration(codiceUtente: number): Promise<void> {\r\n if (!this.accessiOptions.passwordExpiration) {\r\n return;\r\n }\r\n\r\n const configuredDays = Number(this.accessiOptions.passwordExpirationDays);\r\n const expirationDays =\r\n Number.isFinite(configuredDays) && configuredDays > 0\r\n ? Math.trunc(configuredDays)\r\n : 90;\r\n\r\n const query = `UPDATE UTENTI SET DATSCAPWD = DATEADD(${expirationDays} DAY TO CURRENT_TIMESTAMP) WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [codiceUtente]);\r\n }\r\n\r\n private isMockDemoUserEnabled(): boolean {\r\n if (!this.accessiOptions.mockDemoUser) {\r\n return false;\r\n }\r\n\r\n const nodeEnv = (process.env.NODE_ENV ?? \"production\").toLowerCase();\r\n return nodeEnv !== \"production\" || process.env.ACCESSI_ALLOW_MOCK_DEMO_USER === \"true\";\r\n }\r\n\r\n async login(request: LoginRequest): Promise<LoginResult> {\r\n const mockDemoUserEnabled = this.isMockDemoUserEnabled();\r\n\r\n if (\r\n mockDemoUserEnabled &&\r\n request.email.toLowerCase() === \"demo\"\r\n ) {\r\n return this.getDemoUser();\r\n }\r\n\r\n if (\r\n mockDemoUserEnabled &&\r\n request.email.toLowerCase() === \"admin\"\r\n ) {\r\n return this.getAdminUser();\r\n }\r\n\r\n const utente = await this.userService.getUserByEmail(\r\n request.email.toLowerCase()\r\n );\r\n if (!utente) throw new Error(\"Nome utente o password errata!\");\r\n\r\n switch (utente.statoRegistrazione) {\r\n case undefined:\r\n throw new Error(\r\n \"Struttura dati compromessa: Stato Registrazione inesistente.\"\r\n );\r\n case StatoRegistrazione.BLOCC:\r\n case StatoRegistrazione.DELETE:\r\n throw new Error(\"Utente non abilitato\");\r\n case StatoRegistrazione.INVIO:\r\n throw new Error(\"Rinnovo password necessario.\");\r\n }\r\n\r\n if (utente.statoRegistrazione !== StatoRegistrazione.CONF) {\r\n throw new Error(\r\n `Errore generico. Stato di registrazione non valido: ${utente.statoRegistrazione}.`\r\n );\r\n }\r\n\r\n const isPasswordValid = await this.verifyPassword(\r\n utente.codiceUtente,\r\n request.password\r\n );\r\n if (!isPasswordValid) throw new Error(\"Nome utente o password errata!\");\r\n\r\n if (\r\n this.accessiOptions.passwordExpiration &&\r\n this.accessiOptions.passwordExpiration == true\r\n ) {\r\n const today = new Date();\r\n const targetDate = new Date(utente.dataScadenzaPassword);\r\n\r\n if (today >= targetDate) {\r\n throw new Error(\"PASSWORD_EXPIRED\");\r\n }\r\n }\r\n\r\n const userGrants = await this.permissionService.getUserRolesAndGrants(\r\n utente.codiceUtente\r\n );\r\n\r\n const filtri = await this.filtriService.getFiltriUser(utente.codiceUtente);\r\n\r\n const updateLastAccessDateQuery =\r\n \"UPDATE UTENTI SET DATLASTLOGIN = CURRENT_TIMESTAMP WHERE CODUTE = ?\";\r\n await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n updateLastAccessDateQuery,\r\n [utente.codiceUtente]\r\n );\r\n\r\n const extensionFields = {};\r\n\r\n if (\r\n this.accessiOptions.extensionFieldsOptions &&\r\n this.accessiOptions.extensionFieldsOptions.length > 0\r\n ) {\r\n for (const ext of this.accessiOptions.extensionFieldsOptions) {\r\n const values = (\r\n await Orm.query(\r\n ext.databaseOptions,\r\n `SELECT ${ext.tableFields.join(\",\")} FROM ${ext.tableName} WHERE ${\r\n ext.tableJoinFieldName\r\n } = ?`,\r\n [utente.codiceUtente]\r\n )\r\n ).map(RestUtilities.convertKeysToCamelCase);\r\n\r\n extensionFields[ext.objectKey] = values;\r\n }\r\n }\r\n\r\n return { utente, filtri, userGrants, extensionFields };\r\n }\r\n\r\n public async getAuthenticatedTokenPayload(token: string): Promise<Record<string, unknown>> {\r\n if (typeof token !== \"string\" || token.trim() === \"\") {\r\n throw new Error(\"Token non fornito.\");\r\n }\r\n\r\n const secret = getAccessiJwtSecret(this.accessiOptions);\r\n const decoded = jwt.verify(token.trim(), secret);\r\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(decoded);\r\n\r\n if (!codiceUtente) {\r\n throw new Error(\"Token non valido.\");\r\n }\r\n\r\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\r\n if (!isAuthenticatedUserEnabledForJwt(currentUser)) {\r\n throw new Error(\"Token non valido o utente non autorizzato.\");\r\n }\r\n\r\n return buildAuthenticatedTokenPayload(decoded, currentUser);\r\n }\r\n\r\n public async setPassword(codiceUtente: number, nuovaPassword: string) {\r\n try {\r\n const query = `UPDATE OR INSERT INTO UTENTI_PWD (CODUTE, PWD) VALUES (?, ?)`;\r\n const hashedPassword = PasswordUtilities.hashPassword(nuovaPassword);\r\n\r\n const result = await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n codiceUtente,\r\n hashedPassword,\r\n ]);\r\n await this.refreshPasswordExpiration(codiceUtente);\r\n return result;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public async migrateLegacyEncryptedPasswords(): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\"Avvio migrazione password legacy accessi.\");\n const results = await Orm.query(\n this.accessiOptions.databaseOptions,\n \"SELECT CODUTE AS codice_utente, PWD AS password FROM UTENTI_PWD WHERE PWD IS NOT NULL\",\n []\n );\n\r\n const rows = results.map(RestUtilities.convertKeysToCamelCase) as {\r\n codiceUtente?: number;\n password?: string;\n }[];\n let migratedCount = 0;\n let skippedCount = 0;\n\n for (const row of rows) {\n const codiceUtente = Number(row.codiceUtente);\n const storedPassword = typeof row.password === \"string\" ? row.password : null;\n\r\n if (\r\n !codiceUtente ||\r\n !storedPassword ||\n PasswordUtilities.isPasswordHash(storedPassword) ||\n PasswordUtilities.isLegacyPasswordHash(storedPassword)\n ) {\n skippedCount += 1;\n continue;\n }\n\r\n const protectedLegacyPassword =\r\n PasswordUtilities.hashLegacyEncryptedPassword(storedPassword);\r\n\r\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n \"UPDATE UTENTI_PWD SET PWD = ? WHERE CODUTE = ? AND PWD = ?\",\n [protectedLegacyPassword, codiceUtente, storedPassword]\n );\n migratedCount += 1;\n }\n\n this.logger.info(\n `Migrazione password legacy accessi completata. Letti=${rows.length}, migrati=${migratedCount}, ignorati=${skippedCount}, durataMs=${(performance.now() - startedAt).toFixed(2)}`\n );\n }\n\r\n async verifyPassword(\r\n codiceUtente: number,\r\n plainPassword: string\r\n ): Promise<boolean> {\r\n const query = `SELECT PWD AS password FROM UTENTI_PWD WHERE CODUTE = ?`;\r\n const result = (await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n query,\r\n [codiceUtente]\r\n ).then((results) => results.map(RestUtilities.convertKeysToCamelCase))) as {\r\n password: string;\r\n }[];\r\n\r\n if (result.length === 0 || typeof result[0].password !== \"string\") {\r\n return false;\r\n }\r\n\r\n const storedPassword = result[0].password;\r\n\r\n if (PasswordUtilities.isPasswordHash(storedPassword)) {\r\n return PasswordUtilities.verifyPassword(plainPassword, storedPassword);\r\n }\r\n\r\n const legacyEncryptedPassword = CryptUtilities.encrypt(\r\n plainPassword,\r\n this.accessiOptions.encryptionKey\r\n );\r\n\r\n if (PasswordUtilities.isLegacyPasswordHash(storedPassword)) {\r\n const isMigratedLegacyPasswordValid =\r\n PasswordUtilities.verifyLegacyEncryptedPassword(\r\n legacyEncryptedPassword,\r\n storedPassword\r\n );\r\n\r\n if (isMigratedLegacyPasswordValid) {\r\n await this.setPassword(codiceUtente, plainPassword);\r\n }\r\n\r\n return isMigratedLegacyPasswordValid;\r\n }\r\n\r\n const isLegacyPasswordValid = storedPassword === legacyEncryptedPassword;\r\n\r\n if (isLegacyPasswordValid) {\r\n await this.setPassword(codiceUtente, plainPassword);\r\n }\r\n\r\n return isLegacyPasswordValid;\r\n }\r\n\r\n async getAdminUser(): Promise<LoginResult> {\r\n return {\r\n utente: {\r\n codiceUtente: 6789,\r\n email: \"admin\",\r\n statoRegistrazione: StatoRegistrazione.CONF,\r\n cognome: \"Admin\",\r\n nome: \"Admin\",\r\n flagGdpr: true,\r\n avatar: \"/path/to/avatar.jpg\",\r\n flagDueFattori: false,\r\n codiceLingua: \"IT\",\r\n cellulare: \"+391234567890\",\r\n flagSuper: true,\r\n paginaDefault: \"/home\",\r\n roles: [],\r\n permissions: [],\r\n },\r\n filtri: null,\r\n userGrants: {\r\n abilitazioni: [],\r\n grants: [],\r\n ruoli: [],\r\n },\r\n };\r\n }\r\n\r\n getDemoUser(): LoginResult {\r\n return {\r\n utente: {\r\n codiceUtente: 12345,\r\n email: \"jdoe\",\r\n statoRegistrazione: StatoRegistrazione.CONF,\r\n cognome: \"Doe\",\r\n nome: \"John\",\r\n flagGdpr: true,\r\n avatar: \"/path/to/avatar.jpg\",\r\n flagDueFattori: false,\r\n codiceLingua: \"IT\",\r\n cellulare: \"+391234567890\",\r\n flagSuper: false,\r\n paginaDefault: \"/home\",\r\n roles: [],\r\n permissions: [],\r\n },\r\n filtri: null,\r\n userGrants: {\r\n abilitazioni: [],\r\n grants: [],\r\n ruoli: [],\r\n },\r\n };\r\n }\r\n\r\n public async confirmResetPassword(\r\n token: string,\r\n newPassword: string\r\n ): Promise<void> {\r\n try {\r\n if (typeof token !== \"string\" || token.trim() === \"\") {\r\n throw new Error(\"Token non valido.\");\r\n }\r\n\r\n if (\r\n typeof newPassword !== \"string\" ||\r\n newPassword.length < 8 ||\r\n newPassword.length > 100\r\n ) {\r\n throw new Error(\"La nuova password deve essere compresa tra 8 e 100 caratteri.\");\r\n }\r\n\r\n const secret = getAccessiJwtSecret(this.accessiOptions);\r\n const { codiceUtente, nonce } = verifyPasswordResetToken(token.trim(), secret);\r\n\r\n const result = (await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n \"SELECT CODUTE AS codice_utente, STAREG AS stato_registrazione FROM UTENTI WHERE CODUTE = ? AND KEYREG = ?\",\r\n [codiceUtente, nonce]\r\n ).then((rows) => rows.map(RestUtilities.convertKeysToCamelCase))) as {\r\n codiceUtente?: number;\r\n statoRegistrazione?: StatoRegistrazione | number;\r\n }[];\r\n\r\n if (result.length === 0) {\r\n throw new Error(\"Token non valido o gia usato.\");\r\n }\r\n\r\n const currentState = Number(result[0].statoRegistrazione);\r\n if (\r\n currentState === StatoRegistrazione.BLOCC ||\r\n currentState === StatoRegistrazione.DELETE\r\n ) {\r\n throw new Error(\"Utente non autorizzato a completare il reset password.\");\r\n }\r\n\r\n await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n \"UPDATE UTENTI SET KEYREG = NULL, STAREG = ? WHERE CODUTE = ?\",\r\n [StatoRegistrazione.CONF, codiceUtente]\r\n );\r\n\r\n await this.setPassword(codiceUtente, newPassword);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/AuthService/AuthService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from \"@nestjs/common\";\nimport * as jwt from \"jsonwebtoken\";\nimport { Orm } from \"../../../Orm\";\nimport { CryptUtilities, PasswordUtilities, RestUtilities } from \"../../../Utilities\";\nimport { AccessiOptions } from \"../../AccessiModule\";\nimport { LoginRequest } from \"../../Dtos/LoginRequest\";\nimport { LoginResult } from \"../../Dtos/LoginResponse\";\nimport { StatoRegistrazione } from \"../../Dtos/StatoRegistrazione\";\nimport { UserService } from \"../UserService/UserService\";\nimport { PermissionService } from \"../PermissionService/PermissionService\";\nimport { FiltriService } from \"../FiltriService/FiltriService\";\nimport {\n buildAuthenticatedTokenPayload,\n isAuthenticatedUserEnabledForJwt,\n resolveCodiceUtenteFromTokenPayload,\n} from \"../../security/authenticatedToken\";\nimport {\n getAccessiJwtSecret,\n verifyPasswordResetToken,\n} from \"../../security/passwordResetToken\";\nimport { Logger } from \"../../../Logger\";\n\n@Injectable()\nexport class AuthService {\n private readonly logger = new Logger(AuthService.name);\n\n constructor(\n private userService: UserService,\n private permissionService: PermissionService,\n private filtriService: FiltriService,\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\n ) {}\n\n private async refreshPasswordExpiration(codiceUtente: number): Promise<void> {\n if (!this.accessiOptions.passwordExpiration) {\n return;\n }\n\n const configuredDays = Number(this.accessiOptions.passwordExpirationDays);\n const expirationDays =\n Number.isFinite(configuredDays) && configuredDays > 0\n ? Math.trunc(configuredDays)\n : 90;\n\n const query = `UPDATE UTENTI SET DATSCAPWD = DATEADD(${expirationDays} DAY TO CURRENT_TIMESTAMP) WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [codiceUtente]);\n }\n\n private isMockDemoUserEnabled(): boolean {\n if (!this.accessiOptions.mockDemoUser) {\n return false;\n }\n\n const nodeEnv = (process.env.NODE_ENV ?? \"production\").toLowerCase();\n return nodeEnv !== \"production\" || process.env.ACCESSI_ALLOW_MOCK_DEMO_USER === \"true\";\n }\n\n async login(request: LoginRequest): Promise<LoginResult> {\n const mockDemoUserEnabled = this.isMockDemoUserEnabled();\n\n if (\n mockDemoUserEnabled &&\n request.email.toLowerCase() === \"demo\"\n ) {\n return this.getDemoUser();\n }\n\n if (\n mockDemoUserEnabled &&\n request.email.toLowerCase() === \"admin\"\n ) {\n return this.getAdminUser();\n }\n\n const utente = await this.userService.getUserByEmail(\n request.email.toLowerCase()\n );\n if (!utente) throw new Error(\"Nome utente o password errata!\");\n\n switch (utente.statoRegistrazione) {\n case undefined:\n throw new Error(\n \"Struttura dati compromessa: Stato Registrazione inesistente.\"\n );\n case StatoRegistrazione.BLOCC:\n case StatoRegistrazione.DELETE:\n throw new Error(\"Utente non abilitato\");\n case StatoRegistrazione.INVIO:\n throw new Error(\"Rinnovo password necessario.\");\n }\n\n if (utente.statoRegistrazione !== StatoRegistrazione.CONF) {\n throw new Error(\n `Errore generico. Stato di registrazione non valido: ${utente.statoRegistrazione}.`\n );\n }\n\n const isPasswordValid = await this.verifyPassword(\n utente.codiceUtente,\n request.password\n );\n if (!isPasswordValid) throw new Error(\"Nome utente o password errata!\");\n\n if (\n this.accessiOptions.passwordExpiration &&\n this.accessiOptions.passwordExpiration == true\n ) {\n const today = new Date();\n const targetDate = new Date(utente.dataScadenzaPassword);\n\n if (today >= targetDate) {\n throw new Error(\"PASSWORD_EXPIRED\");\n }\n }\n\n const userGrants = await this.permissionService.getUserRolesAndGrants(\n utente.codiceUtente\n );\n\n const filtri = await this.filtriService.getFiltriUser(utente.codiceUtente);\n\n const updateLastAccessDateQuery =\n \"UPDATE UTENTI SET DATLASTLOGIN = CURRENT_TIMESTAMP WHERE CODUTE = ?\";\n await Orm.query(\n this.accessiOptions.databaseOptions,\n updateLastAccessDateQuery,\n [utente.codiceUtente]\n );\n\n const extensionFields = {};\n\n if (\n this.accessiOptions.extensionFieldsOptions &&\n this.accessiOptions.extensionFieldsOptions.length > 0\n ) {\n for (const ext of this.accessiOptions.extensionFieldsOptions) {\n const values = (\n await Orm.query(\n ext.databaseOptions,\n `SELECT ${ext.tableFields.join(\",\")} FROM ${ext.tableName} WHERE ${\n ext.tableJoinFieldName\n } = ?`,\n [utente.codiceUtente]\n )\n ).map(RestUtilities.convertKeysToCamelCase);\n\n extensionFields[ext.objectKey] = values;\n }\n }\n\n return { utente, filtri, userGrants, extensionFields };\n }\n\n public async getAuthenticatedTokenPayload(token: string): Promise<Record<string, unknown>> {\n if (typeof token !== \"string\" || token.trim() === \"\") {\n throw new Error(\"Token non fornito.\");\n }\n\n const secret = getAccessiJwtSecret(this.accessiOptions);\n const decoded = jwt.verify(token.trim(), secret);\n const codiceUtente = resolveCodiceUtenteFromTokenPayload(decoded);\n\n if (!codiceUtente) {\n throw new Error(\"Token non valido.\");\n }\n\n const currentUser = await this.userService.getAuthenticatedUserSnapshot(codiceUtente);\n if (!isAuthenticatedUserEnabledForJwt(currentUser)) {\n throw new Error(\"Token non valido o utente non autorizzato.\");\n }\n\n return buildAuthenticatedTokenPayload(decoded, currentUser);\n }\n\n public async setPassword(codiceUtente: number, nuovaPassword: string) {\n try {\n const query = `UPDATE OR INSERT INTO UTENTI_PWD (CODUTE, PWD) VALUES (?, ?)`;\n const hashedPassword = PasswordUtilities.hashPassword(nuovaPassword);\n\n const result = await Orm.execute(this.accessiOptions.databaseOptions, query, [\n codiceUtente,\n hashedPassword,\n ]);\n await this.refreshPasswordExpiration(codiceUtente);\n return result;\n } catch (error) {\n throw error;\n }\n }\n\n public async migrateLegacyEncryptedPasswords(): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\"Avvio migrazione password legacy accessi.\");\n const results = await Orm.query(\n this.accessiOptions.databaseOptions,\n \"SELECT CODUTE AS codice_utente, PWD AS password FROM UTENTI_PWD WHERE PWD IS NOT NULL\",\n []\n );\n\n const rows = results.map(RestUtilities.convertKeysToCamelCase) as {\n codiceUtente?: number;\n password?: string;\n }[];\n let migratedCount = 0;\n let skippedCount = 0;\n\n for (const row of rows) {\n const codiceUtente = Number(row.codiceUtente);\n const storedPassword = typeof row.password === \"string\" ? row.password : null;\n\n if (\n !codiceUtente ||\n !storedPassword ||\n PasswordUtilities.isPasswordHash(storedPassword) ||\n PasswordUtilities.isLegacyPasswordHash(storedPassword)\n ) {\n skippedCount += 1;\n continue;\n }\n\n const protectedLegacyPassword =\n PasswordUtilities.hashLegacyEncryptedPassword(storedPassword);\n\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n \"UPDATE UTENTI_PWD SET PWD = ? WHERE CODUTE = ? AND PWD = ?\",\n [protectedLegacyPassword, codiceUtente, storedPassword]\n );\n migratedCount += 1;\n }\n\n this.logger.info(\n `Migrazione password legacy accessi completata. Letti=${rows.length}, migrati=${migratedCount}, ignorati=${skippedCount}, durataMs=${(performance.now() - startedAt).toFixed(2)}`\n );\n }\n\n async verifyPassword(\n codiceUtente: number,\n plainPassword: string\n ): Promise<boolean> {\n const query = `SELECT PWD AS password FROM UTENTI_PWD WHERE CODUTE = ?`;\n const result = (await Orm.query(\n this.accessiOptions.databaseOptions,\n query,\n [codiceUtente]\n ).then((results) => results.map(RestUtilities.convertKeysToCamelCase))) as {\n password: string;\n }[];\n\n if (result.length === 0 || typeof result[0].password !== \"string\") {\n return false;\n }\n\n const storedPassword = result[0].password;\n\n if (PasswordUtilities.isPasswordHash(storedPassword)) {\n return PasswordUtilities.verifyPassword(plainPassword, storedPassword);\n }\n\n const legacyEncryptedPassword = CryptUtilities.encrypt(\n plainPassword,\n this.accessiOptions.encryptionKey\n );\n\n if (PasswordUtilities.isLegacyPasswordHash(storedPassword)) {\n const isMigratedLegacyPasswordValid =\n PasswordUtilities.verifyLegacyEncryptedPassword(\n legacyEncryptedPassword,\n storedPassword\n );\n\n if (isMigratedLegacyPasswordValid) {\n await this.setPassword(codiceUtente, plainPassword);\n }\n\n return isMigratedLegacyPasswordValid;\n }\n\n const isLegacyPasswordValid = storedPassword === legacyEncryptedPassword;\n\n if (isLegacyPasswordValid) {\n await this.setPassword(codiceUtente, plainPassword);\n }\n\n return isLegacyPasswordValid;\n }\n\n async getAdminUser(): Promise<LoginResult> {\n return {\n utente: {\n codiceUtente: 6789,\n email: \"admin\",\n statoRegistrazione: StatoRegistrazione.CONF,\n cognome: \"Admin\",\n nome: \"Admin\",\n flagGdpr: true,\n avatar: \"/path/to/avatar.jpg\",\n flagDueFattori: false,\n codiceLingua: \"IT\",\n cellulare: \"+391234567890\",\n flagSuper: true,\n paginaDefault: \"/home\",\n roles: [],\n permissions: [],\n },\n filtri: null,\n userGrants: {\n abilitazioni: [],\n grants: [],\n ruoli: [],\n },\n };\n }\n\n getDemoUser(): LoginResult {\n return {\n utente: {\n codiceUtente: 12345,\n email: \"jdoe\",\n statoRegistrazione: StatoRegistrazione.CONF,\n cognome: \"Doe\",\n nome: \"John\",\n flagGdpr: true,\n avatar: \"/path/to/avatar.jpg\",\n flagDueFattori: false,\n codiceLingua: \"IT\",\n cellulare: \"+391234567890\",\n flagSuper: false,\n paginaDefault: \"/home\",\n roles: [],\n permissions: [],\n },\n filtri: null,\n userGrants: {\n abilitazioni: [],\n grants: [],\n ruoli: [],\n },\n };\n }\n\n public async confirmResetPassword(\n token: string,\n newPassword: string\n ): Promise<void> {\n try {\n if (typeof token !== \"string\" || token.trim() === \"\") {\n throw new Error(\"Token non valido.\");\n }\n\n if (\n typeof newPassword !== \"string\" ||\n newPassword.length < 8 ||\n newPassword.length > 100\n ) {\n throw new Error(\"La nuova password deve essere compresa tra 8 e 100 caratteri.\");\n }\n\n const secret = getAccessiJwtSecret(this.accessiOptions);\n const { codiceUtente, nonce } = verifyPasswordResetToken(token.trim(), secret);\n\n const result = (await Orm.query(\n this.accessiOptions.databaseOptions,\n \"SELECT CODUTE AS codice_utente, STAREG AS stato_registrazione FROM UTENTI WHERE CODUTE = ? AND KEYREG = ?\",\n [codiceUtente, nonce]\n ).then((rows) => rows.map(RestUtilities.convertKeysToCamelCase))) as {\n codiceUtente?: number;\n statoRegistrazione?: StatoRegistrazione | number;\n }[];\n\n if (result.length === 0) {\n throw new Error(\"Token non valido o gia usato.\");\n }\n\n const currentState = Number(result[0].statoRegistrazione);\n if (\n currentState === StatoRegistrazione.BLOCC ||\n currentState === StatoRegistrazione.DELETE\n ) {\n throw new Error(\"Utente non autorizzato a completare il reset password.\");\n }\n\n await Orm.query(\n this.accessiOptions.databaseOptions,\n \"UPDATE UTENTI SET KEYREG = NULL, STAREG = ? WHERE CODUTE = ?\",\n [StatoRegistrazione.CONF, codiceUtente]\n );\n\n await this.setPassword(codiceUtente, newPassword);\n } catch (error) {\n throw error;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfiguratorService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/ConfiguratorService/ConfiguratorService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,gDAA6C;AAE7C,sCAAmC;AAI5B,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAC8C,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAEzE,CAAC;IAES,cAAc,CAAC,UAAkB,EAAE,OAAgB;;YAC9D,MAAM,KAAK,GAAG,iDAAiD,CAAC;YAChE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,SAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,YAAY,EAAC,UAAU,CAAC,CAAC,CAAA;QAC1F,CAAC;KAAA;IAEY,eAAe,CAAC,YAAoB,EAAE,OAAgB;;YACjE,MAAM,KAAK,GAAG,qDAAqD,CAAA;YACnE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,SAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;QAC7F,CAAC;KAAA;CAKF,CAAA;AArBY,kDAAmB;8BAAnB,mBAAmB;IAF/B,mBAAQ;IACR,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GAFjB,mBAAmB,CAqB/B","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\r\nimport { autobind } from '../../../autobind';\r\nimport { AccessiOptions } from '../../AccessiModule';\r\nimport { Orm } from '../../../Orm';\r\n\r\n@autobind\r\n@Injectable()\r\nexport class ConfiguratorService {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n\r\n ) {}\r\n\r\n public async setMenuEnabled(codiceMenu: string, enabled: boolean): Promise<void> {\r\n const query = `UPDATE MENU SET FLGENABLED = ? WHERE CODMNU = ?`;\r\n const enabledValue = enabled ? 1 : 0\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [enabledValue,codiceMenu])\r\n }\r\n\r\n public async setGroupEnabled(codiceGruppo: string, enabled: boolean): Promise<void> {\r\n const query = `UPDATE MENU_GRP SET FLGENABLED = ? WHERE CODGRP = ?`\r\n const enabledValue = enabled ? 1 : 0\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [enabledValue, codiceGruppo])\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ConfiguratorService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/ConfiguratorService/ConfiguratorService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,gDAA6C;AAE7C,sCAAmC;AAI5B,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAC8C,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAEzE,CAAC;IAES,cAAc,CAAC,UAAkB,EAAE,OAAgB;;YAC9D,MAAM,KAAK,GAAG,iDAAiD,CAAC;YAChE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,SAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,YAAY,EAAC,UAAU,CAAC,CAAC,CAAA;QAC1F,CAAC;KAAA;IAEY,eAAe,CAAC,YAAoB,EAAE,OAAgB;;YACjE,MAAM,KAAK,GAAG,qDAAqD,CAAA;YACnE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,SAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;QAC7F,CAAC;KAAA;CAKF,CAAA;AArBY,kDAAmB;8BAAnB,mBAAmB;IAF/B,mBAAQ;IACR,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GAFjB,mBAAmB,CAqB/B","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { autobind } from '../../../autobind';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { Orm } from '../../../Orm';\n\n@autobind\n@Injectable()\nexport class ConfiguratorService {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n\n ) {}\n\n public async setMenuEnabled(codiceMenu: string, enabled: boolean): Promise<void> {\n const query = `UPDATE MENU SET FLGENABLED = ? WHERE CODMNU = ?`;\n const enabledValue = enabled ? 1 : 0\n await Orm.execute(this.accessiOptions.databaseOptions, query, [enabledValue,codiceMenu])\n }\n\n public async setGroupEnabled(codiceGruppo: string, enabled: boolean): Promise<void> {\n const query = `UPDATE MENU_GRP SET FLGENABLED = ? WHERE CODGRP = ?`\n const enabledValue = enabled ? 1 : 0\n await Orm.execute(this.accessiOptions.databaseOptions, query, [enabledValue, codiceGruppo])\n }\n\n\n\n\n}\n"]}
@@ -84,17 +84,17 @@ let EmailService = class EmailService {
84
84
  sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);
85
85
  }
86
86
  else {
87
- sPhrase = ` Gentile utente,<br>
88
- abbiamo ricevuto la tua richiesta.<br><br>
89
-
90
- Per completare l'operazione, clicca sul link qui sotto:<br>
91
- <a href="${resetUrl}">completa la procedura</a><br><br>
92
-
93
- Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>
94
- Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>
95
-
96
- Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>
97
-
87
+ sPhrase = ` Gentile utente,<br>
88
+ abbiamo ricevuto la tua richiesta.<br><br>
89
+
90
+ Per completare l'operazione, clicca sul link qui sotto:<br>
91
+ <a href="${resetUrl}">completa la procedura</a><br><br>
92
+
93
+ Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>
94
+ Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>
95
+
96
+ Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>
97
+
98
98
  Grazie.<br>`;
99
99
  }
100
100
  const html = this.GetHtmlMail(sPhrase);
@@ -1 +1 @@
1
- {"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/EmailService/EmailService.ts"],"names":[],"mappings":"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","sourcesContent":["import nodemailer from 'nodemailer';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { AccessiOptions } from '../../AccessiModule';\r\nimport { Orm } from '../../../Orm';\r\nimport { Inject, Injectable } from '@nestjs/common';\r\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\r\nimport {\r\n createPasswordResetToken,\r\n getAccessiJwtSecret,\r\n} from '../../security/passwordResetToken';\r\n\r\n@Injectable()\r\nexport class EmailService {\r\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\r\n\r\n sendAccountUpdateEmail(email: string, message: string): Promise<void> {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n private transporter = nodemailer.createTransport(this.accessiOptions.emailOptions);\r\n\r\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\r\n let codiceUtente: number | null = null;\r\n let resetToken: string | null = null;\r\n\r\n try {\r\n if (typeof email !== 'string' || email.trim() === '') {\r\n return;\r\n }\r\n\r\n const normalizedEmail = email.trim().toLowerCase();\r\n const userResult = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE as codice_utente, STAREG as stato_registrazione FROM UTENTI WHERE LOWER(USRNAME) = ?',\r\n [normalizedEmail],\r\n );\r\n const user = userResult.map((row) => ({\r\n codiceUtente: Number(row.CODICE_UTENTE ?? row.codice_utente ?? row.CODUTE ?? row.codute),\r\n statoRegistrazione: Number(\r\n row.STATO_REGISTRAZIONE ?? row.stato_registrazione ?? row.STAREG ?? row.stareg,\r\n ),\r\n }))[0];\r\n\r\n if (\r\n !user?.codiceUtente ||\r\n user.statoRegistrazione === StatoRegistrazione.BLOCC ||\r\n user.statoRegistrazione === StatoRegistrazione.DELETE\r\n ) {\r\n return;\r\n }\r\n\r\n codiceUtente = user.codiceUtente;\r\n const nonce = uuidv4();\r\n const secret = getAccessiJwtSecret(this.accessiOptions);\r\n resetToken = createPasswordResetToken(codiceUtente, nonce, secret);\r\n\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\r\n [nonce, codiceUtente],\r\n );\r\n\r\n //costruizione dei queryparams\r\n const returnUrlQueryParams =\r\n '?returnUrl=' +\r\n encodeURIComponent(this.accessiOptions.confirmationEmailReturnUrl) +\r\n '&prefix=' +\r\n encodeURIComponent(this.accessiOptions.confirmationEmailPrefix ?? '');\r\n const { confirmationEmailUrl, customResetPage } = this.accessiOptions;\r\n\r\n // costruisco l'url di base\r\n let resetUrl = `${confirmationEmailUrl}/api/accessi/email/reset-password-page/${encodeURIComponent(\r\n resetToken,\r\n )}${returnUrlQueryParams}`;\r\n\r\n //solo se gli do la customResetPage\r\n if (customResetPage) {\r\n resetUrl = `${customResetPage}?token=${encodeURIComponent(resetToken)}`;\r\n }\r\n\r\n let sPhrase: string;\r\n\r\n if (htmlMail) {\r\n sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);\r\n } else {\r\n sPhrase = ` Gentile utente,<br>\r\n abbiamo ricevuto la tua richiesta.<br><br>\r\n\r\n Per completare l'operazione, clicca sul link qui sotto:<br>\r\n <a href=\"${resetUrl}\">completa la procedura</a><br><br>\r\n\r\n Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>\r\n Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>\r\n\r\n Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>\r\n\r\n Grazie.<br>`;\r\n }\r\n\r\n const html = this.GetHtmlMail(sPhrase);\r\n const mailOptions = {\r\n from: this.accessiOptions.emailOptions.from,\r\n to: email,\r\n subject: 'Scelta nuova password',\r\n text: sPhrase,\r\n html: html,\r\n };\r\n\r\n await this.transporter.sendMail(mailOptions);\r\n } catch (error) {\r\n if (codiceUtente) {\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ?',\r\n [codiceUtente],\r\n ).catch(() => undefined);\r\n }\r\n console.error(\"Errore nell'invio dell'email di reset password:\", error);\r\n throw new Error(\"Errore durante l'invio dell'email di reset password.\");\r\n }\r\n }\r\n\r\n private GetHtmlMail(sPhrase: string): string {\r\n let sTxt = '';\r\n sTxt += '<html xmlns=\"http://www.w3.org/1999/xhtml\">';\r\n sTxt += '<head>';\r\n sTxt += ' <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">';\r\n sTxt += ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">';\r\n sTxt += ' <title></title>';\r\n sTxt += ' <style type=\"text/css\">';\r\n sTxt += ' @media only screen and (max-width:480px) {';\r\n sTxt += ' body,';\r\n sTxt += ' table,';\r\n sTxt += ' td,';\r\n sTxt += ' p,';\r\n sTxt += ' a,';\r\n sTxt += ' li,';\r\n sTxt += ' blockquote {';\r\n sTxt += ' -webkit-text-size-adjust: none !important';\r\n sTxt += ' }';\r\n sTxt += ' body {';\r\n sTxt += ' width: 100% !important;';\r\n sTxt += ' min-width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' #bodyCell {';\r\n sTxt += ' padding: 10px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileHide {';\r\n sTxt += ' display: none !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmDesktopOnly,';\r\n sTxt += ' td.kmDesktopOnly,';\r\n sTxt += ' th.kmDesktopOnly,';\r\n sTxt += ' tr.kmDesktopOnly,';\r\n sTxt += ' td.kmDesktopWrapHeaderMobileNone {';\r\n sTxt += ' display: none !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileOnly {';\r\n sTxt += ' display: table !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileOnly {';\r\n sTxt += ' display: table-row !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileOnly,';\r\n sTxt += ' td.kmDesktopWrapHeader,';\r\n sTxt += ' th.kmMobileOnly {';\r\n sTxt += ' display: table-cell !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileNoAlign,';\r\n sTxt += ' table.kmMobileNoAlign {';\r\n sTxt += ' float: none !important;';\r\n sTxt += ' text-align: initial !important;';\r\n sTxt += ' vertical-align: middle !important;';\r\n sTxt += ' table-layout: fixed !important';\r\n sTxt += ' }';\r\n sTxt += ' tr.kmMobileCenterAlign {';\r\n sTxt += ' float: none !important;';\r\n sTxt += ' text-align: center !important;';\r\n sTxt += ' vertical-align: middle !important;';\r\n sTxt += ' table-layout: fixed !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmButtonCollection {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important;';\r\n sTxt += ' padding-top: 9px !important;';\r\n sTxt += ' padding-bottom: 9px !importan';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderStackDesktopNone,';\r\n sTxt += ' img.kmMobileHeaderStackDesktopNone,';\r\n sTxt += ' td.kmMobileHeaderStack {';\r\n sTxt += ' display: block !important;';\r\n sTxt += ' margin-left: auto !important;';\r\n sTxt += ' margin-right: auto !important;';\r\n sTxt += ' padding-bottom: 9px !important;';\r\n sTxt += ' padding-right: 0 !important;';\r\n sTxt += ' padding-left: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileWrapHeader,';\r\n sTxt += ' td.kmMobileWrapHeaderDesktopNone {';\r\n sTxt += ' display: inline-block !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderSpacing {';\r\n sTxt += ' padding-right: 10px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileHeaderNoSpacing {';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmDesktopAutoWidth {';\r\n sTxt += ' width: inherit !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmMobileAutoWidth {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTextContentContainer {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmBoxedTextContentContainer {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmImageContent {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' img.kmImage {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmMobileStretch {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmSplitContentLeftContentContainer,';\r\n sTxt += ' table.kmSplitContentRightContentContainer,';\r\n sTxt += ' table.kmColumnContainer,';\r\n sTxt += ' td.kmVerticalButtonBarContentOuter table.kmButtonBarContent,';\r\n sTxt +=\r\n ' td.kmVerticalButtonCollectionContentOuter table.kmButtonCollectionContent,';\r\n sTxt += ' table.kmVerticalButton,';\r\n sTxt += ' table.kmVerticalButtonContent {';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmButtonCollectionInner {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important;';\r\n sTxt += ' padding-top: 9px !important;';\r\n sTxt += ' padding-bottom: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmVerticalButtonIconContent,';\r\n sTxt += ' td.kmVerticalButtonTextContent,';\r\n sTxt += ' td.kmVerticalButtonContentOuter {';\r\n sTxt += ' padding-left: 0 !important;';\r\n sTxt += ' padding-right: 0 !important;';\r\n sTxt += ' padding-bottom: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmTextContent,';\r\n sTxt += ' table.kmSplitContentRightContentContainer td.kmTextContent,';\r\n sTxt += ' table.kmColumnContainer td.kmTextContent,';\r\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmImageContent,';\r\n sTxt += ' table.kmSplitContentRightContentContainer td.kmImageContent {';\r\n sTxt += ' padding-top: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' td.rowContainer.kmFloatLeft,';\r\n sTxt += ' td.rowContainer.kmFloatLeft,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn,';\r\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn {';\r\n sTxt += ' float: left;';\r\n sTxt += ' clear: both;';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' table.templateContainer,';\r\n sTxt += ' table.templateContainer.brandingContainer,';\r\n sTxt += ' div.templateContainer,';\r\n sTxt += ' div.templateContainer.brandingContainer,';\r\n sTxt += ' table.templateRow {';\r\n sTxt += ' max-width: 600px !important;';\r\n sTxt += ' width: 100% !important';\r\n sTxt += ' }';\r\n sTxt += ' h1 {';\r\n sTxt += ' font-size: 30px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h2 {';\r\n sTxt += ' font-size: 22px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h3 {';\r\n sTxt += ' font-size: 22px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' h4 {';\r\n sTxt += ' font-size: 16px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmTextContent {';\r\n sTxt += ' font-size: 14px !important;';\r\n sTxt += ' line-height: 130% !important';\r\n sTxt += ' }';\r\n sTxt += ' td.kmTextBlockInner td.kmTextContent {';\r\n sTxt += ' padding-right: 18px !important;';\r\n sTxt += ' padding-left: 18px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner {';\r\n sTxt += ' padding-left: 9px !important;';\r\n sTxt += ' padding-right: 9px !important';\r\n sTxt += ' }';\r\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner .kmTextContent {';\r\n sTxt += ' font-size: 14px !important;';\r\n sTxt += ' line-height: 130% !important;';\r\n sTxt += ' padding-left: 4px !important;';\r\n sTxt += ' padding-right: 4px !important';\r\n sTxt += ' }';\r\n sTxt += ' }';\r\n sTxt += ' </style>';\r\n sTxt += '</head>';\r\n sTxt +=\r\n '<body style=\"margin:0;padding:0;font-family:\"Raleway\", Helvetica, sans-serif;font-weight:400;letter-spacing:0.75px;line-height:180%;background-color:#F2F2F2\">';\r\n sTxt += ' <center>';\r\n sTxt +=\r\n ' <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"bodyTable\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding:0;background-color:#F2F2F2;height:100%;margin:0;width:100%\">';\r\n sTxt += ' <tbody>';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td align=\"center\" id=\"bodyCell\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding-top:10px;padding-left:10px;padding-bottom:20px;padding-right:10px;border-top:0;height:100%;margin:0;width:100%\">';\r\n sTxt += ' <!--[if !mso]>';\r\n sTxt += '\t\t\t\t\t<!-->';\r\n sTxt +=\r\n ' <div class=\"templateContainer\" style=\"border:0 none #aaa;background-color:#F2F2F2;border-radius:0;display: table; width:90%\">';\r\n sTxt += ' <div class=\"templateContainerInner\" style=\"padding:0\">';\r\n sTxt += ' <!--';\r\n sTxt += '\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' <!--[if mso]>';\r\n sTxt +=\r\n '\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateContainer\" width=\"90%\" ';\r\n sTxt +=\r\n ' style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\r\n sTxt += '\t\t\t\t\t\t\t\t<tbody>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t<tr>';\r\n sTxt +=\r\n '\t\t\t\t\t\t\t\t\t\t<td class=\"templateContainerInner\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td align=\"center\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateRow\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt += ' <tbody>';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td class=\"rowContainer kmFloatLeft\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextBlock\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <tbody class=\"kmTextBlockOuter\">';\r\n sTxt += ' <tr>';\r\n sTxt +=\r\n ' <td class=\"kmTextBlockInner\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;background-color:#FFFFFF;\">';\r\n sTxt +=\r\n ' <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextContentContainer\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\r\n sTxt +=\r\n ' <tbody>';\r\n sTxt +=\r\n ' <tr>';\r\n sTxt +=\r\n ' <td class=\"kmTextContent\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;color:#272727;font-family:Helvetica, Arial;font-size:13px;line-height:200%;letter-spacing:normal;text-align:left;padding-top:40px;padding-bottom:40px;padding-left:40px;padding-right:40px;\">';\r\n sTxt +=\r\n ' <p>' +\r\n sPhrase +\r\n '<p>';\r\n sTxt +=\r\n ' </td>';\r\n sTxt +=\r\n ' </tr>';\r\n sTxt +=\r\n ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </table>';\r\n sTxt += ' <!--[if !mso]>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-->';\r\n sTxt += ' </div>';\r\n sTxt += ' </div>';\r\n sTxt += ' <!--';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' <!--[if mso]>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t</td>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t</tr>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t\t</tbody>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t</table>';\r\n sTxt += '\t\t\t\t\t\t\t\t\t<![endif]-->';\r\n sTxt += ' </td>';\r\n sTxt += ' </tr>';\r\n sTxt += ' </tbody>';\r\n sTxt += ' </table>';\r\n sTxt += ' </center>';\r\n sTxt += '</body>';\r\n sTxt += '</html> ';\r\n\r\n return sTxt;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/EmailService/EmailService.ts"],"names":[],"mappings":"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","sourcesContent":["import nodemailer from 'nodemailer';\nimport { v4 as uuidv4 } from 'uuid';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { Orm } from '../../../Orm';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport {\n createPasswordResetToken,\n getAccessiJwtSecret,\n} from '../../security/passwordResetToken';\n\n@Injectable()\nexport class EmailService {\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n sendAccountUpdateEmail(email: string, message: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n private transporter = nodemailer.createTransport(this.accessiOptions.emailOptions);\n\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\n let codiceUtente: number | null = null;\n let resetToken: string | null = null;\n\n try {\n if (typeof email !== 'string' || email.trim() === '') {\n return;\n }\n\n const normalizedEmail = email.trim().toLowerCase();\n const userResult = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE as codice_utente, STAREG as stato_registrazione FROM UTENTI WHERE LOWER(USRNAME) = ?',\n [normalizedEmail],\n );\n const user = userResult.map((row) => ({\n codiceUtente: Number(row.CODICE_UTENTE ?? row.codice_utente ?? row.CODUTE ?? row.codute),\n statoRegistrazione: Number(\n row.STATO_REGISTRAZIONE ?? row.stato_registrazione ?? row.STAREG ?? row.stareg,\n ),\n }))[0];\n\n if (\n !user?.codiceUtente ||\n user.statoRegistrazione === StatoRegistrazione.BLOCC ||\n user.statoRegistrazione === StatoRegistrazione.DELETE\n ) {\n return;\n }\n\n codiceUtente = user.codiceUtente;\n const nonce = uuidv4();\n const secret = getAccessiJwtSecret(this.accessiOptions);\n resetToken = createPasswordResetToken(codiceUtente, nonce, secret);\n\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\n [nonce, codiceUtente],\n );\n\n //costruizione dei queryparams\n const returnUrlQueryParams =\n '?returnUrl=' +\n encodeURIComponent(this.accessiOptions.confirmationEmailReturnUrl) +\n '&prefix=' +\n encodeURIComponent(this.accessiOptions.confirmationEmailPrefix ?? '');\n const { confirmationEmailUrl, customResetPage } = this.accessiOptions;\n\n // costruisco l'url di base\n let resetUrl = `${confirmationEmailUrl}/api/accessi/email/reset-password-page/${encodeURIComponent(\n resetToken,\n )}${returnUrlQueryParams}`;\n\n //solo se gli do la customResetPage\n if (customResetPage) {\n resetUrl = `${customResetPage}?token=${encodeURIComponent(resetToken)}`;\n }\n\n let sPhrase: string;\n\n if (htmlMail) {\n sPhrase = htmlMail.replace('#link_conferma_password_url', resetUrl);\n } else {\n sPhrase = ` Gentile utente,<br>\n abbiamo ricevuto la tua richiesta.<br><br>\n\n Per completare l'operazione, clicca sul link qui sotto:<br>\n <a href=\"${resetUrl}\">completa la procedura</a><br><br>\n\n Se hai richiesto la registrazione al servizio o la reimpostazione della password, questo passaggio è necessario.<br>\n Se non sei stato tu a effettuare questa richiesta, puoi ignorare questo messaggio in tutta sicurezza.<br><br>\n\n Questa è una comunicazione automatica, ti preghiamo di non rispondere a questa email.<br><br>\n\n Grazie.<br>`;\n }\n\n const html = this.GetHtmlMail(sPhrase);\n const mailOptions = {\n from: this.accessiOptions.emailOptions.from,\n to: email,\n subject: 'Scelta nuova password',\n text: sPhrase,\n html: html,\n };\n\n await this.transporter.sendMail(mailOptions);\n } catch (error) {\n if (codiceUtente) {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ?',\n [codiceUtente],\n ).catch(() => undefined);\n }\n console.error(\"Errore nell'invio dell'email di reset password:\", error);\n throw new Error(\"Errore durante l'invio dell'email di reset password.\");\n }\n }\n\n private GetHtmlMail(sPhrase: string): string {\n let sTxt = '';\n sTxt += '<html xmlns=\"http://www.w3.org/1999/xhtml\">';\n sTxt += '<head>';\n sTxt += ' <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">';\n sTxt += ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">';\n sTxt += ' <title></title>';\n sTxt += ' <style type=\"text/css\">';\n sTxt += ' @media only screen and (max-width:480px) {';\n sTxt += ' body,';\n sTxt += ' table,';\n sTxt += ' td,';\n sTxt += ' p,';\n sTxt += ' a,';\n sTxt += ' li,';\n sTxt += ' blockquote {';\n sTxt += ' -webkit-text-size-adjust: none !important';\n sTxt += ' }';\n sTxt += ' body {';\n sTxt += ' width: 100% !important;';\n sTxt += ' min-width: 100% !important';\n sTxt += ' }';\n sTxt += ' #bodyCell {';\n sTxt += ' padding: 10px !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileHide {';\n sTxt += ' display: none !important';\n sTxt += ' }';\n sTxt += ' table.kmDesktopOnly,';\n sTxt += ' td.kmDesktopOnly,';\n sTxt += ' th.kmDesktopOnly,';\n sTxt += ' tr.kmDesktopOnly,';\n sTxt += ' td.kmDesktopWrapHeaderMobileNone {';\n sTxt += ' display: none !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileOnly {';\n sTxt += ' display: table !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileOnly {';\n sTxt += ' display: table-row !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileOnly,';\n sTxt += ' td.kmDesktopWrapHeader,';\n sTxt += ' th.kmMobileOnly {';\n sTxt += ' display: table-cell !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileNoAlign,';\n sTxt += ' table.kmMobileNoAlign {';\n sTxt += ' float: none !important;';\n sTxt += ' text-align: initial !important;';\n sTxt += ' vertical-align: middle !important;';\n sTxt += ' table-layout: fixed !important';\n sTxt += ' }';\n sTxt += ' tr.kmMobileCenterAlign {';\n sTxt += ' float: none !important;';\n sTxt += ' text-align: center !important;';\n sTxt += ' vertical-align: middle !important;';\n sTxt += ' table-layout: fixed !important';\n sTxt += ' }';\n sTxt += ' td.kmButtonCollection {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important;';\n sTxt += ' padding-top: 9px !important;';\n sTxt += ' padding-bottom: 9px !importan';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderStackDesktopNone,';\n sTxt += ' img.kmMobileHeaderStackDesktopNone,';\n sTxt += ' td.kmMobileHeaderStack {';\n sTxt += ' display: block !important;';\n sTxt += ' margin-left: auto !important;';\n sTxt += ' margin-right: auto !important;';\n sTxt += ' padding-bottom: 9px !important;';\n sTxt += ' padding-right: 0 !important;';\n sTxt += ' padding-left: 0 !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileWrapHeader,';\n sTxt += ' td.kmMobileWrapHeaderDesktopNone {';\n sTxt += ' display: inline-block !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderSpacing {';\n sTxt += ' padding-right: 10px !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileHeaderNoSpacing {';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' table.kmDesktopAutoWidth {';\n sTxt += ' width: inherit !important';\n sTxt += ' }';\n sTxt += ' table.kmMobileAutoWidth {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.kmTextContentContainer {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.kmBoxedTextContentContainer {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmImageContent {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' img.kmImage {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmMobileStretch {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important';\n sTxt += ' }';\n sTxt += ' table.kmSplitContentLeftContentContainer,';\n sTxt += ' table.kmSplitContentRightContentContainer,';\n sTxt += ' table.kmColumnContainer,';\n sTxt += ' td.kmVerticalButtonBarContentOuter table.kmButtonBarContent,';\n sTxt +=\n ' td.kmVerticalButtonCollectionContentOuter table.kmButtonCollectionContent,';\n sTxt += ' table.kmVerticalButton,';\n sTxt += ' table.kmVerticalButtonContent {';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' td.kmButtonCollectionInner {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important;';\n sTxt += ' padding-top: 9px !important;';\n sTxt += ' padding-bottom: 9px !important';\n sTxt += ' }';\n sTxt += ' td.kmVerticalButtonIconContent,';\n sTxt += ' td.kmVerticalButtonTextContent,';\n sTxt += ' td.kmVerticalButtonContentOuter {';\n sTxt += ' padding-left: 0 !important;';\n sTxt += ' padding-right: 0 !important;';\n sTxt += ' padding-bottom: 9px !important';\n sTxt += ' }';\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmTextContent,';\n sTxt += ' table.kmSplitContentRightContentContainer td.kmTextContent,';\n sTxt += ' table.kmColumnContainer td.kmTextContent,';\n sTxt += ' table.kmSplitContentLeftContentContainer td.kmImageContent,';\n sTxt += ' table.kmSplitContentRightContentContainer td.kmImageContent {';\n sTxt += ' padding-top: 9px !important';\n sTxt += ' }';\n sTxt += ' td.rowContainer.kmFloatLeft,';\n sTxt += ' td.rowContainer.kmFloatLeft,';\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.firstColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn,';\n sTxt += ' td.rowContainer.kmFloatLeft.lastColumn {';\n sTxt += ' float: left;';\n sTxt += ' clear: both;';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' table.templateContainer,';\n sTxt += ' table.templateContainer.brandingContainer,';\n sTxt += ' div.templateContainer,';\n sTxt += ' div.templateContainer.brandingContainer,';\n sTxt += ' table.templateRow {';\n sTxt += ' max-width: 600px !important;';\n sTxt += ' width: 100% !important';\n sTxt += ' }';\n sTxt += ' h1 {';\n sTxt += ' font-size: 30px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h2 {';\n sTxt += ' font-size: 22px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h3 {';\n sTxt += ' font-size: 22px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' h4 {';\n sTxt += ' font-size: 16px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' td.kmTextContent {';\n sTxt += ' font-size: 14px !important;';\n sTxt += ' line-height: 130% !important';\n sTxt += ' }';\n sTxt += ' td.kmTextBlockInner td.kmTextContent {';\n sTxt += ' padding-right: 18px !important;';\n sTxt += ' padding-left: 18px !important';\n sTxt += ' }';\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner {';\n sTxt += ' padding-left: 9px !important;';\n sTxt += ' padding-right: 9px !important';\n sTxt += ' }';\n sTxt += ' table.kmTableBlock.kmTableMobile td.kmTableBlockInner .kmTextContent {';\n sTxt += ' font-size: 14px !important;';\n sTxt += ' line-height: 130% !important;';\n sTxt += ' padding-left: 4px !important;';\n sTxt += ' padding-right: 4px !important';\n sTxt += ' }';\n sTxt += ' }';\n sTxt += ' </style>';\n sTxt += '</head>';\n sTxt +=\n '<body style=\"margin:0;padding:0;font-family:\"Raleway\", Helvetica, sans-serif;font-weight:400;letter-spacing:0.75px;line-height:180%;background-color:#F2F2F2\">';\n sTxt += ' <center>';\n sTxt +=\n ' <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"bodyTable\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding:0;background-color:#F2F2F2;height:100%;margin:0;width:100%\">';\n sTxt += ' <tbody>';\n sTxt += ' <tr>';\n sTxt +=\n ' <td align=\"center\" id=\"bodyCell\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;padding-top:10px;padding-left:10px;padding-bottom:20px;padding-right:10px;border-top:0;height:100%;margin:0;width:100%\">';\n sTxt += ' <!--[if !mso]>';\n sTxt += '\t\t\t\t\t<!-->';\n sTxt +=\n ' <div class=\"templateContainer\" style=\"border:0 none #aaa;background-color:#F2F2F2;border-radius:0;display: table; width:90%\">';\n sTxt += ' <div class=\"templateContainerInner\" style=\"padding:0\">';\n sTxt += ' <!--';\n sTxt += '\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' <!--[if mso]>';\n sTxt +=\n '\t\t\t\t\t\t\t<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateContainer\" width=\"90%\" ';\n sTxt +=\n ' style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\n sTxt += '\t\t\t\t\t\t\t\t<tbody>';\n sTxt += '\t\t\t\t\t\t\t\t\t<tr>';\n sTxt +=\n '\t\t\t\t\t\t\t\t\t\t<td class=\"templateContainerInner\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;\">';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt += ' <tr>';\n sTxt +=\n ' <td align=\"center\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"templateRow\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt += ' <tbody>';\n sTxt += ' <tr>';\n sTxt +=\n ' <td class=\"rowContainer kmFloatLeft\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextBlock\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <tbody class=\"kmTextBlockOuter\">';\n sTxt += ' <tr>';\n sTxt +=\n ' <td class=\"kmTextBlockInner\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;background-color:#FFFFFF;\">';\n sTxt +=\n ' <table align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"kmTextContentContainer\" width=\"100%\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0\">';\n sTxt +=\n ' <tbody>';\n sTxt +=\n ' <tr>';\n sTxt +=\n ' <td class=\"kmTextContent\" valign=\"top\" style=\"border-collapse:collapse;mso-table-lspace:0;mso-table-rspace:0;color:#272727;font-family:Helvetica, Arial;font-size:13px;line-height:200%;letter-spacing:normal;text-align:left;padding-top:40px;padding-bottom:40px;padding-left:40px;padding-right:40px;\">';\n sTxt +=\n ' <p>' +\n sPhrase +\n '<p>';\n sTxt +=\n ' </td>';\n sTxt +=\n ' </tr>';\n sTxt +=\n ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </table>';\n sTxt += ' <!--[if !mso]>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-->';\n sTxt += ' </div>';\n sTxt += ' </div>';\n sTxt += ' <!--';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' <!--[if mso]>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t\t</td>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t\t</tr>';\n sTxt += '\t\t\t\t\t\t\t\t\t\t</tbody>';\n sTxt += '\t\t\t\t\t\t\t\t\t</table>';\n sTxt += '\t\t\t\t\t\t\t\t\t<![endif]-->';\n sTxt += ' </td>';\n sTxt += ' </tr>';\n sTxt += ' </tbody>';\n sTxt += ' </table>';\n sTxt += ' </center>';\n sTxt += '</body>';\n sTxt += '</html> ';\n\n return sTxt;\n }\n}\n"]}
@@ -51,7 +51,7 @@ let FiltriService = FiltriService_1 = class FiltriService {
51
51
  return __awaiter(this, void 0, void 0, function* () {
52
52
  try {
53
53
  let params = [];
54
- let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,
54
+ let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,
55
55
  CODCLIENTI AS COD_CLIENTI, TIPFIL AS TIP_FIL, CODDIP AS COD_DIP, IDXPOS AS IDX_POS, CODVET AS COD_VET FROM FILTRI `;
56
56
  if (codUte === undefined) {
57
57
  this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');
@@ -72,18 +72,15 @@ let FiltriService = FiltriService_1 = class FiltriService {
72
72
  upsertFiltriUtente(codUte, dto) {
73
73
  return __awaiter(this, void 0, void 0, function* () {
74
74
  try {
75
- console.debug('Dati utente da aggiornare: ', dto);
76
75
  if (!codUte || codUte <= 0)
77
76
  throw new Error('Codice utente non valido');
78
77
  const dbFields = ['CODUTE'];
79
78
  const values = [codUte];
80
79
  //aggiungo solo campi valorizzati
81
80
  for (const [key, cfg] of Object.entries(Dtos_1.FILTRI_UTENTE_DB_MAPPING)) {
82
- console.log('valuto campo: ', key);
83
81
  const value = dto[key];
84
82
  //gestione campi vuoti, null o undefined
85
83
  if (value === undefined) {
86
- console.log(`Campo ${key} vuoto: ${value}`);
87
84
  continue;
88
85
  }
89
86
  if (value === null || value === '') {
@@ -91,10 +88,6 @@ let FiltriService = FiltriService_1 = class FiltriService {
91
88
  values.push(null);
92
89
  continue;
93
90
  }
94
- // if (value === undefined || value === null || value === '') {
95
- // console.log(`Campo ${key} vuoto: ${value}`)
96
- // continue;
97
- // }
98
91
  if (cfg.numeric && typeof value !== 'number') {
99
92
  throw new Error(`Il campo ${key} deve essere un numero`);
100
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\r\nimport { AccessiOptions } from '../../AccessiModule';\r\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\r\nimport { Orm } from '../../../Orm';\r\nimport { RestUtilities } from '../../../Utilities';\r\nimport { Logger } from '../../../Logger';\r\nimport { FiltriUtente, FILTRI_UTENTE_DB_MAPPING } from '../../Dtos';\r\n\r\n@Injectable()\r\nexport class FiltriService {\r\n private readonly logger = new Logger(FiltriService.name);\r\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\r\n\r\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\r\n try {\r\n let getQuery =\r\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\r\n const params = [];\r\n\r\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\r\n return result.map(RestUtilities.convertKeysToCamelCase);\r\n } catch (error) {\r\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\r\n throw error;\r\n }\r\n }\r\n\r\n public async getFiltriUser(codUte: number): Promise<FiltriUtente[]> {\r\n try {\r\n let params = [];\r\n\r\n let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,\r\n CODCLIENTI AS COD_CLIENTI, TIPFIL AS TIP_FIL, CODDIP AS COD_DIP, IDXPOS AS IDX_POS, CODVET AS COD_VET FROM FILTRI `;\r\n\r\n if (codUte === undefined) {\r\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\r\n } else {\r\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\r\n getQuery += ' WHERE CODUTE = ?';\r\n params.push(codUte);\r\n }\r\n\r\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\r\n return result.map(RestUtilities.convertKeysToCamelCase);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\r\n try {\r\n console.debug('Dati utente da aggiornare: ', dto)\r\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\r\n\r\n const dbFields: string[] = ['CODUTE'];\r\n const values: any[] = [codUte];\r\n\r\n //aggiungo solo campi valorizzati\r\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\r\n console.log('valuto campo: ', key)\r\n const value = (dto as any)[key];\r\n\r\n //gestione campi vuoti, null o undefined\r\n if (value === undefined) {\r\n console.log(`Campo ${key} vuoto: ${value}`)\r\n continue\r\n }\r\n\r\n if (value === null || value === '') {\r\n dbFields.push(cfg.dbField);\r\n values.push(null);\r\n continue\r\n }\r\n\r\n\r\n\r\n // if (value === undefined || value === null || value === '') {\r\n // console.log(`Campo ${key} vuoto: ${value}`)\r\n // continue;\r\n // }\r\n\r\n if (cfg.numeric && typeof value !== 'number') {\r\n throw new Error(`Il campo ${key} deve essere un numero`);\r\n }\r\n if (!cfg.numeric && typeof value !== 'string') {\r\n throw new Error(`Il campo ${key} deve essere una stringa`);\r\n }\r\n dbFields.push(cfg.dbField);\r\n values.push(value);\r\n }\r\n\r\n if (dbFields.length === 1) {\r\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\r\n return\r\n }\r\n\r\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\r\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\r\n\r\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\r\n\r\n } catch (error) {\r\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${error.message}`);\r\n\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FiltriService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/FiltriService/FiltriService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { TipoFiltro } from '../../Dtos/TipoFiltro';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { Logger } from '../../../Logger';\nimport { FiltriUtente, FILTRI_UTENTE_DB_MAPPING } from '../../Dtos';\n\n@Injectable()\nexport class FiltriService {\n private readonly logger = new Logger(FiltriService.name);\n constructor(@Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions) {}\n\n public async getTipoFiltri(): Promise<TipoFiltro[]> {\n try {\n let getQuery =\n 'SELECT TIPFIL AS TIP_FIL, DESFIL AS DES_FIL, FLDFIL AS FLD_FIL, FLGENABLED AS FLG_ENABLED FROM FILTRI_TIPO';\n const params = [];\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n this.logger.error('Errore durante il recupero dei tipi di filtri', error);\n throw error;\n }\n }\n\n public async getFiltriUser(codUte: number): Promise<FiltriUtente[]> {\n try {\n let params = [];\n\n let getQuery = `SELECT CODUTE AS COD_UTE, PROG AS PROGRESSIVO, NUMREP AS NUM_REP, IDXPERS AS IDX_PERS, CODCLISUPER AS COD_CLI_SUPER, CODAGE AS COD_AGE, CODCLICOL AS COD_CLI_COL,\n CODCLIENTI AS COD_CLIENTI, TIPFIL AS TIP_FIL, CODDIP AS COD_DIP, IDXPOS AS IDX_POS, CODVET AS COD_VET FROM FILTRI `;\n\n if (codUte === undefined) {\n this.logger.log('Nessun utente passato, recupero i filtri di tutti gli utenti...');\n } else {\n this.logger.log('codUte passato, recupero i filtri dell utente ' + codUte);\n getQuery += ' WHERE CODUTE = ?';\n params.push(codUte);\n }\n\n let result = await Orm.query(this.accessiOptions.databaseOptions, getQuery, params);\n return result.map(RestUtilities.convertKeysToCamelCase);\n } catch (error) {\n throw error;\n }\n }\n\n public async upsertFiltriUtente(codUte: number, dto: Partial<FiltriUtente>): Promise<void> {\n try {\n if (!codUte || codUte <= 0) throw new Error('Codice utente non valido');\n\n const dbFields: string[] = ['CODUTE'];\n const values: any[] = [codUte];\n\n //aggiungo solo campi valorizzati\n for (const [key, cfg] of Object.entries(FILTRI_UTENTE_DB_MAPPING)) {\n const value = (dto as any)[key];\n\n //gestione campi vuoti, null o undefined\n if (value === undefined) {\n continue\n }\n\n if (value === null || value === '') {\n dbFields.push(cfg.dbField);\n values.push(null);\n continue\n }\n if (cfg.numeric && typeof value !== 'number') {\n throw new Error(`Il campo ${key} deve essere un numero`);\n }\n if (!cfg.numeric && typeof value !== 'string') {\n throw new Error(`Il campo ${key} deve essere una stringa`);\n }\n dbFields.push(cfg.dbField);\n values.push(value);\n }\n\n if (dbFields.length === 1) {\n this.logger.log(`Nessun campo valido da inserire per l'utente ${codUte}`)\n return\n }\n\n let sSql = `UPDATE OR INSERT INTO FILTRI (${dbFields.join(',')}) VALUES (${values.map(() => '?').join(', ')}) MATCHING (CODUTE)`\n await Orm.execute(this.accessiOptions.databaseOptions, sSql, values)\n\n this.logger.log('Update or Insert filtri OK per CODUTE = ' + codUte)\n\n } catch (error) {\n throw new Error(`Errore durante update or insert filtri per utente ${codUte}: ${error.message}`);\n\n }\n }\n}\n"]}
@@ -7,6 +7,10 @@ import { Role } from "../../Dtos/Role";
7
7
  export declare class PermissionService {
8
8
  private readonly accessiOptions;
9
9
  constructor(accessiOptions: AccessiOptions);
10
+ private getCountFromResult;
11
+ private getAllActiveMenusAsGrants;
12
+ private getUserDirectPermissions;
13
+ private getUserRoles;
10
14
  addAbilitazioni(codiceUtente: number, menuAbilitazioni: any[]): Promise<void>;
11
15
  resetAbilitazioni(codiceUtente: number): Promise<void>;
12
16
  updateOrInsertRole(role: Role, codiceRuolo?: number | null): Promise<void>;