modify reset password

This commit is contained in:
DOHA 2015-02-12 21:58:41 +02:00
parent 899a319e0e
commit 54bf8b0e1c
7 changed files with 55 additions and 19 deletions

View File

@ -1,6 +1,5 @@
package org.baeldung.persistence.model; package org.baeldung.persistence.model;
import java.sql.Timestamp;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@ -74,7 +73,7 @@ public class PasswordResetToken {
private Date calculateExpiryDate(int expiryTimeInMinutes) { private Date calculateExpiryDate(int expiryTimeInMinutes) {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTime(new Timestamp(cal.getTime().getTime())); cal.setTimeInMillis(new Date().getTime());
cal.add(Calendar.MINUTE, expiryTimeInMinutes); cal.add(Calendar.MINUTE, expiryTimeInMinutes);
return new Date(cal.getTime().getTime()); return new Date(cal.getTime().getTime());
} }

View File

@ -14,7 +14,7 @@ import javax.persistence.OneToOne;
@Entity @Entity
public class VerificationToken { public class VerificationToken {
private static final int EXPIRATION = 2;// 60 * 24; private static final int EXPIRATION = 60 * 24;
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)

View File

@ -19,7 +19,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.http.MediaType; import org.springframework.context.NoSuchMessageException;
import org.springframework.mail.MailAuthenticationException; import org.springframework.mail.MailAuthenticationException;
import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSender;
@ -39,6 +39,9 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@Controller @Controller
public class RegistrationController { public class RegistrationController {
private final Logger LOGGER = LoggerFactory.getLogger(getClass()); private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@ -140,15 +143,14 @@ public class RegistrationController {
return "redirect:/login.html?lang=" + locale.getLanguage(); return "redirect:/login.html?lang=" + locale.getLanguage();
} }
@RequestMapping(value = "/user/resendRegistrationToken2", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/user/resendRegistrationToken2", method = RequestMethod.GET)
public @ResponseBody String resendRegistrationToken2(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) { public @ResponseBody String resendRegistrationToken2(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) throws JsonProcessingException, NoSuchMessageException {
final VerificationToken newToken = userService.generateNewVerificationToken(existingToken); final VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
final User user = userService.getUser(newToken.getToken()); final User user = userService.getUser(newToken.getToken());
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
System.out.println(email.getText());
mailSender.send(email); mailSender.send(email);
return messages.getMessage("message.resendToken", null, request.getLocale()); return new ObjectMapper().writeValueAsString(messages.getMessage("message.resendToken", null, request.getLocale()));
} }
@RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST) @RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST)
@ -177,6 +179,22 @@ public class RegistrationController {
return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
} }
@RequestMapping(value = "/user/resetPassword2", method = RequestMethod.POST)
public @ResponseBody String resetPassword2(final HttpServletRequest request, final Model model, @RequestParam("email") final String userEmail) throws JsonProcessingException, NoSuchMessageException {
final User user = userService.findUserByEmail(userEmail);
if (user == null) {
return new ObjectMapper().writeValueAsString(messages.getMessage("message.userNotFound", null, request.getLocale()));
}
final String token = UUID.randomUUID().toString();
userService.createPasswordResetTokenForUser(user, token);
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
mailSender.send(email);
return new ObjectMapper().writeValueAsString(messages.getMessage("message.resetPassword", null, request.getLocale()));
}
@RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET)
public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) { public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) {
final Locale locale = request.getLocale(); final Locale locale = request.getLocale();

View File

@ -23,13 +23,13 @@ public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionH
@ExceptionHandler({ MailAuthenticationException.class }) @ExceptionHandler({ MailAuthenticationException.class })
public @ResponseBody String handleMail(final RuntimeException ex, final WebRequest request) throws JsonProcessingException { public @ResponseBody String handleMail(final RuntimeException ex, final WebRequest request) throws JsonProcessingException {
logger.error("500 Status Code", ex); logger.error("500 Status Code", ex);
return new ObjectMapper().writeValueAsString(ex.getClass().toString()); return new ObjectMapper().writeValueAsString("MailError");
} }
@ExceptionHandler({ NullPointerException.class, IllegalArgumentException.class, IllegalStateException.class }) @ExceptionHandler({ NullPointerException.class, IllegalArgumentException.class, IllegalStateException.class })
public @ResponseBody String handleInternal(final RuntimeException ex, final WebRequest request) throws JsonProcessingException { public @ResponseBody String handleInternal(final RuntimeException ex, final WebRequest request) throws JsonProcessingException {
logger.error("500 Status Code", ex); logger.error("500 Status Code", ex);
return new ObjectMapper().writeValueAsString(ex.getClass().toString()); return new ObjectMapper().writeValueAsString("InternalError");
} }
} }

