mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 09:36:44 +00:00
fix(core): Use class-validator with XSS check for survey answers (#10490)
Co-authored-by: Tomi Turtiainen <10324676+tomi@users.noreply.github.com>
This commit is contained in:
@@ -6,7 +6,7 @@ import { randomBytes } from 'crypto';
|
||||
import { AuthService } from '@/auth/auth.service';
|
||||
import { Delete, Get, Patch, Post, RestController } from '@/decorators';
|
||||
import { PasswordUtility } from '@/services/password.utility';
|
||||
import { validateEntity, validateRecordNoXss } from '@/GenericHelpers';
|
||||
import { validateEntity } from '@/GenericHelpers';
|
||||
import type { User } from '@db/entities/User';
|
||||
import {
|
||||
AuthenticatedRequest,
|
||||
@@ -25,6 +25,7 @@ import { isApiEnabled } from '@/PublicApi';
|
||||
import { EventService } from '@/events/event.service';
|
||||
import { MfaService } from '@/Mfa/mfa.service';
|
||||
import { InvalidMfaCodeError } from '@/errors/response-errors/invalid-mfa-code.error';
|
||||
import { PersonalizationSurveyAnswersV4 } from './survey-answers.dto';
|
||||
|
||||
export const API_KEY_PREFIX = 'n8n_api_';
|
||||
|
||||
@@ -195,7 +196,7 @@ export class MeController {
|
||||
|
||||
if (!personalizationAnswers) {
|
||||
this.logger.debug(
|
||||
'Request to store user personalization survey failed because of empty payload',
|
||||
'Request to store user personalization survey failed because of undefined payload',
|
||||
{
|
||||
userId: req.user.id,
|
||||
},
|
||||
@@ -203,12 +204,18 @@ export class MeController {
|
||||
throw new BadRequestError('Personalization answers are mandatory');
|
||||
}
|
||||
|
||||
await validateRecordNoXss(personalizationAnswers);
|
||||
const validatedAnswers = plainToInstance(
|
||||
PersonalizationSurveyAnswersV4,
|
||||
personalizationAnswers,
|
||||
{ excludeExtraneousValues: true },
|
||||
);
|
||||
|
||||
await validateEntity(validatedAnswers);
|
||||
|
||||
await this.userRepository.save(
|
||||
{
|
||||
id: req.user.id,
|
||||
personalizationAnswers,
|
||||
personalizationAnswers: validatedAnswers,
|
||||
},
|
||||
{ transaction: false },
|
||||
);
|
||||
@@ -217,7 +224,7 @@ export class MeController {
|
||||
|
||||
this.eventService.emit('user-submitted-personalization-survey', {
|
||||
userId: req.user.id,
|
||||
answers: personalizationAnswers,
|
||||
answers: validatedAnswers,
|
||||
});
|
||||
|
||||
return { success: true };
|
||||
|
||||
Reference in New Issue
Block a user