feat(user/dto): añadida validación creando PasswordChangeDto para contraseña…

feat(user/dto): añadida validación creando PasswordChangeDto para contraseña segura en changePassword de UpdateUserController
parent a6ca56e4
...@@ -3,6 +3,7 @@ package com.example.apprecetas.user.infrastructure.controller; ...@@ -3,6 +3,7 @@ package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.exception.UnprocessableEntityException; import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.user.application.UpdateUserUseCase; import com.example.apprecetas.user.application.UpdateUserUseCase;
import com.example.apprecetas.user.domain.entity.Role; import com.example.apprecetas.user.domain.entity.Role;
import com.example.apprecetas.user.infrastructure.controller.dto.input.PasswordChangeDto;
import com.example.apprecetas.user.infrastructure.controller.dto.input.UserInputDto; import com.example.apprecetas.user.infrastructure.controller.dto.input.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.input.UserUpdateInputDto; import com.example.apprecetas.user.infrastructure.controller.dto.input.UserUpdateInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.output.UserOutputDto; import com.example.apprecetas.user.infrastructure.controller.dto.output.UserOutputDto;
...@@ -10,6 +11,7 @@ import com.example.apprecetas.user.infrastructure.mapper.UserMapper; ...@@ -10,6 +11,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.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
...@@ -40,9 +42,17 @@ public class UpdateUserController { ...@@ -40,9 +42,17 @@ public class UpdateUserController {
} }
@PatchMapping("/password") @PatchMapping("/password")
public ResponseEntity<String> changePassword(@RequestParam String oldPassword, @RequestParam String newPassword) { public ResponseEntity<String> changePassword(@RequestBody @Valid PasswordChangeDto passwordChangeDto,
BindingResult result) {
if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.joining("; "));
throw new UnprocessableEntityException(errorMsg);
}
String userId = SecurityContextHolder.getContext().getAuthentication().getName(); String userId = SecurityContextHolder.getContext().getAuthentication().getName();
boolean response = service.changePassword(userId, oldPassword, newPassword); boolean response = service.changePassword(userId, passwordChangeDto.getOldPassword(), passwordChangeDto.getNewPassword());
if (response) if (response)
return ResponseEntity.ok().body("Contraseña modificada correctamente"); return ResponseEntity.ok().body("Contraseña modificada correctamente");
......
package com.example.apprecetas.user.infrastructure.controller.dto.input;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PasswordChangeDto {
@NotBlank(message = "La contraseña no debe estar vacía")
private String oldPassword;
@NotBlank(message = "La contraseña no debe estar vacía")
@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 newPassword;
}
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