Skip to content
Snippets Groups Projects

add reset password feature

Merged Ju Yu Chou Fu requested to merge dev_chou into sprint_3
14 files
+ 538
6
Compare changes
  • Side-by-side
  • Inline
Files
14
@@ -4,15 +4,22 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import vt.CS5934.SwitchRoom.models.ResponseModel;
import vt.CS5934.SwitchRoom.models.UserModel;
import vt.CS5934.SwitchRoom.services.Token;
import vt.CS5934.SwitchRoom.services.UserService;
import vt.CS5934.SwitchRoom.utility.UsefulTools;
import javax.mail.MessagingException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.security.NoSuchAlgorithmException;
/**
@@ -150,4 +157,85 @@ public class UserController {
response = userService.getProfile(userId);
return response;
}
@PostMapping("/forgotPassword")
public ResponseModel processForgotPassword(
HttpServletRequest request,
@RequestBody String payload
) throws MessagingException, UnsupportedEncodingException, JsonProcessingException {
ResponseModel response = new ResponseModel();
boolean result = userService.updateResetPasswordToken(payload, request);
if (result) {
response.setStatus(HttpStatus.OK);
response.setMessage("We have sent a reset password link to your email. Please check.");
} else {
response.setMessage("Couldn't find an account matching the email you entered");
response.setStatus(HttpStatus.FORBIDDEN);
}
return response;
}
@GetMapping("/forgotPassword_verify")
public ResponseEntity<Void> showResetPasswordForm(
@Param(value = "token") String token,
HttpServletRequest request,
HttpServletResponse servletResponse
) {
UserModel existUser = userService.getByResetPasswordToken(token);
String baseURL = UsefulTools.getSiteURL(request);
// deployed
// if (existUser != null) {
// return ResponseEntity.status(HttpStatus.FOUND)
// .location(URI.create(baseURL + "/forgotPasswordForm"))
// .build();
// } else {
// return ResponseEntity.status(HttpStatus.FOUND)
// .location(URI.create(baseURL))
// .build();
// }
// development
if (existUser != null) {
Cookie theCookie = new Cookie("resetToken", token);
theCookie.setHttpOnly(false);
theCookie.setSecure(false);
theCookie.setPath("/");
theCookie.setMaxAge(60*60); // 1 hour
servletResponse.addCookie(theCookie);
return ResponseEntity.status(HttpStatus.FOUND)
.location(URI.create("http://localhost:8080/forgotPasswordForm"))
.build();
} else {
return ResponseEntity.status(HttpStatus.FOUND)
.location(URI.create("http://localhost:8080"))
.build();
}
}
@PostMapping("/forgotPasswordCreateNew")
public ResponseModel forgotPasswordCreateNew(
@CookieValue(value = "resetToken", required = false) String token,
@RequestBody String payload) throws JsonProcessingException, NoSuchAlgorithmException {
ResponseModel response = new ResponseModel();
if (token == null) {
response.setMessage("Login session expired or invalid");
response.setStatus(HttpStatus.FORBIDDEN);
return response;
}
boolean result = userService.forgotPasswordCreateNew(token, payload);
if (result) {
response.setMessage("Successfully reset your password");
response.setStatus(HttpStatus.OK);
} else {
response.setMessage("Couldn't find an account matching your login session");
response.setStatus(HttpStatus.FORBIDDEN);
}
return response;
}
}
Loading