emilsoftware-utilities 1.8.0-dev.2 → 2.0.0-dev.2
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.
- package/README.MD +38 -34
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DatabaseUpdater.js +24 -24
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/EmilsoftwareModule.js.map +1 -1
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Logger.js.map +1 -1
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.d.ts +18 -0
- package/dist/Utilities.js +90 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +15 -0
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Controllers/AuthController.d.ts +4 -4
- package/dist/accessi-module/Controllers/AuthController.js +36 -21
- package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/EmailController.d.ts +3 -3
- package/dist/accessi-module/Controllers/EmailController.js +15 -15
- package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.d.ts +3 -3
- package/dist/accessi-module/Controllers/FiltriController.js +32 -15
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.d.ts +12 -17
- package/dist/accessi-module/Controllers/PermissionController.js +140 -124
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.d.ts +12 -11
- package/dist/accessi-module/Controllers/UserController.js +112 -79
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js +6 -0
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js +6 -0
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Permission.js +5 -0
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js +37 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js +13 -2
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js +6 -0
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js +59 -1
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +8 -3
- package/dist/accessi-module/Services/AuthService/AuthService.js +159 -27
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +44 -21
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +87 -87
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +15 -6
- package/dist/accessi-module/Services/UserService/UserService.js +165 -139
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -195
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +25 -16
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/index.js +33 -4
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.d.ts +4 -2
- package/dist/accessi-module/jwt/jwt.strategy.js +47 -19
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.d.ts +3 -1
- package/dist/accessi-module/middleware/authenticateGen.js +17 -11
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.d.ts +17 -0
- package/dist/accessi-module/security/accessControl.js +44 -0
- package/dist/accessi-module/security/accessControl.js.map +1 -0
- package/dist/accessi-module/security/authenticatedToken.d.ts +11 -0
- package/dist/accessi-module/security/authenticatedToken.js +39 -0
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -0
- package/dist/accessi-module/security/passwordResetToken.d.ts +8 -0
- package/dist/accessi-module/security/passwordResetToken.js +73 -0
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -0
- package/dist/accessi-module/security/publicAuthRateLimit.d.ts +10 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js +105 -0
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -0
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/index.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +49 -49
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/index.js.map +1 -1
- package/dist/autobind.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +83 -83
- package/dist/emilsoftware-utilities-1.8.0-dev.2.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable, Res } from '@nestjs/common';\nimport { autobind } from '../../../autobind';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport { EmailService } from '../EmailService/EmailService';\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\nimport { GetUsersResponse, GetUsersResult } from '../../Dtos/GetUsersResponse';\nimport { PermissionService } from '../PermissionService/PermissionService';\nimport { UserDto } from '../../Dtos';\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\nimport { FiltriService } from '../FiltriService/FiltriService';\n\ninterface OptionalField<T> {\n key: keyof RegisterRequest;\n dbField: string;\n transform?: (value: any) => T;\n}\n\n@autobind\n@Injectable()\nexport class UserService {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly emailService: EmailService,\n private readonly permissionService: PermissionService,\n private readonly filtriService: FiltriService,\n ) {}\n\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\n if (!codiceUtente) {\n return false;\n }\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\n\n if (!result || result === 0) {\n return false;\n }\n\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\n const flagValue = mapped[0]?.flag_admin_configurator;\n\n if (typeof flagValue === 'boolean') {\n return flagValue;\n }\n\n return flagValue === 1;\n }\n\n async getUsers(\n filters?: { email?: string; codiceUtente?: number },\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\n ): Promise<GetUsersResult[]> {\n try {\n let query = ` \n SELECT \n U.CODUTE as codice_utente, \n U.USRNAME as email, \n U.FLGGDPR as flag_gdpr, \n U.DATGDPR as data_gdpr, \n U.DATINS as data_inserimento, \n U.DATSCAPWD as data_scadenza_password, \n U.DATLASTLOGIN as data_last_login, \n U.STAREG as stato_registrazione, \n G.COGNOME as cognome, \n G.NOME as nome, \n G.AVATAR as avatar, \n G.FLG2FATT as flag_due_fattori, \n G.CODLINGUA as codice_lingua,\n G.CELLULARE as cellulare,\n G.FLGSUPER as flag_super, \n G.FLGADMINCONFIG as flag_admin_configurator,\n G.PAGDEF as pagina_default,\n G.JSON_METADATA as json_metadata,\n G.RAGSOCCLI as rag_soc_cli,\n G.NUMMAC as nummac,\n F.NUMREP AS num_rep,\n F.IDXPERS AS idx_pers,\n F.CODCLISUPER AS cod_cli_super,\n F.CODAGE AS cod_age,\n F.CODCLICOL AS cod_cli_col,\n F.CODCLIENTI AS cod_clienti,\n F.TIPFIL AS tip_fil,\n F.IDXPOS AS idx_postazione\n FROM UTENTI U \n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\n WHERE 1=1\n `;\n\n let queryParams: any[] = [];\n\n if (filters.email) {\n query += ` AND LOWER(U.USRNAME) = ? `;\n queryParams.push(filters.email.trim().toLowerCase());\n }\n\n if (filters.codiceUtente) {\n query += ` AND U.CODUTE = ? `;\n queryParams.push(filters.codiceUtente);\n }\n\n query += ` ORDER BY U.CODUTE DESC `;\n\n let users = (await Orm.query(\n this.accessiOptions.databaseOptions,\n query,\n queryParams,\n )) as UserDto[];\n users = users.map(RestUtilities.convertKeysToCamelCase);\n\n let usersResponse: GetUsersResult[] = [];\n\n console.log('OPTIONS: ', options);\n for (const user of users) {\n let userGrants = null;\n\n if (options.includeGrants)\n userGrants = await this.permissionService.getUserRolesAndGrants(user.codiceUtente);\n\n let extensionFields = options.includeExtensionFields ? {} : null;\n\n //todo: se non è prendente extensionFieldOptions va in errore. Risolvere il problema\n if (options.includeExtensionFields) {\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 [user.codiceUtente],\n )\n ).map(RestUtilities.convertKeysToCamelCase);\n\n extensionFields[ext.objectKey] = values;\n }\n }\n\n let userResult: GetUsersResult = {\n utente: user,\n userGrants: userGrants,\n extensionFields: extensionFields,\n };\n\n usersResponse.push(userResult);\n }\n\n console.log('OPTIONS: ', options);\n\n return usersResponse;\n } catch (error) {\n throw error;\n }\n }\n\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\n try {\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\n email.trim().toLowerCase(),\n ]);\n return result.map(RestUtilities.convertKeysToCamelCase)[0];\n } catch (error) {\n throw error;\n }\n }\n\n async getUserByEmail(email: string): Promise<UserDto | null> {\n const query = `\n SELECT \n U.CODUTE AS codice_utente, \n U.USRNAME AS email, \n U.FLGGDPR AS flag_gdpr,\n U.DATSCAPWD as data_scadenza_password,\n U.STAREG AS stato_registrazione, \n C.COGNOME AS cognome, \n C.NOME AS nome, \n C.AVATAR AS avatar, \n C.FLG2FATT AS flag_due_fattori,\n C.CODLINGUA AS codice_lingua, \n C.CELLULARE AS cellulare, \n C.FLGSUPER AS flag_super,\n C.FLGADMINCONFIG AS flag_admin_configurator,\n C.PAGDEF AS pagina_default,\n C.NUMMAC AS nummac,\n C.RAGSOCCLI AS rag_soc_cli\n FROM UTENTI U\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\n WHERE LOWER(U.USRNAME) = ?\n `;\n\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\n )) as UserDto[];\n\n const filtriUtente = await this.filtriService.getFiltriUser(utenti[0]?.codiceUtente);\n\n if (utenti.length <= 0) {\n return null;\n }\n\n if (utenti.length > 0 && filtriUtente.length > 0) {\n const user = utenti[0];\n const filtro = filtriUtente[0];\n\n // Type-safe mapping using type assertion\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\n if (key in filtro) {\n (user as UserDto)[key] = filtro[key as keyof FiltriUtente];\n }\n });\n }\n\n return utenti.length > 0 ? utenti[0] : null;\n }\n\n // async getUserFilters(codiceUtente: number): Promise<FiltriUtente[]> {\n // const query = `\n // SELECT\n // F.PROG AS progressivo,\n // F.NUMREP AS numero_report,\n // F.IDXPERS AS indice_personale,\n // F.CODCLISUPER AS codice_cliente_super,\n // F.CODAGE AS cod_age,\n // F.CODCLICOL AS codice_cliente_collegato,\n // F.CODCLIENTI AS codice_clienti,\n // F.TIPFIL AS tipo_filtro,\n // F.IDXPOS AS idx_postazione\n // FROM FILTRI F\n // WHERE F.CODUTE = ?\n // `;\n\n // return (await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]).then(\n // (results) => results.map(RestUtilities.convertKeysToCamelCase),\n // )) as FiltriUtente[];\n // }\n\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\n try {\n if (!codiceUtente || codiceUtente <= 0) {\n throw new Error('Codice utente non valido');\n }\n\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\n numeroReport: { dbField: 'NUMREP', type: 'number' },\n indicePersonale: { dbField: 'IDXPERS', type: 'number' },\n codiceClienteSuper: { dbField: 'CODCLISUPER', type: 'number' },\n codAge: { dbField: 'CODAGE', type: 'number' },\n codiceClienteCollegato: { dbField: 'CODCLICOL', type: 'number' },\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\n tipFil: { dbField: 'TIPFIL', type: 'number' },\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\n };\n\n const fieldsToInsert = Object.entries(fieldMapping)\n .filter(([tsField]) => {\n const value = filterData[tsField as keyof RegisterRequest];\n return value !== undefined && value !== null && value !== '';\n })\n .map(([tsField, config]) => {\n const value = filterData[tsField as keyof RegisterRequest];\n\n if (config.type === 'number' && typeof value !== 'number') {\n throw new Error(`Il campo ${tsField} deve essere un numero`);\n }\n if (config.type === 'string' && typeof value !== 'string') {\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\n }\n\n return { tsField, dbField: config.dbField, value };\n });\n\n if (fieldsToInsert.length === 0) {\n return;\n }\n\n await this.executeInTransaction(async () => {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'DELETE FROM FILTRI WHERE CODUTE = ?',\n [codiceUtente],\n );\n\n const dbFields = ['CODUTE', ...fieldsToInsert.map((f) => f.dbField)];\n const placeholders = dbFields.map(() => '?');\n const values = [codiceUtente, ...fieldsToInsert.map((f) => f.value)];\n\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\n ', ',\n )}) VALUES (${placeholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, values);\n });\n } catch (error) {\n throw new Error(\n `Errore durante l'inserimento dei filtri per utente ${codiceUtente}: ${error.message}`,\n );\n }\n }\n\n private async executeInTransaction(operation: () => Promise<void>): Promise<void> {\n await operation();\n }\n\n async register(registrationData: RegisterRequest): Promise<number> {\n try {\n const existingUser = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT CODUTE FROM UTENTI WHERE USRNAME = ?',\n [registrationData.email],\n );\n\n if (existingUser.length > 0) {\n throw new Error('Questa e-mail è già stata utilizzata!');\n }\n\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;\n const paramsUtenti = [registrationData.email, StatoRegistrazione.INVIO];\n\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);\n\n const codiceUtenteResult = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC',\n [registrationData.email],\n );\n\n const codiceUtente = Number(\n codiceUtenteResult?.[0]?.CODUTE ?? codiceUtenteResult?.[0]?.codute,\n );\n if (!codiceUtente) {\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\n }\n\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\n const utentiConfigPlaceholders = ['?', '?', '?'];\n const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];\n\n // Mapping dei campi opzionali\n // const optionalFields: [keyof typeof registrationData, string][] = [\n // ['cellulare', 'CELLULARE'],\n // ['flagSuper', 'FLGSUPER'],\n // ['flagAdminConfigurator', 'FLGADMINCONFIG'],\n // ['avatar', 'AVATAR'],\n // ['flagDueFattori', 'FLG2FATT'],\n // ['paginaDefault', 'PAGDEF'],\n // ['ragSocCli', 'RAGSOCCLI'],\n // ];\n\n const optionalFields: OptionalField<any>[] = [\n {\n key: 'cellulare',\n dbField: 'CELLULARE',\n transform: (v) => String(v),\n },\n {\n key: 'flagSuper',\n dbField: 'FLGSUPER',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'flagAdminConfigurator',\n dbField: 'FLGADMINCONFIG',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'avatar',\n dbField: 'AVATAR',\n transform: (v) => String(v),\n },\n {\n key: 'flagDueFattori',\n dbField: 'FLG2FATT',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'paginaDefault',\n dbField: 'PAGDEF',\n transform: (v) => String(v),\n },\n {\n key: 'nummac',\n dbField: 'NUMMAC',\n transform: (v) => Number(v),\n },\n {\n key: 'ragSocCli',\n dbField: 'RAGSOCCLI',\n transform: (v) => String(v),\n },\n ];\n\n\n for (const field of optionalFields) {\n const value = registrationData[field.key];\n if (value !== undefined && value !== null) {\n utentiConfigFields.push(field.dbField);\n utentiConfigPlaceholders.push('?');\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\n }\n }\n\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\n ', ',\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);\n\n //await this.insertUserFilters(codiceUtente, registrationData);\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\n\n if (!!registrationData.roles && registrationData.roles.length > 0) {\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\n }\n\n if (!!registrationData.permissions && registrationData.permissions.length > 0) {\n await this.permissionService.assignPermissionsToUser(\n codiceUtente,\n registrationData.permissions,\n );\n }\n\n return codiceUtente;\n } catch (error) {\n throw error;\n }\n }\n\n async updateUser(codiceUtente: number, user: UserDto): Promise<void> {\n try {\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\n\n // Costruzione dinamica della query per UTENTI\n const utentiUpdates = [];\n const utentiParams = [];\n\n if (user.email !== undefined) {\n utentiUpdates.push('usrname = ?');\n utentiParams.push(user.email);\n }\n if (user.flagGdpr !== undefined) {\n utentiUpdates.push('flggdpr = ?');\n utentiParams.push(user.flagGdpr);\n }\n if (user.statoRegistrazione !== undefined) {\n utentiUpdates.push('stareg = ?');\n utentiParams.push(user.statoRegistrazione);\n }\n\n if (utentiUpdates.length > 0) {\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\n utentiParams.push(codiceUtente);\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\n }\n\n // Costruzione dinamica della query per UTENTI_CONFIG\n const utentiConfigUpdates = [];\n const utentiConfigParams = [];\n\n if (user.cognome !== undefined) {\n utentiConfigUpdates.push('cognome = ?');\n utentiConfigParams.push(user.cognome);\n }\n if (user.nome !== undefined) {\n utentiConfigUpdates.push('nome = ?');\n utentiConfigParams.push(user.nome);\n }\n if (user.avatar !== undefined) {\n utentiConfigUpdates.push('avatar = ?');\n utentiConfigParams.push(user.avatar);\n }\n if (user.flagDueFattori !== undefined) {\n utentiConfigUpdates.push('flg2fatt = ?');\n utentiConfigParams.push(user.flagDueFattori);\n }\n if (user.codiceLingua !== undefined) {\n utentiConfigUpdates.push('codlingua = ?');\n utentiConfigParams.push(user.codiceLingua);\n }\n if (user.cellulare !== undefined) {\n utentiConfigUpdates.push('cellulare = ?');\n utentiConfigParams.push(user.cellulare);\n }\n if (user.flagSuper !== undefined) {\n utentiConfigUpdates.push('flgsuper = ?');\n utentiConfigParams.push(user.flagSuper);\n }\n if (user.flagAdminConfigurator !== undefined) {\n utentiConfigUpdates.push('flgadminconfig = ?');\n utentiConfigParams.push(user.flagAdminConfigurator);\n }\n if (user.paginaDefault !== undefined) {\n utentiConfigUpdates.push('pagdef = ?');\n utentiConfigParams.push(user.paginaDefault);\n }\n if (user.jsonMetadata !== undefined) {\n utentiConfigUpdates.push('json_metadata = ?');\n utentiConfigParams.push(user.jsonMetadata);\n }\n if (user.ragSocCli !== undefined) {\n utentiConfigUpdates.push('ragsoccli = ?');\n utentiConfigParams.push(user.ragSocCli);\n }\n\n if (utentiConfigUpdates.length > 0) {\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\n ', ',\n )} WHERE CODUTE = ?`;\n utentiConfigParams.push(codiceUtente);\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n queryUtentiConfig,\n utentiConfigParams,\n );\n }\n\n if (!!user.roles && user.roles.length > 0) {\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\n }\n\n if (!!user.permissions && user.permissions.length > 0) {\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\n }\n\n //await this.updateUserFilters(codiceUtente, user);\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\n } catch (error) {\n throw error;\n }\n }\n\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\n try {\n if (!codiceUtente || codiceUtente <= 0) {\n throw new Error('Codice utente non valido');\n }\n\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\n numRep: { dbField: 'NUMREP', type: 'number' },\n idxPers: { dbField: 'IDXPERS', type: 'number' },\n codCliSuper: { dbField: 'CODCLISUPER', type: 'number' },\n codAge: { dbField: 'CODAGE', type: 'number' },\n codCliCol: { dbField: 'CODCLICOL', type: 'number' },\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\n tipFil: { dbField: 'TIPFIL', type: 'number' },\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\n };\n\n const fieldsToUpdate = Object.entries(fieldMapping)\n .filter(([tsField]) => {\n const value = user[tsField as keyof UserDto];\n // Includiamo il campo se è definito (anche se è una stringa vuota)\n return value !== undefined && value !== null;\n })\n .map(([tsField, config]) => {\n const value = user[tsField as keyof UserDto];\n\n if (config.type === 'number' && typeof value !== 'number') {\n throw new Error(`Il campo ${tsField} deve essere un numero`);\n }\n if (config.type === 'string' && typeof value !== 'string') {\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\n }\n\n return { tsField, dbField: config.dbField, value };\n });\n\n if (fieldsToUpdate.length === 0) {\n return;\n }\n\n await this.executeInTransaction(async () => {\n // Prima verifichiamo se esiste il record\n const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;\n const existingRecord = await Orm.query(this.accessiOptions.databaseOptions, checkQuery, [\n codiceUtente,\n ]);\n const exists = existingRecord[0].CNT > 0;\n\n if (exists) {\n // Se esiste, facciamo l'UPDATE\n const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');\n const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];\n const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);\n } else {\n // Se non esiste, facciamo l'INSERT\n const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];\n const placeholders = dbFields.map(() => '?');\n const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\n ', ',\n )}) VALUES (${placeholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, insertValues);\n }\n });\n } catch (error) {\n throw new Error(\n `Errore durante l'aggiornamento dei filtri per utente ${codiceUtente}: ${error.message}`,\n );\n }\n }\n\n async deleteUser(codiceCliente: number): Promise<void> {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n StatoRegistrazione.DELETE,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n statoRegistrazione,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n public async setGdpr(codiceUtente: number) {\n try {\n let query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;\n let params = [codiceUtente, true];\n let result = await Orm.execute(this.accessiOptions.databaseOptions, query, params);\n return result;\n } catch (error) {\n throw error;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\r\nimport { autobind } from '../../../autobind';\r\nimport { Orm } from '../../../Orm';\r\nimport { RestUtilities } from '../../../Utilities';\r\nimport { AccessiOptions } from '../../AccessiModule';\r\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\r\nimport { GetUsersResult } from '../../Dtos/GetUsersResponse';\r\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\r\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\r\nimport { UserDto } from '../../Dtos/UserDto';\r\nimport { AccessiAuthenticatedUserSnapshot } from '../../security/authenticatedToken';\r\nimport { EmailService } from '../EmailService/EmailService';\r\nimport { FiltriService } from '../FiltriService/FiltriService';\r\nimport { PermissionService } from '../PermissionService/PermissionService';\r\n\r\ninterface OptionalField<T> {\r\n key: keyof RegisterRequest;\r\n dbField: string;\r\n transform?: (value: any) => T;\r\n}\r\n\r\n@autobind\r\n@Injectable()\r\nexport class UserService {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n private readonly emailService: EmailService,\r\n private readonly permissionService: PermissionService,\r\n private readonly filtriService: FiltriService,\r\n ) {}\r\n\r\n private normalizeDatabaseBoolean(value: unknown): boolean {\r\n return value === true || value === 1 || value === '1';\r\n }\r\n\r\n private normalizeEmail(email: string): string {\r\n if (typeof email !== 'string' || email.trim() === '') {\r\n throw new Error(\"L'email e' obbligatoria.\");\r\n }\r\n\r\n return email.trim().toLowerCase();\r\n }\r\n\r\n private async ensureEmailIsAvailable(email: string, currentUserCode?: number): Promise<void> {\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?',\r\n [email],\r\n );\r\n\r\n const existingUser = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | { codiceUtente?: number }\r\n | undefined;\r\n\r\n if (\r\n existingUser?.codiceUtente &&\r\n (!currentUserCode || existingUser.codiceUtente !== currentUserCode)\r\n ) {\r\n throw new Error(\"Questa e-mail e' gia stata utilizzata!\");\r\n }\r\n }\r\n\r\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\r\n if (!codiceUtente) {\r\n return false;\r\n }\r\n\r\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\r\n\r\n if (!result || result === 0) {\r\n return false;\r\n }\r\n\r\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\r\n const flagValue = mapped[0]?.flag_admin_configurator;\r\n\r\n if (typeof flagValue === 'boolean') {\r\n return flagValue;\r\n }\r\n\r\n return flagValue === 1;\r\n }\r\n\r\n async getAuthenticatedUserSnapshot(\r\n codiceUtente: number,\r\n ): Promise<AccessiAuthenticatedUserSnapshot | null> {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n return null;\r\n }\r\n\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n `\r\n SELECT\r\n U.CODUTE AS codice_utente,\r\n U.USRNAME AS email,\r\n U.STAREG AS stato_registrazione,\r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator\r\n FROM UTENTI U\r\n LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE U.CODUTE = ?\r\n `,\r\n [codiceUtente],\r\n );\r\n\r\n const user = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | {\r\n codiceUtente?: number;\r\n email?: string;\r\n statoRegistrazione?: StatoRegistrazione | number;\r\n flagSuper?: unknown;\r\n flagAdminConfigurator?: unknown;\r\n }\r\n | undefined;\r\n\r\n if (!user?.codiceUtente) {\r\n return null;\r\n }\r\n\r\n return {\r\n codiceUtente: Number(user.codiceUtente),\r\n email: typeof user.email === 'string' ? user.email : undefined,\r\n statoRegistrazione: Number(user.statoRegistrazione) as StatoRegistrazione,\r\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\r\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\r\n };\r\n }\r\n\r\n async getUsers(\r\n filters?: { email?: string; codiceUtente?: number },\r\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\r\n ): Promise<GetUsersResult[]> {\r\n try {\r\n let query = ` \r\n SELECT \r\n U.CODUTE as codice_utente, \r\n U.USRNAME as email, \r\n U.FLGGDPR as flag_gdpr, \r\n U.DATGDPR as data_gdpr, \r\n U.DATINS as data_inserimento, \r\n U.DATSCAPWD as data_scadenza_password, \r\n U.DATLASTLOGIN as data_last_login, \r\n U.STAREG as stato_registrazione, \r\n G.COGNOME as cognome, \r\n G.NOME as nome, \r\n G.AVATAR as avatar, \r\n G.FLG2FATT as flag_due_fattori, \r\n G.CODLINGUA as codice_lingua,\r\n G.CELLULARE as cellulare,\r\n G.FLGSUPER as flag_super, \r\n G.FLGADMINCONFIG as flag_admin_configurator,\r\n G.PAGDEF as pagina_default,\r\n G.JSON_METADATA as json_metadata,\r\n G.RAGSOCCLI as rag_soc_cli,\r\n G.NUMMAC as nummac,\r\n F.NUMREP AS num_rep,\r\n F.IDXPERS AS idx_pers,\r\n F.CODCLISUPER AS cod_cli_super,\r\n F.CODAGE AS cod_age,\r\n F.CODCLICOL AS cod_cli_col,\r\n F.CODCLIENTI AS cod_clienti,\r\n F.TIPFIL AS tip_fil,\r\n F.IDXPOS AS idx_postazione\r\n FROM UTENTI U \r\n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\r\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\r\n WHERE 1=1\r\n `;\r\n\r\n const queryParams: any[] = [];\r\n\r\n if (filters?.email) {\r\n query += ` AND LOWER(U.USRNAME) = ? `;\r\n queryParams.push(filters.email.trim().toLowerCase());\r\n }\r\n\r\n if (filters?.codiceUtente) {\r\n query += ` AND U.CODUTE = ? `;\r\n queryParams.push(filters.codiceUtente);\r\n }\r\n\r\n query += ` ORDER BY U.CODUTE DESC `;\r\n\r\n let users = (await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n query,\r\n queryParams,\r\n )) as UserDto[];\r\n users = users.map(RestUtilities.convertKeysToCamelCase);\r\n\r\n const usersResponse: GetUsersResult[] = [];\r\n\r\n for (const user of users) {\r\n let userGrants = null;\r\n\r\n if (options?.includeGrants) {\r\n userGrants = await this.permissionService.getUserRolesAndGrants(user.codiceUtente);\r\n }\r\n\r\n let extensionFields = options?.includeExtensionFields ? {} : null;\r\n\r\n if (options?.includeExtensionFields && this.accessiOptions.extensionFieldsOptions) {\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 [user.codiceUtente],\r\n )\r\n ).map(RestUtilities.convertKeysToCamelCase);\r\n\r\n extensionFields[ext.objectKey] = values;\r\n }\r\n }\r\n\r\n usersResponse.push({\r\n utente: user,\r\n userGrants,\r\n extensionFields,\r\n });\r\n }\r\n\r\n return usersResponse;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\r\n try {\r\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\r\n email.trim().toLowerCase(),\r\n ]);\r\n return result.map(RestUtilities.convertKeysToCamelCase)[0];\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async getUserByEmail(email: string): Promise<UserDto | null> {\r\n const query = `\r\n SELECT \r\n U.CODUTE AS codice_utente, \r\n U.USRNAME AS email, \r\n U.FLGGDPR AS flag_gdpr,\r\n U.DATSCAPWD as data_scadenza_password,\r\n U.STAREG AS stato_registrazione, \r\n C.COGNOME AS cognome, \r\n C.NOME AS nome, \r\n C.AVATAR AS avatar, \r\n C.FLG2FATT AS flag_due_fattori,\r\n C.CODLINGUA AS codice_lingua, \r\n C.CELLULARE AS cellulare, \r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator,\r\n C.PAGDEF AS pagina_default,\r\n C.NUMMAC AS nummac,\r\n C.RAGSOCCLI AS rag_soc_cli\r\n FROM UTENTI U\r\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE LOWER(U.USRNAME) = ?\r\n `;\r\n\r\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\r\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\r\n )) as UserDto[];\r\n\r\n const filtriUtente = await this.filtriService.getFiltriUser(utenti[0]?.codiceUtente);\r\n\r\n if (utenti.length <= 0) {\r\n return null;\r\n }\r\n\r\n if (utenti.length > 0 && filtriUtente.length > 0) {\r\n const user = utenti[0];\r\n const filtro = filtriUtente[0];\r\n\r\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\r\n if (key in filtro) {\r\n (user as UserDto)[key] = filtro[key as keyof FiltriUtente];\r\n }\r\n });\r\n }\r\n\r\n return utenti.length > 0 ? utenti[0] : null;\r\n }\r\n\r\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\r\n try {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n throw new Error('Codice utente non valido');\r\n }\r\n\r\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\r\n numeroReport: { dbField: 'NUMREP', type: 'number' },\r\n indicePersonale: { dbField: 'IDXPERS', type: 'number' },\r\n codiceClienteSuper: { dbField: 'CODCLISUPER', type: 'number' },\r\n codAge: { dbField: 'CODAGE', type: 'number' },\r\n codiceClienteCollegato: { dbField: 'CODCLICOL', type: 'number' },\r\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\r\n tipFil: { dbField: 'TIPFIL', type: 'number' },\r\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\r\n };\r\n\r\n const fieldsToInsert = Object.entries(fieldMapping)\r\n .filter(([tsField]) => {\r\n const value = filterData[tsField as keyof RegisterRequest];\r\n return value !== undefined && value !== null && value !== '';\r\n })\r\n .map(([tsField, config]) => {\r\n const value = filterData[tsField as keyof RegisterRequest];\r\n\r\n if (config.type === 'number' && typeof value !== 'number') {\r\n throw new Error(`Il campo ${tsField} deve essere un numero`);\r\n }\r\n if (config.type === 'string' && typeof value !== 'string') {\r\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\r\n }\r\n\r\n return { tsField, dbField: config.dbField, value };\r\n });\r\n\r\n if (fieldsToInsert.length === 0) {\r\n return;\r\n }\r\n\r\n await this.executeInTransaction(async () => {\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'DELETE FROM FILTRI WHERE CODUTE = ?',\r\n [codiceUtente],\r\n );\r\n\r\n const dbFields = ['CODUTE', ...fieldsToInsert.map((f) => f.dbField)];\r\n const placeholders = dbFields.map(() => '?');\r\n const values = [codiceUtente, ...fieldsToInsert.map((f) => f.value)];\r\n\r\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\r\n ', ',\r\n )}) VALUES (${placeholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, values);\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n `Errore durante l'inserimento dei filtri per utente ${codiceUtente}: ${error.message}`,\r\n );\r\n }\r\n }\r\n\r\n private async executeInTransaction(operation: () => Promise<void>): Promise<void> {\r\n await operation();\r\n }\r\n\r\n async register(\r\n registrationData: RegisterRequest,\r\n options?: { allowPrivilegedFields?: boolean },\r\n ): Promise<number> {\r\n try {\r\n const allowPrivilegedFields = options?.allowPrivilegedFields === true;\r\n const normalizedEmail = this.normalizeEmail(registrationData.email);\r\n\r\n if (\r\n !allowPrivilegedFields &&\r\n (registrationData.flagSuper !== undefined ||\r\n registrationData.flagAdminConfigurator !== undefined ||\r\n registrationData.roles !== undefined ||\r\n registrationData.permissions !== undefined)\r\n ) {\r\n throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');\r\n }\r\n\r\n await this.ensureEmailIsAvailable(normalizedEmail);\r\n\r\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;\r\n const paramsUtenti = [normalizedEmail, StatoRegistrazione.INVIO];\r\n\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);\r\n\r\n const codiceUtenteResult = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC',\r\n [normalizedEmail],\r\n );\r\n\r\n const codiceUtente = Number(\r\n codiceUtenteResult?.[0]?.CODUTE ?? codiceUtenteResult?.[0]?.codute,\r\n );\r\n if (!codiceUtente) {\r\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\r\n }\r\n\r\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\r\n const utentiConfigPlaceholders = ['?', '?', '?'];\r\n const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];\r\n\r\n const optionalFields: OptionalField<any>[] = [\r\n {\r\n key: 'cellulare',\r\n dbField: 'CELLULARE',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'avatar',\r\n dbField: 'AVATAR',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'flagDueFattori',\r\n dbField: 'FLG2FATT',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'paginaDefault',\r\n dbField: 'PAGDEF',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'nummac',\r\n dbField: 'NUMMAC',\r\n transform: (v) => Number(v),\r\n },\r\n {\r\n key: 'ragSocCli',\r\n dbField: 'RAGSOCCLI',\r\n transform: (v) => String(v),\r\n },\r\n ];\r\n\r\n if (allowPrivilegedFields) {\r\n optionalFields.push(\r\n {\r\n key: 'flagSuper',\r\n dbField: 'FLGSUPER',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'flagAdminConfigurator',\r\n dbField: 'FLGADMINCONFIG',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n );\r\n }\r\n\r\n for (const field of optionalFields) {\r\n const value = registrationData[field.key];\r\n if (value !== undefined && value !== null) {\r\n utentiConfigFields.push(field.dbField);\r\n utentiConfigPlaceholders.push('?');\r\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\r\n }\r\n }\r\n\r\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\r\n ', ',\r\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\r\n\r\n if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\r\n }\r\n\r\n if (\r\n allowPrivilegedFields &&\r\n !!registrationData.permissions &&\r\n registrationData.permissions.length > 0\r\n ) {\r\n await this.permissionService.assignPermissionsToUser(\r\n codiceUtente,\r\n registrationData.permissions,\r\n );\r\n }\r\n\r\n return codiceUtente;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async updateUser(\r\n codiceUtente: number,\r\n user: UserDto,\r\n options?: { allowPrivilegedChanges?: boolean },\r\n ): Promise<void> {\r\n try {\r\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\r\n const allowPrivilegedChanges = options?.allowPrivilegedChanges === true;\r\n\r\n if (\r\n !allowPrivilegedChanges &&\r\n (user.statoRegistrazione !== undefined ||\r\n user.flagSuper !== undefined ||\r\n user.flagAdminConfigurator !== undefined ||\r\n user.roles !== undefined ||\r\n user.permissions !== undefined)\r\n ) {\r\n throw new Error('Non e consentito modificare campi privilegiati.');\r\n }\r\n\r\n const utentiUpdates = [];\r\n const utentiParams = [];\r\n\r\n if (user.email !== undefined) {\r\n const normalizedEmail = this.normalizeEmail(user.email);\r\n await this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);\r\n utentiUpdates.push('usrname = ?');\r\n utentiParams.push(normalizedEmail);\r\n }\r\n if (user.flagGdpr !== undefined) {\r\n utentiUpdates.push('flggdpr = ?');\r\n utentiParams.push(user.flagGdpr);\r\n }\r\n if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {\r\n utentiUpdates.push('stareg = ?');\r\n utentiParams.push(user.statoRegistrazione);\r\n }\r\n\r\n if (utentiUpdates.length > 0) {\r\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\r\n utentiParams.push(codiceUtente);\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\r\n }\r\n\r\n const utentiConfigUpdates = [];\r\n const utentiConfigParams = [];\r\n\r\n if (user.cognome !== undefined) {\r\n utentiConfigUpdates.push('cognome = ?');\r\n utentiConfigParams.push(user.cognome);\r\n }\r\n if (user.nome !== undefined) {\r\n utentiConfigUpdates.push('nome = ?');\r\n utentiConfigParams.push(user.nome);\r\n }\r\n if (user.avatar !== undefined) {\r\n utentiConfigUpdates.push('avatar = ?');\r\n utentiConfigParams.push(user.avatar);\r\n }\r\n if (user.flagDueFattori !== undefined) {\r\n utentiConfigUpdates.push('flg2fatt = ?');\r\n utentiConfigParams.push(user.flagDueFattori);\r\n }\r\n if (user.codiceLingua !== undefined) {\r\n utentiConfigUpdates.push('codlingua = ?');\r\n utentiConfigParams.push(user.codiceLingua);\r\n }\r\n if (user.cellulare !== undefined) {\r\n utentiConfigUpdates.push('cellulare = ?');\r\n utentiConfigParams.push(user.cellulare);\r\n }\r\n if (allowPrivilegedChanges && user.flagSuper !== undefined) {\r\n utentiConfigUpdates.push('flgsuper = ?');\r\n utentiConfigParams.push(user.flagSuper);\r\n }\r\n if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {\r\n utentiConfigUpdates.push('flgadminconfig = ?');\r\n utentiConfigParams.push(user.flagAdminConfigurator);\r\n }\r\n if (user.paginaDefault !== undefined) {\r\n utentiConfigUpdates.push('pagdef = ?');\r\n utentiConfigParams.push(user.paginaDefault);\r\n }\r\n if (user.jsonMetadata !== undefined) {\r\n utentiConfigUpdates.push('json_metadata = ?');\r\n utentiConfigParams.push(user.jsonMetadata);\r\n }\r\n if (user.ragSocCli !== undefined) {\r\n utentiConfigUpdates.push('ragsoccli = ?');\r\n utentiConfigParams.push(user.ragSocCli);\r\n }\r\n\r\n if (utentiConfigUpdates.length > 0) {\r\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\r\n ', ',\r\n )} WHERE CODUTE = ?`;\r\n utentiConfigParams.push(codiceUtente);\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n queryUtentiConfig,\r\n utentiConfigParams,\r\n );\r\n }\r\n\r\n if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\r\n }\r\n\r\n if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {\r\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\r\n }\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\r\n try {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n throw new Error('Codice utente non valido');\r\n }\r\n\r\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\r\n numRep: { dbField: 'NUMREP', type: 'number' },\r\n idxPers: { dbField: 'IDXPERS', type: 'number' },\r\n codCliSuper: { dbField: 'CODCLISUPER', type: 'number' },\r\n codAge: { dbField: 'CODAGE', type: 'number' },\r\n codCliCol: { dbField: 'CODCLICOL', type: 'number' },\r\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\r\n tipFil: { dbField: 'TIPFIL', type: 'number' },\r\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\r\n };\r\n\r\n const fieldsToUpdate = Object.entries(fieldMapping)\r\n .filter(([tsField]) => {\r\n const value = user[tsField as keyof UserDto];\r\n return value !== undefined && value !== null;\r\n })\r\n .map(([tsField, config]) => {\r\n const value = user[tsField as keyof UserDto];\r\n\r\n if (config.type === 'number' && typeof value !== 'number') {\r\n throw new Error(`Il campo ${tsField} deve essere un numero`);\r\n }\r\n if (config.type === 'string' && typeof value !== 'string') {\r\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\r\n }\r\n\r\n return { tsField, dbField: config.dbField, value };\r\n });\r\n\r\n if (fieldsToUpdate.length === 0) {\r\n return;\r\n }\r\n\r\n await this.executeInTransaction(async () => {\r\n const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;\r\n const existingRecord = await Orm.query(this.accessiOptions.databaseOptions, checkQuery, [\r\n codiceUtente,\r\n ]);\r\n const exists = existingRecord[0].CNT > 0;\r\n\r\n if (exists) {\r\n const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');\r\n const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];\r\n const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);\r\n } else {\r\n const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];\r\n const placeholders = dbFields.map(() => '?');\r\n const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];\r\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\r\n ', ',\r\n )}) VALUES (${placeholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, insertValues);\r\n }\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n `Errore durante l'aggiornamento dei filtri per utente ${codiceUtente}: ${error.message}`,\r\n );\r\n }\r\n }\r\n\r\n async deleteUser(codiceCliente: number): Promise<void> {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n StatoRegistrazione.DELETE,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n statoRegistrazione,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public async setGdpr(codiceUtente: number) {\r\n try {\r\n const query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;\r\n const params = [codiceUtente, true];\r\n return await Orm.execute(this.accessiOptions.databaseOptions, query, params);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,195 +1,213 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="it">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="UTF-8">
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<title>Reset Password</title>
|
|
8
|
-
<style>
|
|
9
|
-
* {
|
|
10
|
-
box-sizing: border-box;
|
|
11
|
-
margin: 0;
|
|
12
|
-
padding: 0;
|
|
13
|
-
font-family: Arial, sans-serif;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
body {
|
|
17
|
-
display: flex;
|
|
18
|
-
justify-content: center;
|
|
19
|
-
align-items: center;
|
|
20
|
-
height: 100vh;
|
|
21
|
-
background: linear-gradient(135deg, #0068ae, #004e80, #002c50);
|
|
22
|
-
color: #fff;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.container {
|
|
26
|
-
background: rgba(255, 255, 255, 0.15);
|
|
27
|
-
padding: 25px;
|
|
28
|
-
border-radius: 12px;
|
|
29
|
-
backdrop-filter: blur(12px);
|
|
30
|
-
box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.3);
|
|
31
|
-
width: 380px;
|
|
32
|
-
text-align: center;
|
|
33
|
-
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
h1 {
|
|
37
|
-
font-size: 24px;
|
|
38
|
-
margin-bottom: 15px;
|
|
39
|
-
color: #ffffff;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.form-group {
|
|
43
|
-
margin: 12px 0;
|
|
44
|
-
text-align: left;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
label {
|
|
48
|
-
font-size: 14px;
|
|
49
|
-
font-weight: bold;
|
|
50
|
-
display: block;
|
|
51
|
-
margin-bottom: 5px;
|
|
52
|
-
color: #ffffff;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
input {
|
|
56
|
-
width: 100%;
|
|
57
|
-
padding: 12px;
|
|
58
|
-
border: none;
|
|
59
|
-
border-radius: 6px;
|
|
60
|
-
font-size: 14px;
|
|
61
|
-
margin-top: 5px;
|
|
62
|
-
background: rgba(255, 255, 255, 0.15);
|
|
63
|
-
color: #ffffff;
|
|
64
|
-
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
input:focus {
|
|
68
|
-
outline: none;
|
|
69
|
-
border: 2px solid #ffffff;
|
|
70
|
-
background: rgba(255, 255, 255, 0.2);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.error {
|
|
74
|
-
color: #ff6b6b;
|
|
75
|
-
font-size: 12px;
|
|
76
|
-
margin-top: 5px;
|
|
77
|
-
display: none;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
button {
|
|
81
|
-
background: linear-gradient(90deg, #0080ff, #0068ae);
|
|
82
|
-
border: none;
|
|
83
|
-
padding: 12px;
|
|
84
|
-
font-size: 16px;
|
|
85
|
-
border-radius: 6px;
|
|
86
|
-
width: 100%;
|
|
87
|
-
color: #ffffff;
|
|
88
|
-
cursor: pointer;
|
|
89
|
-
font-weight: bold;
|
|
90
|
-
transition: all 0.3s ease;
|
|
91
|
-
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
button:hover {
|
|
95
|
-
background: linear-gradient(90deg, #0095ff, #0070c0);
|
|
96
|
-
transform: scale(1.05);
|
|
97
|
-
}
|
|
98
|
-
</style>
|
|
99
|
-
</head>
|
|
100
|
-
|
|
101
|
-
<body>
|
|
102
|
-
<div class="container">
|
|
103
|
-
<h1>Reimposta la tua password</h1>
|
|
104
|
-
<form id="resetForm">
|
|
105
|
-
<input type="hidden" id="token" value="">
|
|
106
|
-
<input type="hidden" id="returnUrl" value="">
|
|
107
|
-
<input type="hidden" id="prefix" value="">
|
|
108
|
-
|
|
109
|
-
<div class="form-group">
|
|
110
|
-
<label for="password">Nuova Password:</label>
|
|
111
|
-
<input type="password" id="password" required>
|
|
112
|
-
<p class="error" id="passwordError">La password deve avere almeno
|
|
113
|
-
</div>
|
|
114
|
-
|
|
115
|
-
<div class="form-group">
|
|
116
|
-
<label for="confirmPassword">Conferma Password:</label>
|
|
117
|
-
<input type="password" id="confirmPassword" required>
|
|
118
|
-
<p class="error" id="confirmError">Le password non corrispondono.</p>
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
<button type="submit">Aggiorna password</button>
|
|
122
|
-
</form>
|
|
123
|
-
</div>
|
|
124
|
-
|
|
125
|
-
<script>
|
|
126
|
-
document.addEventListener("DOMContentLoaded", function () {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="it">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Reset Password</title>
|
|
8
|
+
<style>
|
|
9
|
+
* {
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
font-family: Arial, sans-serif;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
body {
|
|
17
|
+
display: flex;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
align-items: center;
|
|
20
|
+
height: 100vh;
|
|
21
|
+
background: linear-gradient(135deg, #0068ae, #004e80, #002c50);
|
|
22
|
+
color: #fff;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.container {
|
|
26
|
+
background: rgba(255, 255, 255, 0.15);
|
|
27
|
+
padding: 25px;
|
|
28
|
+
border-radius: 12px;
|
|
29
|
+
backdrop-filter: blur(12px);
|
|
30
|
+
box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.3);
|
|
31
|
+
width: 380px;
|
|
32
|
+
text-align: center;
|
|
33
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
h1 {
|
|
37
|
+
font-size: 24px;
|
|
38
|
+
margin-bottom: 15px;
|
|
39
|
+
color: #ffffff;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.form-group {
|
|
43
|
+
margin: 12px 0;
|
|
44
|
+
text-align: left;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
label {
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
font-weight: bold;
|
|
50
|
+
display: block;
|
|
51
|
+
margin-bottom: 5px;
|
|
52
|
+
color: #ffffff;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
input {
|
|
56
|
+
width: 100%;
|
|
57
|
+
padding: 12px;
|
|
58
|
+
border: none;
|
|
59
|
+
border-radius: 6px;
|
|
60
|
+
font-size: 14px;
|
|
61
|
+
margin-top: 5px;
|
|
62
|
+
background: rgba(255, 255, 255, 0.15);
|
|
63
|
+
color: #ffffff;
|
|
64
|
+
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
input:focus {
|
|
68
|
+
outline: none;
|
|
69
|
+
border: 2px solid #ffffff;
|
|
70
|
+
background: rgba(255, 255, 255, 0.2);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.error {
|
|
74
|
+
color: #ff6b6b;
|
|
75
|
+
font-size: 12px;
|
|
76
|
+
margin-top: 5px;
|
|
77
|
+
display: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
button {
|
|
81
|
+
background: linear-gradient(90deg, #0080ff, #0068ae);
|
|
82
|
+
border: none;
|
|
83
|
+
padding: 12px;
|
|
84
|
+
font-size: 16px;
|
|
85
|
+
border-radius: 6px;
|
|
86
|
+
width: 100%;
|
|
87
|
+
color: #ffffff;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
font-weight: bold;
|
|
90
|
+
transition: all 0.3s ease;
|
|
91
|
+
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
button:hover {
|
|
95
|
+
background: linear-gradient(90deg, #0095ff, #0070c0);
|
|
96
|
+
transform: scale(1.05);
|
|
97
|
+
}
|
|
98
|
+
</style>
|
|
99
|
+
</head>
|
|
100
|
+
|
|
101
|
+
<body>
|
|
102
|
+
<div class="container">
|
|
103
|
+
<h1>Reimposta la tua password</h1>
|
|
104
|
+
<form id="resetForm">
|
|
105
|
+
<input type="hidden" id="token" value="">
|
|
106
|
+
<input type="hidden" id="returnUrl" value="">
|
|
107
|
+
<input type="hidden" id="prefix" value="">
|
|
108
|
+
|
|
109
|
+
<div class="form-group">
|
|
110
|
+
<label for="password">Nuova Password:</label>
|
|
111
|
+
<input type="password" id="password" required>
|
|
112
|
+
<p class="error" id="passwordError">La password deve avere almeno 8 caratteri.</p>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="form-group">
|
|
116
|
+
<label for="confirmPassword">Conferma Password:</label>
|
|
117
|
+
<input type="password" id="confirmPassword" required>
|
|
118
|
+
<p class="error" id="confirmError">Le password non corrispondono.</p>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<button type="submit">Aggiorna password</button>
|
|
122
|
+
</form>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<script>
|
|
126
|
+
document.addEventListener("DOMContentLoaded", function () {
|
|
127
|
+
function resolveSafeReturnUrl(rawReturnUrl) {
|
|
128
|
+
if (!rawReturnUrl) {
|
|
129
|
+
return "/";
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (rawReturnUrl.startsWith("/")) {
|
|
133
|
+
return rawReturnUrl;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
const parsed = new URL(rawReturnUrl, window.location.origin);
|
|
138
|
+
if (parsed.origin === window.location.origin) {
|
|
139
|
+
return `${parsed.pathname}${parsed.search}${parsed.hash}`;
|
|
140
|
+
}
|
|
141
|
+
} catch (error) {}
|
|
142
|
+
|
|
143
|
+
return "/";
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function resolveSafePrefix(rawPrefix) {
|
|
147
|
+
if (!rawPrefix) {
|
|
148
|
+
return "";
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let normalizedPrefix = rawPrefix.trim();
|
|
152
|
+
if (!normalizedPrefix.startsWith("/")) {
|
|
153
|
+
normalizedPrefix = "/" + normalizedPrefix;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (normalizedPrefix.endsWith("/")) {
|
|
157
|
+
normalizedPrefix = normalizedPrefix.slice(0, -1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return /^\/[A-Za-z0-9/_-]*$/.test(normalizedPrefix) ? normalizedPrefix : "";
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
164
|
+
const token = window.location.pathname.split("/").pop();
|
|
165
|
+
const returnUrl = resolveSafeReturnUrl(urlParams.get("returnUrl"));
|
|
166
|
+
const prefix = resolveSafePrefix(urlParams.get("prefix"));
|
|
167
|
+
|
|
168
|
+
document.getElementById("token").value = token;
|
|
169
|
+
document.getElementById("returnUrl").value = returnUrl;
|
|
170
|
+
document.getElementById("prefix").value = prefix;
|
|
171
|
+
|
|
172
|
+
document.getElementById("resetForm").addEventListener("submit", async function (event) {
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
const password = document.getElementById("password").value;
|
|
175
|
+
const confirmPassword = document.getElementById("confirmPassword").value;
|
|
176
|
+
const passwordError = document.getElementById("passwordError");
|
|
177
|
+
const confirmError = document.getElementById("confirmError");
|
|
178
|
+
|
|
179
|
+
passwordError.style.display = "none";
|
|
180
|
+
confirmError.style.display = "none";
|
|
181
|
+
|
|
182
|
+
if (password.length < 8) {
|
|
183
|
+
passwordError.style.display = "block";
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (password !== confirmPassword) {
|
|
188
|
+
confirmError.style.display = "block";
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
try {
|
|
193
|
+
const response = await fetch(`${prefix}/api/accessi/auth/confirm-reset-password/${token}`, {
|
|
194
|
+
method: "POST",
|
|
195
|
+
headers: { "Content-Type": "application/json" },
|
|
196
|
+
body: JSON.stringify({ newPassword: password })
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
const data = await response.json();
|
|
200
|
+
alert(data.message || "Password aggiornata con successo!");
|
|
201
|
+
} catch (error) {
|
|
202
|
+
alert("Errore nel reset della password. Riprova piu tardi.");
|
|
203
|
+
} finally {
|
|
204
|
+
setTimeout(() => {
|
|
205
|
+
window.location.href = returnUrl;
|
|
206
|
+
}, 500);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
</script>
|
|
211
|
+
</body>
|
|
212
|
+
|
|
213
|
+
</html>
|