View File

@ -32,15 +32,15 @@ code="label.form.loginSignUp"></spring:message></a>
<script type="text/javascript"> <script type="text/javascript">
function resendToken(){ function resendToken(){
$.get("<c:url value="/user/resendRegistrationToken2"><c:param name="token" value="${param.token}"/></c:url>", function(data){ $.get("<c:url value="/user/resendRegistrationToken2"><c:param name="token" value="${param.token}"/></c:url>", function(data){
if(data.indexOf("MailAuthenticationException") > -1) if(data.indexOf("MailError") > -1)
{ {
window.location.href = "<c:url value="/emailError.html"></c:url>"; window.location.href = "<c:url value="/emailError.html"></c:url>";
} }
else if(data.indexOf("Exception") > -1){ else if(data.indexOf("InternalError") > -1){
window.location.href = "<c:url value="/login"><c:param name="message" value="Error"/></c:url>"; window.location.href = "<c:url value="/login.html"><c:param name="message" value="Error Occurred"/></c:url>";
} }
else{ else{
window.location.href = "<c:url value="/login"></c:url>" + "message=" + data; window.location.href = "<c:url value="/login.html"></c:url>" + "?message=" + data;
} }
}); });
} }

View File

@ -18,22 +18,41 @@
<h1> <h1>
<spring:message code="message.resetPassword"></spring:message> <spring:message code="message.resetPassword"></spring:message>
</h1> </h1>
<form:form action="user/resetPassword" method="POST" enctype="utf8"> <div>
<br> <br>
<tr> <tr>
<td><label><spring:message code="label.user.email"></spring:message></label></td> <td><label><spring:message code="label.user.email"></spring:message></label></td>
<td><input name="email" type="email" value="" /></td> <td><input id="email" name="email" type="email" value="" /></td>
</tr> </tr>
<button type="submit"> <button type="submit" onclick="resetPass()">
<spring:message code="message.resetPassword"></spring:message> <spring:message code="message.resetPassword"></spring:message>
</button> </button>
</form:form> </div>
<br> <a href="<c:url value="registration.html" />"><spring:message <br> <a href="<c:url value="registration.html" />"><spring:message
code="label.form.loginSignUp"></spring:message></a> code="label.form.loginSignUp"></spring:message></a>
</div> </div>
</div> </div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
function resetPass(){
var email = $("#email").val();
$.post("<c:url value="/user/resetPassword2"></c:url>",{email: email} ,function(data){
if(data.indexOf("MailError") > -1)
{
window.location.href = "<c:url value="/emailError.html"></c:url>";
}
else if(data.indexOf("InternalError") > -1){
window.location.href = "<c:url value="/login.html"><c:param name="message" value="Error Occurred"/></c:url>";
}
else{
window.location.href = "<c:url value="/login.html"></c:url>" + "?message=" + data;
}
});
}
</script>
</body> </body>
</html> </html>

View File

@ -57,7 +57,7 @@
</head> </head>
<body> <body>
<c:if test="${param.message != null}"> <c:if test="${param.message != null}">
<div class="alert alert-error"> <div class="alert alert-info">
${param.message} ${param.message}
</div> </div>
</c:if> </c:if>