PasswordController.java
package com.wilzwert.myjobs.infrastructure.api.rest.controller;
import com.wilzwert.myjobs.core.domain.model.user.command.ChangePasswordCommand;
import com.wilzwert.myjobs.core.domain.model.user.command.CreatePasswordCommand;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.ChangePasswordUseCase;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.CreateNewPasswordUseCase;
import com.wilzwert.myjobs.core.domain.model.user.ports.driving.ResetPasswordUseCase;
import com.wilzwert.myjobs.infrastructure.api.rest.dto.*;
import com.wilzwert.myjobs.infrastructure.security.service.UserDetailsImpl;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
/**
* @author Wilhelm Zwertvaegher
*/
@RestController
@Slf4j
@RequestMapping("/api/user")
public class PasswordController {
private final ResetPasswordUseCase resetPasswordUseCase;
private final CreateNewPasswordUseCase createNewPasswordUseCase;
private final ChangePasswordUseCase changePasswordUseCase;
public PasswordController(ResetPasswordUseCase resetPasswordUseCase, CreateNewPasswordUseCase createNewPasswordUseCase, ChangePasswordUseCase changePasswordUseCase) {
this.resetPasswordUseCase = resetPasswordUseCase;
this.createNewPasswordUseCase = createNewPasswordUseCase;
this.changePasswordUseCase = changePasswordUseCase;
}
@PostMapping("/password/reset")
public void resetPassword(@RequestBody @Valid ResetPasswordRequest resetPasswordRequest) {
resetPasswordUseCase.resetPassword(resetPasswordRequest.getEmail());
}
@PostMapping("/password")
public void newPassword(@RequestBody @Valid NewPasswordRequest newPasswordRequest) {
createNewPasswordUseCase.createNewPassword(new CreatePasswordCommand(newPasswordRequest.getPassword(), newPasswordRequest.getToken()));
}
/**
* Changes the current user's password
* @param changePasswordRequest the request for password change
* @param authentication the current authentication
*/
@PutMapping("/me/password")
@ResponseStatus(HttpStatus.OK)
public void changePassword(@RequestBody @Valid ChangePasswordRequest changePasswordRequest, Authentication authentication) {
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
changePasswordUseCase.changePassword(new ChangePasswordCommand(changePasswordRequest.getPassword(), changePasswordRequest.getOldPassword(), userDetails.getId()));
}
}