feat(user/dto): añadida validación para contraseña segura en UserInputDto

parent d23c882f
...@@ -13,6 +13,7 @@ import com.example.apprecetas.user.infrastructure.mapper.UserMapper; ...@@ -13,6 +13,7 @@ import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
...@@ -73,7 +74,7 @@ public class AuthController { ...@@ -73,7 +74,7 @@ public class AuthController {
BindingResult result) { BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream() String errorMsg = result.getFieldErrors().stream()
.map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()) .map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining("; ")); .collect(Collectors.joining("; "));
throw new UnprocessableEntityException(errorMsg); throw new UnprocessableEntityException(errorMsg);
} }
......
...@@ -2,6 +2,7 @@ package com.example.apprecetas.user.infrastructure.controller.dto.input; ...@@ -2,6 +2,7 @@ package com.example.apprecetas.user.infrastructure.controller.dto.input;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -12,17 +13,22 @@ import lombok.NoArgsConstructor; ...@@ -12,17 +13,22 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class UserInputDto { public class UserInputDto {
@NotBlank(message = "El nombre no debe estar vacío")
@Size(min = 2, max = 20, message = "El nombre debe tener entre 2 y 20 caracteres") @Size(min = 2, max = 20, message = "El nombre debe tener entre 2 y 20 caracteres")
private String name; private String name;
@Size(min = 6, max = 20, message = "Los apellidos deben tener entre 6 y 20 caracteres") @NotBlank(message = "El campo apellidos no debe estar vacío")
@Size(min = 6, max = 30, message = "Los apellidos deben tener entre 6 y 20 caracteres")
private String surname; private String surname;
@Email(message = "El email debe tener formato de correo electrónico") @Email(message = "El email debe tener formato de correo electrónico")
@NotBlank(message = "El email no debe estar vacío") @NotBlank(message = "El email no debe estar vacío")
private String email; private String email;
@NotBlank(message = "La contraseña no debe estar vacía")
@Size(min = 8, message = "La contraseña debe tener al menos 8 caracteres") @Size(min = 8, message = "La contraseña debe tener al menos 8 caracteres")
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$.%`&+=!*:;,?-])\\S+$",
message = "La contraseña debe contener al menos una letra minúscula, una mayúscula, un número y un carácter especial (sin espacios)")
private String password; private String password;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment