emilsoftware-utilities 2.0.0-dev.26 → 2.0.0-dev.28
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/dist/accessi-module/AccessiModule.js +3 -0
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/generated/accessiApi.d.ts +20 -0
- package/dist/accessi-module/Console/generated/accessiApi.js +18 -2
- package/dist/accessi-module/Console/generated/accessiApi.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.d.ts +2 -0
- package/dist/accessi-module/Controllers/UserController.js +61 -0
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +4 -0
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.d.ts +14 -1
- package/dist/accessi-module/Services/UserService/UserService.js +44 -1
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/accessiRuntime.d.ts +45 -0
- package/dist/accessi-module/accessiRuntime.js +39 -0
- package/dist/accessi-module/accessiRuntime.js.map +1 -0
- package/dist/accessi-module/index.d.ts +3 -0
- package/dist/accessi-module/index.js +17 -4
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/security/emailConfiguration.d.ts +20 -0
- package/dist/accessi-module/security/emailConfiguration.js +41 -0
- package/dist/accessi-module/security/emailConfiguration.js.map +1 -0
- package/dist/emilsoftware-utilities-2.0.0-dev.28.tgz +0 -0
- package/dist/initEmilsoftwareModule.js +4 -3
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/package.json +3 -3
- package/dist/emilsoftware-utilities-2.0.0-dev.26.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/UserController.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n Body,\n Controller,\n Delete,\n Get,\n HttpException,\n HttpStatus,\n Param,\n ParseBoolPipe,\n ParseIntPipe,\n Patch,\n Post,\n Put,\n Query,\n Inject,\n Req,\n Res,\n UseGuards,\n} from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport {\n ApiBearerAuth,\n ApiBody,\n ApiCreatedResponse,\n ApiOperation,\n ApiParam,\n ApiQuery,\n ApiResponse,\n ApiTags,\n} from '@nestjs/swagger';\nimport { join } from 'path';\nimport { Logger } from '../../Logger';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions } from '../AccessiModule';\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\nimport { GetUsersResponse } from '../Dtos/GetUsersResponse';\nimport { PublicRegisterRequest } from '../Dtos/PublicRegisterRequest';\nimport { RegisterResponse } from '../Dtos/RegisterResponse';\nimport { RegisterRequest } from '../Dtos/RegisterRequest';\nimport { SetStatoRegistrazioneDto } from '../Dtos/SetStatoRegistrazione';\nimport { UserDto } from '../Dtos/UserDto';\nimport { EmailService } from '../Services/EmailService/EmailService';\nimport { UserService } from '../Services/UserService/UserService';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport {\n checkPublicAuthRateLimit,\n sendPublicAuthRateLimitExceeded,\n} from '../security/publicAuthRateLimit';\nimport {\n ensureSelfOrSuperUser,\n ensureSuperUser,\n getAuthenticatedAccessiUser,\n hasPrivilegedUserChanges,\n} from '../security/accessControl';\n\n@ApiTags('User')\n@Controller('accessi/user')\n/**\n * Gestione utenti: la registrazione pubblica e opt-in, mentre creazione, stato e profili privilegiati\n * richiedono un superutente Accessi. Le API restituiscono sempre il wrapper `BaseResponse` storico.\n */\nexport class UserController {\n private readonly logger = new Logger(UserController.name);\n\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly userService: UserService,\n private readonly emailService: EmailService,\n ) {}\n\n private sendControllerError(res: Response, error: unknown) {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, UserController.name);\n }\n\n @ApiOperation({\n summary: 'Serve la pagina di reset password',\n operationId: 'serveResetPasswordPageUser',\n })\n @ApiParam({\n name: 'token',\n description: 'Token per il reset della password',\n required: true,\n })\n @Get('reset-password/:token')\n async serveResetPasswordPage(@Res() res: Response, @Param('token') _token: string) {\n return res.sendFile(join(__dirname, '..', 'Views', 'reset-password.html'));\n }\n\n @ApiOperation({\n summary: 'Recupera la lista degli utenti',\n operationId: 'getUsers',\n })\n @ApiResponse({\n status: 200,\n description: 'Lista utenti recuperata con successo',\n type: GetUsersResponse,\n })\n @ApiResponse({ status: 401, description: 'Credenziali non valide', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiQuery({\n name: 'email',\n required: false,\n description: \"Email dell'utente da cercare\",\n type: String,\n })\n @ApiQuery({\n name: 'codiceUtente',\n required: false,\n description: \"Codice dell'utente da cercare\",\n type: Number,\n })\n @ApiQuery({\n name: 'includeExtensionFields',\n required: false,\n description: 'Includi extension fields',\n type: Boolean,\n })\n @ApiQuery({\n name: 'includeGrants',\n required: false,\n description: 'Includi permessi',\n type: Boolean,\n })\n @ApiQuery({\n name: 'limit',\n required: false,\n description: 'Numero massimo di utenti restituiti (1-1000). Omesso = tutti.',\n type: Number,\n })\n @ApiQuery({\n name: 'offset',\n required: false,\n description: 'Numero di utenti da saltare (paginazione).',\n type: Number,\n })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Get('get-users')\n async getUsers(\n @Req() request: Request,\n @Res() res: Response,\n @Query('email') email?: string,\n @Query('codiceUtente', new ParseIntPipe({ optional: true })) codiceUtente?: number,\n @Query('includeExtensionFields', new ParseBoolPipe({ optional: true }))\n includeExtensionFields?: boolean,\n @Query('includeGrants', new ParseBoolPipe({ optional: true }))\n includeGrants?: boolean,\n @Query('limit', new ParseIntPipe({ optional: true })) limit?: number,\n @Query('offset', new ParseIntPipe({ optional: true })) offset?: number,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono consultare gli utenti.',\n );\n\n const filters = { email, codiceUtente, limit, offset };\n const options = {\n includeExtensionFields: includeExtensionFields ?? true,\n includeGrants: includeGrants ?? true,\n };\n\n const users = await this.userService.getUsers(filters, options);\n const total = await this.userService.countUsers({ email, codiceUtente });\n res.setHeader('X-Total-Count', String(total));\n return RestUtilities.sendBaseResponse(res, users);\n } catch (error) {\n this.logger.error('Errore durante il recupero degli utenti: ', error);\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Elimina un utente',\n operationId: 'deleteUser',\n description: 'Imposta lo stato di un utente a eliminato senza rimuovere i record.',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da eliminare\",\n required: true,\n example: 123,\n })\n @ApiResponse({ status: 200, description: 'Utente eliminato con successo', type: ActionResponse })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Delete('delete-user/:codiceUtente')\n async deleteUser(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono eliminare utenti.',\n );\n\n await this.userService.deleteUser(codiceUtente);\n return RestUtilities.sendOKMessage(res, \"L'utente e' stato eliminato con successo.\");\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta lo stato di registrazione di un utente',\n operationId: 'setStatoRegistrazione',\n })\n @ApiResponse({\n status: 200,\n description: 'Stato registrazione aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: 500,\n description: 'Errore interno del server',\n type: ErrorResponse,\n })\n @ApiBody({ type: SetStatoRegistrazioneDto })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('set-stato')\n async setStatoRegistrazione(\n @Req() request: Request,\n @Body() body: SetStatoRegistrazioneDto,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono modificare lo stato di registrazione.',\n );\n\n const { codiceUtente, statoRegistrazione } = body;\n if (!codiceUtente) throw new BadRequestException('Il codice utente e\\' obbligatorio.');\n if (statoRegistrazione === undefined) {\n throw new BadRequestException('Lo stato registrazione e\\' obbligatorio.');\n }\n\n await this.userService.setStato(codiceUtente, statoRegistrazione);\n return RestUtilities.sendOKMessage(\n res,\n `Lo stato dell'utente ${codiceUtente} e' stato aggiornato a ${statoRegistrazione}.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Registra un nuovo utente',\n description: 'Disponibile soltanto quando publicRegistration.enabled e true. Per utenti SSO usare il provisioning master nel tag Federated authentication.',\n operationId: 'register',\n })\n @ApiBody({\n type: PublicRegisterRequest,\n description: \"Dati necessari per la registrazione dell'utente\",\n })\n @ApiCreatedResponse({\n description:\n 'Utente registrato con successo. Restituisce il codice utente e invia una mail di reset password.',\n type: RegisterResponse,\n })\n @ApiResponse({\n status: HttpStatus.BAD_REQUEST,\n description: 'Errore nella registrazione.',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: HttpStatus.INTERNAL_SERVER_ERROR,\n description: 'Errore interno del server durante la registrazione o l\\'invio email.',\n type: ErrorResponse,\n })\n @Post('register')\n async register(\n @Req() request: Request,\n @Body() registrationData: PublicRegisterRequest,\n @Res() res: Response,\n ) {\n try {\n if (this.accessiOptions.publicRegistration?.enabled !== true) {\n throw new HttpException(\n 'La registrazione pubblica e disabilitata. Un amministratore deve creare l utente.',\n HttpStatus.FORBIDDEN,\n );\n }\n\n const rateLimitDecision = checkPublicAuthRateLimit(\n this.accessiOptions,\n 'register',\n request,\n [registrationData?.email],\n );\n if (!rateLimitDecision.allowed) {\n return sendPublicAuthRateLimitExceeded(res, rateLimitDecision.retryAfterSeconds);\n }\n\n const codiceUtente = await this.userService.register(registrationData, {\n allowPrivilegedFields: false,\n });\n\n await this.emailService.sendPasswordResetEmail(registrationData.email);\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\n } catch (error) {\n const status =\n error instanceof HttpException ? error.getStatus() : HttpStatus.BAD_REQUEST;\n return RestUtilities.sendErrorMessage(res, error, UserController.name, status);\n }\n }\n\n @ApiOperation({ summary: 'Crea un utente locale da amministrazione', operationId: 'createManagedUser', description: 'Riservato a superutente. Crea un utente in attesa di impostazione password e invia la mail di reset.' })\n @ApiBody({ type: RegisterRequest })\n @ApiCreatedResponse({ type: RegisterResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('create-managed-user')\n async createManagedUser(@Req() request: Request, @Body() registrationData: RegisterRequest, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare utenti.');\n const codiceUtente = await this.userService.register(registrationData, { allowPrivilegedFields: true });\n await this.emailService.sendPasswordResetEmail(registrationData.email, registrationData.htmlMail);\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Aggiorna un utente esistente',\n operationId: 'updateUtente',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da aggiornare\",\n required: true,\n example: 123,\n })\n @ApiBody({\n type: UserDto,\n description: \"Dati aggiornati dell'utente\",\n })\n @ApiResponse({\n status: HttpStatus.OK,\n description: 'Utente aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: \"Errore nell'aggiornamento\", type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Put('update-user/:codiceUtente')\n async updateUtente(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() user: UserDto,\n @Res() res: Response,\n ) {\n try {\n const authenticatedUser = getAuthenticatedAccessiUser(request);\n const isPrivilegedUpdate = hasPrivilegedUserChanges(user);\n\n if (isPrivilegedUpdate) {\n ensureSuperUser(\n authenticatedUser,\n 'Solo gli amministratori possono modificare ruoli, permessi o flag privilegiati.',\n );\n } else {\n ensureSelfOrSuperUser(\n authenticatedUser,\n codiceUtente,\n 'Puoi modificare solo il tuo profilo.',\n );\n }\n\n if (user.codiceUtente !== undefined && user.codiceUtente !== codiceUtente) {\n throw new BadRequestException('Il codice utente nel body non coincide con quello del path.');\n }\n\n await this.userService.updateUser(codiceUtente, user, {\n allowPrivilegedChanges: authenticatedUser.flagSuper,\n });\n\n return RestUtilities.sendOKMessage(\n res,\n `L'utente ${codiceUtente} e' stato aggiornato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta il consenso GDPR per un utente',\n operationId: 'setGdpr',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente che accetta il GDPR\",\n required: true,\n example: 123,\n })\n @ApiResponse({\n status: 200,\n description: 'Consenso GDPR impostato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: 'Errore nella richiesta', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Patch('set-gdpr/:codiceUtente')\n async setGdpr(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSelfOrSuperUser(\n getAuthenticatedAccessiUser(request),\n codiceUtente,\n 'Puoi impostare il GDPR solo sul tuo utente.',\n );\n\n await this.userService.setGdpr(codiceUtente);\n return RestUtilities.sendOKMessage(res, `L'utente ${codiceUtente} ha accettato il GDPR.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UserController.js","sourceRoot":"","sources":["../../../src/accessi-module/Controllers/UserController.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BadRequestException,\n Body,\n Controller,\n Delete,\n Get,\n HttpException,\n HttpStatus,\n Param,\n ParseBoolPipe,\n ParseIntPipe,\n Patch,\n Post,\n Put,\n Query,\n Inject,\n Req,\n Res,\n UseGuards,\n} from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport {\n ApiBearerAuth,\n ApiBody,\n ApiCreatedResponse,\n ApiOperation,\n ApiParam,\n ApiQuery,\n ApiResponse,\n ApiTags,\n} from '@nestjs/swagger';\nimport { join } from 'path';\nimport { Logger } from '../../Logger';\nimport { RestUtilities } from '../../Utilities';\nimport type { AccessiOptions } from '../AccessiModule';\nimport { ActionResponse, ErrorResponse } from '../Dtos/BaseResponse';\nimport { GetUsersResponse } from '../Dtos/GetUsersResponse';\nimport { PublicRegisterRequest } from '../Dtos/PublicRegisterRequest';\nimport { RegisterResponse } from '../Dtos/RegisterResponse';\nimport { RegisterRequest } from '../Dtos/RegisterRequest';\nimport { SetStatoRegistrazioneDto } from '../Dtos/SetStatoRegistrazione';\nimport { UserDto } from '../Dtos/UserDto';\nimport { EmailService } from '../Services/EmailService/EmailService';\nimport { UserService } from '../Services/UserService/UserService';\nimport { JwtSimpleGuard } from '../jwt/jwt.strategy';\nimport {\n checkPublicAuthRateLimit,\n sendPublicAuthRateLimitExceeded,\n} from '../security/publicAuthRateLimit';\nimport {\n ensureSelfOrSuperUser,\n ensureSuperUser,\n getAuthenticatedAccessiUser,\n hasPrivilegedUserChanges,\n} from '../security/accessControl';\n\n@ApiTags('User')\n@Controller('accessi/user')\n/**\n * Gestione utenti: la registrazione pubblica e opt-in, mentre creazione, stato e profili privilegiati\n * richiedono un superutente Accessi. Le API restituiscono sempre il wrapper `BaseResponse` storico.\n */\nexport class UserController {\n private readonly logger = new Logger(UserController.name);\n\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly userService: UserService,\n private readonly emailService: EmailService,\n ) {}\n\n private sendControllerError(res: Response, error: unknown) {\n // Lo status viene derivato centralmente da RestUtilities (HttpException o 500).\n return RestUtilities.sendErrorMessage(res, error, UserController.name);\n }\n\n @ApiOperation({\n summary: 'Serve la pagina di reset password',\n operationId: 'serveResetPasswordPageUser',\n })\n @ApiParam({\n name: 'token',\n description: 'Token per il reset della password',\n required: true,\n })\n @Get('reset-password/:token')\n async serveResetPasswordPage(@Res() res: Response, @Param('token') _token: string) {\n return res.sendFile(join(__dirname, '..', 'Views', 'reset-password.html'));\n }\n\n @ApiOperation({\n summary: 'Recupera la lista degli utenti',\n operationId: 'getUsers',\n })\n @ApiResponse({\n status: 200,\n description: 'Lista utenti recuperata con successo',\n type: GetUsersResponse,\n })\n @ApiResponse({ status: 401, description: 'Credenziali non valide', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiQuery({\n name: 'email',\n required: false,\n description: \"Email dell'utente da cercare\",\n type: String,\n })\n @ApiQuery({\n name: 'codiceUtente',\n required: false,\n description: \"Codice dell'utente da cercare\",\n type: Number,\n })\n @ApiQuery({\n name: 'includeExtensionFields',\n required: false,\n description: 'Includi extension fields',\n type: Boolean,\n })\n @ApiQuery({\n name: 'includeGrants',\n required: false,\n description: 'Includi permessi',\n type: Boolean,\n })\n @ApiQuery({\n name: 'limit',\n required: false,\n description: 'Numero massimo di utenti restituiti (1-1000). Omesso = tutti.',\n type: Number,\n })\n @ApiQuery({\n name: 'offset',\n required: false,\n description: 'Numero di utenti da saltare (paginazione).',\n type: Number,\n })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Get('get-users')\n async getUsers(\n @Req() request: Request,\n @Res() res: Response,\n @Query('email') email?: string,\n @Query('codiceUtente', new ParseIntPipe({ optional: true })) codiceUtente?: number,\n @Query('includeExtensionFields', new ParseBoolPipe({ optional: true }))\n includeExtensionFields?: boolean,\n @Query('includeGrants', new ParseBoolPipe({ optional: true }))\n includeGrants?: boolean,\n @Query('limit', new ParseIntPipe({ optional: true })) limit?: number,\n @Query('offset', new ParseIntPipe({ optional: true })) offset?: number,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono consultare gli utenti.',\n );\n\n const filters = { email, codiceUtente, limit, offset };\n const options = {\n includeExtensionFields: includeExtensionFields ?? true,\n includeGrants: includeGrants ?? true,\n };\n\n const users = await this.userService.getUsers(filters, options);\n const total = await this.userService.countUsers({ email, codiceUtente });\n res.setHeader('X-Total-Count', String(total));\n return RestUtilities.sendBaseResponse(res, users);\n } catch (error) {\n this.logger.error('Errore durante il recupero degli utenti: ', error);\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Elimina un utente',\n operationId: 'deleteUser',\n description: 'Imposta lo stato di un utente a eliminato senza rimuovere i record.',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da eliminare\",\n required: true,\n example: 123,\n })\n @ApiResponse({ status: 200, description: 'Utente eliminato con successo', type: ActionResponse })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Delete('delete-user/:codiceUtente')\n async deleteUser(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono eliminare utenti.',\n );\n\n await this.userService.deleteUser(codiceUtente);\n return RestUtilities.sendOKMessage(res, \"L'utente e' stato eliminato con successo.\");\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Forza l invio dell email di reset password a un utente',\n operationId: 'forcePasswordReset',\n description: 'Riservato al superutente. Richiede un servizio email configurato; altrimenti risponde con ACCESSI_EMAIL_NOT_CONFIGURED.',\n })\n @ApiParam({ name: 'codiceUtente', description: 'Codice identificativo dell utente', required: true, example: 123, type: Number })\n @ApiResponse({ status: 200, description: 'Email di reset inviata', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Servizio email non configurato', type: ErrorResponse })\n @ApiResponse({ status: 404, description: 'Utente non trovato', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('force-password-reset/:codiceUtente')\n async forcePasswordReset(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono forzare il reset password.',\n );\n await this.userService.forcePasswordReset(codiceUtente);\n return RestUtilities.sendOKMessage(res, `Email di reset inviata all utente ${codiceUtente}.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Forza il reset password per tutti gli utenti con password legacy',\n operationId: 'forcePasswordResetLegacy',\n description: 'Riservato al superutente. Invia l email di reset a tutti gli utenti la cui password non e ancora nel formato moderno. Richiede un servizio email configurato.',\n })\n @ApiResponse({ status: 200, description: 'Email di reset inviate', type: ActionResponse })\n @ApiResponse({ status: 400, description: 'Servizio email non configurato', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('force-password-reset-legacy')\n async forcePasswordResetLegacy(@Req() request: Request, @Res() res: Response) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono forzare il reset password.',\n );\n const sent = await this.userService.forcePasswordResetForLegacyPasswords();\n return RestUtilities.sendOKMessage(res, `Email di reset inviata a ${sent} utenti con password legacy.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta lo stato di registrazione di un utente',\n operationId: 'setStatoRegistrazione',\n })\n @ApiResponse({\n status: 200,\n description: 'Stato registrazione aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({\n status: 400,\n description: 'Errore nei parametri della richiesta',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: 500,\n description: 'Errore interno del server',\n type: ErrorResponse,\n })\n @ApiBody({ type: SetStatoRegistrazioneDto })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('set-stato')\n async setStatoRegistrazione(\n @Req() request: Request,\n @Body() body: SetStatoRegistrazioneDto,\n @Res() res: Response,\n ) {\n try {\n ensureSuperUser(\n getAuthenticatedAccessiUser(request),\n 'Solo gli amministratori possono modificare lo stato di registrazione.',\n );\n\n const { codiceUtente, statoRegistrazione } = body;\n if (!codiceUtente) throw new BadRequestException('Il codice utente e\\' obbligatorio.');\n if (statoRegistrazione === undefined) {\n throw new BadRequestException('Lo stato registrazione e\\' obbligatorio.');\n }\n\n await this.userService.setStato(codiceUtente, statoRegistrazione);\n return RestUtilities.sendOKMessage(\n res,\n `Lo stato dell'utente ${codiceUtente} e' stato aggiornato a ${statoRegistrazione}.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Registra un nuovo utente',\n description: 'Disponibile soltanto quando publicRegistration.enabled e true. Per utenti SSO usare il provisioning master nel tag Federated authentication.',\n operationId: 'register',\n })\n @ApiBody({\n type: PublicRegisterRequest,\n description: \"Dati necessari per la registrazione dell'utente\",\n })\n @ApiCreatedResponse({\n description:\n 'Utente registrato con successo. Restituisce il codice utente e invia una mail di reset password.',\n type: RegisterResponse,\n })\n @ApiResponse({\n status: HttpStatus.BAD_REQUEST,\n description: 'Errore nella registrazione.',\n type: ErrorResponse,\n })\n @ApiResponse({\n status: HttpStatus.INTERNAL_SERVER_ERROR,\n description: 'Errore interno del server durante la registrazione o l\\'invio email.',\n type: ErrorResponse,\n })\n @Post('register')\n async register(\n @Req() request: Request,\n @Body() registrationData: PublicRegisterRequest,\n @Res() res: Response,\n ) {\n try {\n if (this.accessiOptions.publicRegistration?.enabled !== true) {\n throw new HttpException(\n 'La registrazione pubblica e disabilitata. Un amministratore deve creare l utente.',\n HttpStatus.FORBIDDEN,\n );\n }\n\n const rateLimitDecision = checkPublicAuthRateLimit(\n this.accessiOptions,\n 'register',\n request,\n [registrationData?.email],\n );\n if (!rateLimitDecision.allowed) {\n return sendPublicAuthRateLimitExceeded(res, rateLimitDecision.retryAfterSeconds);\n }\n\n const codiceUtente = await this.userService.register(registrationData, {\n allowPrivilegedFields: false,\n });\n\n await this.emailService.sendPasswordResetEmail(registrationData.email);\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\n } catch (error) {\n const status =\n error instanceof HttpException ? error.getStatus() : HttpStatus.BAD_REQUEST;\n return RestUtilities.sendErrorMessage(res, error, UserController.name, status);\n }\n }\n\n @ApiOperation({ summary: 'Crea un utente locale da amministrazione', operationId: 'createManagedUser', description: 'Riservato a superutente. Crea un utente in attesa di impostazione password e invia la mail di reset.' })\n @ApiBody({ type: RegisterRequest })\n @ApiCreatedResponse({ type: RegisterResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Post('create-managed-user')\n async createManagedUser(@Req() request: Request, @Body() registrationData: RegisterRequest, @Res() res: Response) {\n try {\n ensureSuperUser(getAuthenticatedAccessiUser(request), 'Solo gli amministratori possono creare utenti.');\n const codiceUtente = await this.userService.register(registrationData, { allowPrivilegedFields: true });\n await this.emailService.sendPasswordResetEmail(registrationData.email, registrationData.htmlMail);\n return RestUtilities.sendBaseResponse(res, codiceUtente, HttpStatus.CREATED);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Aggiorna un utente esistente',\n operationId: 'updateUtente',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente da aggiornare\",\n required: true,\n example: 123,\n })\n @ApiBody({\n type: UserDto,\n description: \"Dati aggiornati dell'utente\",\n })\n @ApiResponse({\n status: HttpStatus.OK,\n description: 'Utente aggiornato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: \"Errore nell'aggiornamento\", type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiResponse({ status: 500, description: 'Errore interno del server', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Put('update-user/:codiceUtente')\n async updateUtente(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Body() user: UserDto,\n @Res() res: Response,\n ) {\n try {\n const authenticatedUser = getAuthenticatedAccessiUser(request);\n const isPrivilegedUpdate = hasPrivilegedUserChanges(user);\n\n if (isPrivilegedUpdate) {\n ensureSuperUser(\n authenticatedUser,\n 'Solo gli amministratori possono modificare ruoli, permessi o flag privilegiati.',\n );\n } else {\n ensureSelfOrSuperUser(\n authenticatedUser,\n codiceUtente,\n 'Puoi modificare solo il tuo profilo.',\n );\n }\n\n if (user.codiceUtente !== undefined && user.codiceUtente !== codiceUtente) {\n throw new BadRequestException('Il codice utente nel body non coincide con quello del path.');\n }\n\n await this.userService.updateUser(codiceUtente, user, {\n allowPrivilegedChanges: authenticatedUser.flagSuper,\n });\n\n return RestUtilities.sendOKMessage(\n res,\n `L'utente ${codiceUtente} e' stato aggiornato con successo.`,\n );\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n\n @ApiOperation({\n summary: 'Imposta il consenso GDPR per un utente',\n operationId: 'setGdpr',\n })\n @ApiParam({\n name: 'codiceUtente',\n description: \"Codice identificativo dell'utente che accetta il GDPR\",\n required: true,\n example: 123,\n })\n @ApiResponse({\n status: 200,\n description: 'Consenso GDPR impostato con successo',\n type: ActionResponse,\n })\n @ApiResponse({ status: 400, description: 'Errore nella richiesta', type: ErrorResponse })\n @ApiResponse({ status: 403, description: 'Operazione non autorizzata', type: ErrorResponse })\n @ApiBearerAuth()\n @UseGuards(JwtSimpleGuard)\n @Patch('set-gdpr/:codiceUtente')\n async setGdpr(\n @Req() request: Request,\n @Param('codiceUtente', ParseIntPipe) codiceUtente: number,\n @Res() res: Response,\n ) {\n try {\n ensureSelfOrSuperUser(\n getAuthenticatedAccessiUser(request),\n codiceUtente,\n 'Puoi impostare il GDPR solo sul tuo utente.',\n );\n\n await this.userService.setGdpr(codiceUtente);\n return RestUtilities.sendOKMessage(res, `L'utente ${codiceUtente} ha accettato il GDPR.`);\n } catch (error) {\n return this.sendControllerError(res, error);\n }\n }\n}\n"]}
|
|
@@ -33,6 +33,7 @@ const common_1 = require("@nestjs/common");
|
|
|
33
33
|
const Logger_1 = require("../../../Logger");
|
|
34
34
|
const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
|
|
35
35
|
const passwordResetToken_1 = require("../../security/passwordResetToken");
|
|
36
|
+
const emailConfiguration_1 = require("../../security/emailConfiguration");
|
|
36
37
|
let EmailService = EmailService_1 = class EmailService {
|
|
37
38
|
constructor(accessiOptions) {
|
|
38
39
|
this.accessiOptions = accessiOptions;
|
|
@@ -45,6 +46,7 @@ let EmailService = EmailService_1 = class EmailService {
|
|
|
45
46
|
/** Sends the one-time login code without including it in application logs. */
|
|
46
47
|
sendTwoFactorCode(email, code, validityMinutes) {
|
|
47
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
(0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
|
|
48
50
|
yield this.transporter.sendMail({
|
|
49
51
|
from: this.accessiOptions.emailOptions.from,
|
|
50
52
|
to: email,
|
|
@@ -60,6 +62,8 @@ let EmailService = EmailService_1 = class EmailService {
|
|
|
60
62
|
sendPasswordResetEmail(email, htmlMail) {
|
|
61
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
64
|
var _a;
|
|
65
|
+
// Fuori dal try: deve propagare ACCESSI_EMAIL_NOT_CONFIGURED, non essere mascherato dall'errore generico.
|
|
66
|
+
(0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
|
|
63
67
|
let codiceUtente = null;
|
|
64
68
|
let resetToken = null;
|
|
65
69
|
let nonce = null;
|
|
@@ -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';\nimport { v4 as uuidv4 } from 'uuid';\nimport type { AccessiOptions } from '../../AccessiModule';\nimport { Orm } from '../../../Orm';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { Logger } from '../../../Logger';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport {\n createPasswordResetToken,\n getAccessiJwtSecret,\n} from '../../security/passwordResetToken';\n\n@Injectable()\n/** Sends password lifecycle email. It deliberately does not expose whether an email exists to public callers. */\nexport class EmailService {\n private readonly logger = new Logger(EmailService.name);\n\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 /** Sends the one-time login code without including it in application logs. */\n public async sendTwoFactorCode(email: string, code: string, validityMinutes: number): Promise<void> {\n await this.transporter.sendMail({\n from: this.accessiOptions.emailOptions.from,\n to: email,\n subject: 'Codice di accesso',\n text: `Il tuo codice di accesso e: ${code}\\n\\nScade entro ${validityMinutes} minuti e puo essere usato una sola volta. Se non hai richiesto l accesso, ignora questa email.`,\n });\n }\n\n /**\n * Creates a short-lived, one-use reset token and sends it by email. Invalid, missing, blocked or deleted users\n * return without error to prevent account enumeration. On delivery failure the stored reset nonce is cleared.\n */\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\n let codiceUtente: number | null = null;\n let resetToken: string | null = null;\n let nonce: 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: Record<string, unknown>) => ({\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 nonce = uuidv4();\n const secret = getAccessiJwtSecret(this.accessiOptions, 'reset');\n resetToken = createPasswordResetToken(user.codiceUtente, nonce, secret);\n\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\n [nonce, codiceUtente],\n false,\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 && nonce) {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ? AND KEYREG = ?',\n [codiceUtente, nonce],\n false,\n ).catch(() => undefined);\n }\n this.logger.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"]}
|
|
1
|
+
{"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/EmailService/EmailService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+BAAoC;AAEpC,sCAAmC;AACnC,2CAAoD;AACpD,4CAAyC;AACzC,sEAAmE;AACnE,0EAG2C;AAC3C,0EAA0E;AAInE,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGvB,YAAuC,cAA+C;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAFrE,WAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;QAQhD,gBAAW,GAAG,oBAAU,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IANM,CAAC;IAE1F,sBAAsB,CAAC,MAAc,EAAE,QAAgB;QACrD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAID,8EAA8E;IACjE,iBAAiB,CAAC,KAAa,EAAE,IAAY,EAAE,eAAuB;;YACjF,IAAA,0CAAqB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;gBAC3C,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,+BAA+B,IAAI,mBAAmB,eAAe,iGAAiG;aAC7K,CAAC,CAAC;QACL,CAAC;KAAA;IAED;;;OAGG;IACU,sBAAsB,CAAC,KAAa,EAAE,QAAiB;;;YAClE,0GAA0G;YAC1G,IAAA,0CAAqB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3C,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,KAAK,GAAkB,IAAI,CAAC;YAEhC,IAAI,CAAC;gBACH,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACrD,OAAO;gBACT,CAAC;gBAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,MAAM,SAAG,CAAC,KAAK,CAChC,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,4GAA4G,EAC5G,CAAC,eAAe,CAAC,CAClB,CAAC;gBACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAA4B,EAAE,EAAE;;oBAAC,OAAA,CAAC;wBAC7D,YAAY,EAAE,MAAM,CAAC,MAAA,MAAA,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,MAAM,mCAAI,GAAG,CAAC,MAAM,CAAC;wBACxF,kBAAkB,EAAE,MAAM,CACxB,MAAA,MAAA,MAAA,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,MAAM,mCAAI,GAAG,CAAC,MAAM,CAC/E;qBACF,CAAC,CAAA;iBAAA,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEP,IACE,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA;oBACnB,IAAI,CAAC,kBAAkB,KAAK,uCAAkB,CAAC,KAAK;oBACpD,IAAI,CAAC,kBAAkB,KAAK,uCAAkB,CAAC,MAAM,EACrD,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACjC,KAAK,GAAG,IAAA,SAAM,GAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACjE,UAAU,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAExE,MAAM,SAAG,CAAC,OAAO,CACf,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,gDAAgD,EAChD,CAAC,KAAK,EAAE,YAAY,CAAC,EACrB,KAAK,CACN,CAAC;gBAEF,8BAA8B;gBAC9B,MAAM,oBAAoB,GACxB,aAAa;oBACb,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC;oBAClE,UAAU;oBACV,kBAAkB,CAAC,MAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,mCAAI,EAAE,CAAC,CAAC;gBACxE,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;gBAEtE,2BAA2B;gBAC3B,IAAI,QAAQ,GAAG,GAAG,oBAAoB,0CAA0C,kBAAkB,CAChG,UAAU,CACX,GAAG,oBAAoB,EAAE,CAAC;gBAE3B,mCAAmC;gBACnC,IAAI,eAAe,EAAE,CAAC;oBACpB,QAAQ,GAAG,GAAG,eAAe,UAAU,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,CAAC;gBAED,IAAI,OAAe,CAAC;gBAEpB,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG;;;;mCAIiB,QAAQ;;;;;;;oCAOP,CAAC;gBAC/B,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,WAAW,GAAG;oBAClB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI;oBAC3C,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,uBAAuB;oBAChC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI;iBACX,CAAC;gBAEF,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;oBAC1B,MAAM,SAAG,CAAC,OAAO,CACf,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,iEAAiE,EACjE,CAAC,YAAY,EAAE,KAAK,CAAC,EACrB,KAAK,CACN,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;KAAA;IAEO,WAAW,CAAC,OAAe;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,QAAQ,CAAC;QACjB,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,6BAA6B,CAAC;QACtC,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,gBAAgB,CAAC;QACzB,IAAI,IAAI,gBAAgB,CAAC;QACzB,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,0BAA0B,CAAC;QACnC,IAAI,IAAI,2DAA2D,CAAC;QACpE,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,yBAAyB,CAAC;QAClC,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,+BAA+B,CAAC;QACxC,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,yCAAyC,CAAC;QAClD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,kDAAkD,CAAC;QAC3D,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,uCAAuC,CAAC;QAChD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,4CAA4C,CAAC;QACrD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kCAAkC,CAAC;QAC3C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,uDAAuD,CAAC;QAChE,IAAI,IAAI,wDAAwD,CAAC;QACjE,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI;YACF,wFAAwF,CAAC;QAC3F,IAAI,IAAI,qCAAqC,CAAC;QAC9C,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,wEAAwE,CAAC;QACjF,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,uDAAuD,CAAC;QAChE,IAAI,IAAI,yEAAyE,CAAC;QAClF,IAAI,IAAI,2EAA2E,CAAC;QACpF,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,qDAAqD,CAAC;QAC9D,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,wDAAwD,CAAC;QACjE,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,gCAAgC,CAAC;QACzC,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,8CAA8C,CAAC;QACvD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oDAAoD,CAAC;QAC7D,IAAI,IAAI,iDAAiD,CAAC;QAC1D,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,qEAAqE,CAAC;QAC9E,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,oFAAoF,CAAC;QAC7F,IAAI,IAAI,6CAA6C,CAAC;QACtD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,WAAW,CAAC;QACpB,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI,IAAI,SAAS,CAAC;QAClB,IAAI;YACF,gKAAgK,CAAC;QACnK,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI;YACF,iPAAiP,CAAC;QACpP,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI;YACF,kQAAkQ,CAAC;QACrQ,IAAI,IAAI,wCAAwC,CAAC;QACjD,IAAI,IAAI,YAAY,CAAC;QACrB,IAAI;YACF,uJAAuJ,CAAC;QAC1J,IAAI,IAAI,oFAAoF,CAAC;QAC7F,IAAI,IAAI,sCAAsC,CAAC;QAC/C,IAAI,IAAI,qBAAqB,CAAC;QAC9B,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI;YACF,iGAAiG,CAAC;QACpG,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI,IAAI,iBAAiB,CAAC;QAC1B,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI;YACF,uHAAuH,CAAC;QAC1H,IAAI,IAAI,yBAAyB,CAAC;QAClC,IAAI;YACF,wKAAwK,CAAC;QAC3K,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI;YACF,iJAAiJ,CAAC;QACpJ,IAAI;YACF,wMAAwM,CAAC;QAC3M,IAAI,IAAI,yDAAyD,CAAC;QAClE,IAAI,IAAI,0DAA0D,CAAC;QACnE,IAAI;YACF,mLAAmL,CAAC;QACtL,IAAI;YACF,wNAAwN,CAAC;QAC3N,IAAI;YACF,kGAAkG,CAAC;QACrG,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI;YACF,qNAAqN,CAAC;QACxN,IAAI;YACF,gQAAgQ,CAAC;QACnQ,IAAI;YACF,yFAAyF,CAAC;QAC5F,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI;YACF,oYAAoY,CAAC;QACvY,IAAI;YACF,gGAAgG;gBAChG,OAAO;gBACP,KAAK,CAAC;QACR,IAAI;YACF,+FAA+F,CAAC;QAClG,IAAI;YACF,2FAA2F,CAAC;QAC9F,IAAI;YACF,0FAA0F,CAAC;QAC7F,IAAI,IAAI,sFAAsF,CAAC;QAC/F,IAAI,IAAI,+EAA+E,CAAC;QACxF,IAAI,IAAI,2EAA2E,CAAC;QACpF,IAAI,IAAI,0EAA0E,CAAC;QACnF,IAAI,IAAI,sEAAsE,CAAC;QAC/E,IAAI,IAAI,+DAA+D,CAAC;QACxE,IAAI,IAAI,2DAA2D,CAAC;QACpE,IAAI,IAAI,0DAA0D,CAAC;QACnE,IAAI,IAAI,sDAAsD,CAAC;QAC/D,IAAI,IAAI,+CAA+C,CAAC;QACxD,IAAI,IAAI,2CAA2C,CAAC;QACpD,IAAI,IAAI,0CAA0C,CAAC;QACnD,IAAI,IAAI,gDAAgD,CAAC;QACzD,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI,IAAI,oCAAoC,CAAC;QAC7C,IAAI,IAAI,gCAAgC,CAAC;QACzC,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,uCAAuC,CAAC;QAChD,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,IAAI,mBAAmB,CAAC;QAC5B,IAAI,IAAI,uBAAuB,CAAC;QAChC,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,uBAAuB,CAAC;QAChC,IAAI,IAAI,sBAAsB,CAAC;QAC/B,IAAI,IAAI,kBAAkB,CAAC;QAC3B,IAAI,IAAI,eAAe,CAAC;QACxB,IAAI,IAAI,SAAS,CAAC;QAClB,IAAI,IAAI,UAAU,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAraY,oCAAY;uBAAZ,YAAY;IAFxB,IAAA,mBAAU,GAAE;IACb,iHAAiH;;IAIlG,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GAH3B,YAAY,CAqaxB","sourcesContent":["import nodemailer from 'nodemailer';\nimport { v4 as uuidv4 } from 'uuid';\nimport type { AccessiOptions } from '../../AccessiModule';\nimport { Orm } from '../../../Orm';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { Logger } from '../../../Logger';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport {\n createPasswordResetToken,\n getAccessiJwtSecret,\n} from '../../security/passwordResetToken';\nimport { assertEmailConfigured } from '../../security/emailConfiguration';\n\n@Injectable()\n/** Sends password lifecycle email. It deliberately does not expose whether an email exists to public callers. */\nexport class EmailService {\n private readonly logger = new Logger(EmailService.name);\n\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 /** Sends the one-time login code without including it in application logs. */\n public async sendTwoFactorCode(email: string, code: string, validityMinutes: number): Promise<void> {\n assertEmailConfigured(this.accessiOptions);\n await this.transporter.sendMail({\n from: this.accessiOptions.emailOptions.from,\n to: email,\n subject: 'Codice di accesso',\n text: `Il tuo codice di accesso e: ${code}\\n\\nScade entro ${validityMinutes} minuti e puo essere usato una sola volta. Se non hai richiesto l accesso, ignora questa email.`,\n });\n }\n\n /**\n * Creates a short-lived, one-use reset token and sends it by email. Invalid, missing, blocked or deleted users\n * return without error to prevent account enumeration. On delivery failure the stored reset nonce is cleared.\n */\n public async sendPasswordResetEmail(email: string, htmlMail?: string): Promise<void> {\n // Fuori dal try: deve propagare ACCESSI_EMAIL_NOT_CONFIGURED, non essere mascherato dall'errore generico.\n assertEmailConfigured(this.accessiOptions);\n let codiceUtente: number | null = null;\n let resetToken: string | null = null;\n let nonce: 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: Record<string, unknown>) => ({\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 nonce = uuidv4();\n const secret = getAccessiJwtSecret(this.accessiOptions, 'reset');\n resetToken = createPasswordResetToken(user.codiceUtente, nonce, secret);\n\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = ? WHERE CODUTE = ? ',\n [nonce, codiceUtente],\n false,\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 && nonce) {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'UPDATE UTENTI SET KEYREG = NULL WHERE CODUTE = ? AND KEYREG = ?',\n [codiceUtente, nonce],\n false,\n ).catch(() => undefined);\n }\n this.logger.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"]}
|
|
@@ -9,9 +9,10 @@ import { FiltriService } from '../FiltriService/FiltriService';
|
|
|
9
9
|
import { PermissionService } from '../PermissionService/PermissionService';
|
|
10
10
|
export declare class UserService {
|
|
11
11
|
private readonly accessiOptions;
|
|
12
|
+
private readonly emailService;
|
|
12
13
|
private readonly permissionService;
|
|
13
14
|
private readonly filtriService;
|
|
14
|
-
constructor(accessiOptions: AccessiOptions,
|
|
15
|
+
constructor(accessiOptions: AccessiOptions, emailService: EmailService, permissionService: PermissionService, filtriService: FiltriService);
|
|
15
16
|
private validateApplicationFields;
|
|
16
17
|
private normalizeDatabaseBoolean;
|
|
17
18
|
private normalizeUserFlags;
|
|
@@ -72,4 +73,16 @@ export declare class UserService {
|
|
|
72
73
|
/** Cambia esplicitamente lo stato di registrazione; usare questa API per blocco, conferma o eliminazione logica. */
|
|
73
74
|
setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione): Promise<void>;
|
|
74
75
|
setGdpr(codiceUtente: number): Promise<string>;
|
|
76
|
+
/**
|
|
77
|
+
* Forza l'invio dell'email di reset password per un utente. Operazione amministrativa.
|
|
78
|
+
* Richiede un servizio email configurato: altrimenti solleva ACCESSI_EMAIL_NOT_CONFIGURED.
|
|
79
|
+
*/
|
|
80
|
+
forcePasswordReset(codiceUtente: number): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Forza l'invio dell'email di reset a tutti gli utenti la cui password non e ancora nel formato
|
|
83
|
+
* moderno (`scrypt$...`), cioe' legacy grezza o `scrypt-legacy` non piu verificabile. Utile quando
|
|
84
|
+
* la `encryptionKey` storica e perduta. Richiede email configurata. Ritorna quanti utenti hanno
|
|
85
|
+
* ricevuto l'email.
|
|
86
|
+
*/
|
|
87
|
+
forcePasswordResetForLegacyPasswords(): Promise<number>;
|
|
75
88
|
}
|
|
@@ -40,12 +40,14 @@ const Orm_1 = require("../../../Orm");
|
|
|
40
40
|
const Utilities_1 = require("../../../Utilities");
|
|
41
41
|
const FiltriUtente_1 = require("../../Dtos/FiltriUtente");
|
|
42
42
|
const StatoRegistrazione_1 = require("../../Dtos/StatoRegistrazione");
|
|
43
|
+
const emailConfiguration_1 = require("../../security/emailConfiguration");
|
|
43
44
|
const EmailService_1 = require("../EmailService/EmailService");
|
|
44
45
|
const FiltriService_1 = require("../FiltriService/FiltriService");
|
|
45
46
|
const PermissionService_1 = require("../PermissionService/PermissionService");
|
|
46
47
|
let UserService = class UserService {
|
|
47
|
-
constructor(accessiOptions,
|
|
48
|
+
constructor(accessiOptions, emailService, permissionService, filtriService) {
|
|
48
49
|
this.accessiOptions = accessiOptions;
|
|
50
|
+
this.emailService = emailService;
|
|
49
51
|
this.permissionService = permissionService;
|
|
50
52
|
this.filtriService = filtriService;
|
|
51
53
|
}
|
|
@@ -666,6 +668,47 @@ let UserService = class UserService {
|
|
|
666
668
|
}
|
|
667
669
|
});
|
|
668
670
|
}
|
|
671
|
+
/**
|
|
672
|
+
* Forza l'invio dell'email di reset password per un utente. Operazione amministrativa.
|
|
673
|
+
* Richiede un servizio email configurato: altrimenti solleva ACCESSI_EMAIL_NOT_CONFIGURED.
|
|
674
|
+
*/
|
|
675
|
+
forcePasswordReset(codiceUtente) {
|
|
676
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
677
|
+
var _a, _b;
|
|
678
|
+
(0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
|
|
679
|
+
const rows = yield this.getUsers({ codiceUtente });
|
|
680
|
+
const email = (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.utente) === null || _b === void 0 ? void 0 : _b.email;
|
|
681
|
+
if (typeof email !== 'string' || email.trim() === '') {
|
|
682
|
+
throw new common_1.NotFoundException(`Nessun utente con email per il codice ${codiceUtente}.`);
|
|
683
|
+
}
|
|
684
|
+
yield this.emailService.sendPasswordResetEmail(email);
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Forza l'invio dell'email di reset a tutti gli utenti la cui password non e ancora nel formato
|
|
689
|
+
* moderno (`scrypt$...`), cioe' legacy grezza o `scrypt-legacy` non piu verificabile. Utile quando
|
|
690
|
+
* la `encryptionKey` storica e perduta. Richiede email configurata. Ritorna quanti utenti hanno
|
|
691
|
+
* ricevuto l'email.
|
|
692
|
+
*/
|
|
693
|
+
forcePasswordResetForLegacyPasswords() {
|
|
694
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
695
|
+
(0, emailConfiguration_1.assertEmailConfigured)(this.accessiOptions);
|
|
696
|
+
const rows = yield Orm_1.Orm.query(this.accessiOptions.databaseOptions, `SELECT U.CODUTE AS codice_utente, U.USRNAME AS email
|
|
697
|
+
FROM UTENTI U
|
|
698
|
+
JOIN UTENTI_PWD P ON P.CODUTE = U.CODUTE
|
|
699
|
+
WHERE P.PWD IS NOT NULL AND P.PWD NOT STARTING WITH 'scrypt$'`, [], false);
|
|
700
|
+
let sent = 0;
|
|
701
|
+
for (const row of rows) {
|
|
702
|
+
const raw = Utilities_1.RestUtilities.convertKeysToCamelCase(row);
|
|
703
|
+
const email = typeof raw.email === 'string' ? raw.email.trim() : '';
|
|
704
|
+
if (email === '')
|
|
705
|
+
continue;
|
|
706
|
+
yield this.emailService.sendPasswordResetEmail(email);
|
|
707
|
+
sent += 1;
|
|
708
|
+
}
|
|
709
|
+
return sent;
|
|
710
|
+
});
|
|
711
|
+
}
|
|
669
712
|
};
|
|
670
713
|
exports.UserService = UserService;
|
|
671
714
|
exports.UserService = UserService = __decorate([
|