cleanup work

This commit is contained in:
eugenp 2015-02-07 20:45:23 +02:00
parent e667993c18
commit b4c54fdb71
3 changed files with 87 additions and 71 deletions

View File

@ -19,7 +19,7 @@ public interface IUserService {
VerificationToken getVerificationToken(String VerificationToken); VerificationToken getVerificationToken(String VerificationToken);
VerificationToken updateVerificationToken(String token); VerificationToken generateNewVerificationToken(String token);
void createPasswordResetTokenForUser(User user, String token); void createPasswordResetTokenForUser(User user, String token);

View File

@ -38,7 +38,7 @@ public class UserService implements IUserService {
// API // API
@Override @Override
public User registerNewUserAccount(UserDto accountDto) throws EmailExistsException { public User registerNewUserAccount(final UserDto accountDto) throws EmailExistsException {
if (emailExist(accountDto.getEmail())) { if (emailExist(accountDto.getEmail())) {
throw new EmailExistsException("There is an account with that email adress: " + accountDto.getEmail()); throw new EmailExistsException("There is an account with that email adress: " + accountDto.getEmail());
} }
@ -54,67 +54,74 @@ public class UserService implements IUserService {
} }
@Override @Override
public User getUser(String verificationToken) { public User getUser(final String verificationToken) {
User user = tokenRepository.findByToken(verificationToken).getUser(); final User user = tokenRepository.findByToken(verificationToken).getUser();
return user; return user;
} }
@Override @Override
public VerificationToken getVerificationToken(String VerificationToken) { public VerificationToken getVerificationToken(final String VerificationToken) {
return tokenRepository.findByToken(VerificationToken); return tokenRepository.findByToken(VerificationToken);
} }
@Override @Override
public void saveRegisteredUser(User user) { public void saveRegisteredUser(final User user) {
repository.save(user); repository.save(user);
} }
@Override @Override
public void deleteUser(User user) { public void deleteUser(final User user) {
repository.delete(user); repository.delete(user);
} }
@Override @Override
public void createVerificationTokenForUser(User user, String token) { public void createVerificationTokenForUser(final User user, final String token) {
VerificationToken myToken = new VerificationToken(token, user); final VerificationToken myToken = new VerificationToken(token, user);
tokenRepository.save(myToken); tokenRepository.save(myToken);
} }
public VerificationToken updateVerificationToken(String verificationToken) { @Override
VerificationToken vToken = tokenRepository.findByToken(verificationToken); public VerificationToken generateNewVerificationToken(final String existingVerificationToken) {
VerificationToken vToken = tokenRepository.findByToken(existingVerificationToken);
vToken.updateToken(UUID.randomUUID().toString()); vToken.updateToken(UUID.randomUUID().toString());
vToken = tokenRepository.save(vToken); vToken = tokenRepository.save(vToken);
return vToken; return vToken;
} }
public void createPasswordResetTokenForUser(User user, String token) { @Override
PasswordResetToken myToken = new PasswordResetToken(token, user); public void createPasswordResetTokenForUser(final User user, final String token) {
final PasswordResetToken myToken = new PasswordResetToken(token, user);
passwordTokenRepository.save(myToken); passwordTokenRepository.save(myToken);
} }
public User findUserByEmail(String email) { @Override
public User findUserByEmail(final String email) {
return repository.findByEmail(email); return repository.findByEmail(email);
} }
public PasswordResetToken getPasswordResetToken(String token) { @Override
public PasswordResetToken getPasswordResetToken(final String token) {
return passwordTokenRepository.findByToken(token); return passwordTokenRepository.findByToken(token);
} }
public User getUserByPasswordResetToken(String token) { @Override
public User getUserByPasswordResetToken(final String token) {
return passwordTokenRepository.findByToken(token).getUser(); return passwordTokenRepository.findByToken(token).getUser();
} }
public User getUserByID(long id) { @Override
public User getUserByID(final long id) {
return repository.findOne(id); return repository.findOne(id);
} }
public void changeUserPassword(User user, String password) { @Override
public void changeUserPassword(final User user, final String password) {
user.setPassword(passwordEncoder.encode(password)); user.setPassword(passwordEncoder.encode(password));
repository.save(user); repository.save(user);
} }
private boolean emailExist(String email) { private boolean emailExist(final String email) {
User user = repository.findByEmail(email); final User user = repository.findByEmail(email);
if (user != null) { if (user != null) {
return true; return true;
} }

View File

@ -44,7 +44,7 @@ public class RegistrationController {
private final Logger LOGGER = LoggerFactory.getLogger(getClass()); private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Autowired @Autowired
private IUserService service; private IUserService userService;
@Autowired @Autowired
private MessageSource messages; private MessageSource messages;
@ -62,28 +62,30 @@ public class RegistrationController {
} }
// API
@RequestMapping(value = "/user/registration", method = RequestMethod.GET) @RequestMapping(value = "/user/registration", method = RequestMethod.GET)
public String showRegistrationForm(WebRequest request, Model model) { public String showRegistrationForm(final WebRequest request, final Model model) {
LOGGER.debug("Rendering registration page."); LOGGER.debug("Rendering registration page.");
UserDto accountDto = new UserDto(); final UserDto accountDto = new UserDto();
model.addAttribute("user", accountDto); model.addAttribute("user", accountDto);
return "registration"; return "registration";
} }
@RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET) @RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET)
public String confirmRegistration(WebRequest request, Model model, @RequestParam("token") String token) { public String confirmRegistration(final WebRequest request, final Model model, @RequestParam("token") final String token) {
Locale locale = request.getLocale(); final Locale locale = request.getLocale();
VerificationToken verificationToken = service.getVerificationToken(token); final VerificationToken verificationToken = userService.getVerificationToken(token);
if (verificationToken == null) { if (verificationToken == null) {
String message = messages.getMessage("auth.message.invalidToken", null, locale); final String message = messages.getMessage("auth.message.invalidToken", null, locale);
model.addAttribute("message", message); model.addAttribute("message", message);
return "redirect:/badUser.html?lang=" + locale.getLanguage(); return "redirect:/badUser.html?lang=" + locale.getLanguage();
} }
User user = verificationToken.getUser(); final User user = verificationToken.getUser();
Calendar cal = Calendar.getInstance(); final Calendar cal = Calendar.getInstance();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); final DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
System.out.println(df.format(verificationToken.getExpiryDate())); System.out.println(df.format(verificationToken.getExpiryDate()));
System.out.println(df.format(cal.getTime())); System.out.println(df.format(cal.getTime()));
@ -95,46 +97,40 @@ public class RegistrationController {
} }
user.setEnabled(true); user.setEnabled(true);
service.saveRegisteredUser(user); userService.saveRegisteredUser(user);
return "redirect:/login.html?lang=" + locale.getLanguage(); return "redirect:/login.html?lang=" + locale.getLanguage();
} }
@RequestMapping(value = "/user/registration", method = RequestMethod.POST) @RequestMapping(value = "/user/registration", method = RequestMethod.POST)
public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid UserDto accountDto, BindingResult result, WebRequest request, Errors errors) { public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid final UserDto accountDto, final BindingResult result, final WebRequest request, final Errors errors) {
LOGGER.debug("Registering user account with information: {}", accountDto); LOGGER.debug("Registering user account with information: {}", accountDto);
if (result.hasErrors()) { if (result.hasErrors()) {
return new ModelAndView("registration", "user", accountDto); return new ModelAndView("registration", "user", accountDto);
} }
User registered = createUserAccount(accountDto); final User registered = createUserAccount(accountDto);
if (registered == null) { if (registered == null) {
result.rejectValue("email", "message.regError"); result.rejectValue("email", "message.regError");
} }
try { try {
String appUrl = request.getContextPath(); final String appUrl = request.getContextPath();
eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl));
} catch (Exception me) { } catch (final Exception me) {
return new ModelAndView("emailError", "user", accountDto); return new ModelAndView("emailError", "user", accountDto);
} }
return new ModelAndView("successRegister", "user", accountDto); return new ModelAndView("successRegister", "user", accountDto);
} }
@RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET) @RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET)
public String resendRegistrationToken(WebRequest request, Model model, @RequestParam("token") String token) { public String resendRegistrationToken(final WebRequest request, final Model model, @RequestParam("token") final String existingToken) {
Locale locale = request.getLocale(); final Locale locale = request.getLocale();
VerificationToken newToken = service.updateVerificationToken(token); final VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
User user = service.getUser(newToken.getToken()); final User user = userService.getUser(newToken.getToken());
try { try {
String confirmationUrl = request.getContextPath() + "/regitrationConfirm.html?token=" + newToken.getToken(); final SimpleMailMessage email = constructResetVerificationTokenEmail(request.getContextPath(), request.getLocale(), newToken, user);
String message = messages.getMessage("message.resendToken", null, request.getLocale());
SimpleMailMessage email = new SimpleMailMessage();
email.setTo(user.getEmail());
email.setSubject("Resend Registration Token");
email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl);
System.out.println(email.getText());
mailSender.send(email); mailSender.send(email);
System.out.println(email.getText()); } catch (final Exception e) {
} catch (Exception e) { // MailException
return "redirect:/emailError.html?lang=" + locale.getLanguage(); return "redirect:/emailError.html?lang=" + locale.getLanguage();
} }
model.addAttribute("message", messages.getMessage("message.resendToken", null, locale)); model.addAttribute("message", messages.getMessage("message.resendToken", null, locale));
@ -142,27 +138,26 @@ public class RegistrationController {
} }
@RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST) @RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST)
public String resetPassword(WebRequest request, Model model, @RequestParam("email") String userEmail) { public String resetPassword(final WebRequest request, final Model model, @RequestParam("email") final String userEmail) {
final User user = userService.findUserByEmail(userEmail);
User user = service.findUserByEmail(userEmail);
if (user == null) { if (user == null) {
model.addAttribute("message", messages.getMessage("auth.message.expired", null, request.getLocale())); model.addAttribute("message", messages.getMessage("auth.message.expired", null, request.getLocale()));
return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
} }
String token = UUID.randomUUID().toString(); final String token = UUID.randomUUID().toString();
service.createPasswordResetTokenForUser(user, token); userService.createPasswordResetTokenForUser(user, token);
try { try {
String url = request.getContextPath() + "/user/changePassword?id=" + user.getId() + "&token=" + token; final String url = request.getContextPath() + "/user/changePassword?id=" + user.getId() + "&token=" + token;
String message = messages.getMessage("message.resetPassword", null, request.getLocale()); final String message = messages.getMessage("message.resetPassword", null, request.getLocale());
SimpleMailMessage email = new SimpleMailMessage(); final SimpleMailMessage email = new SimpleMailMessage();
email.setTo(user.getEmail()); email.setTo(user.getEmail());
email.setSubject("Reset Password"); email.setSubject("Reset Password");
email.setText(message + " \r\n" + "http://localhost:8080" + url); email.setText(message + " \r\n" + "http://localhost:8080" + url);
System.out.println(email.getText()); System.out.println(email.getText());
mailSender.send(email); mailSender.send(email);
System.out.println(email.getText()); System.out.println(email.getText());
} catch (Exception e) { } catch (final Exception e) {
return "redirect:/emailError.html?lang=" + request.getLocale().getLanguage(); return "redirect:/emailError.html?lang=" + request.getLocale().getLanguage();
} }
model.addAttribute("message", messages.getMessage("message.resetPassword", null, request.getLocale())); model.addAttribute("message", messages.getMessage("message.resetPassword", null, request.getLocale()));
@ -170,26 +165,26 @@ public class RegistrationController {
} }
@RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET)
public String changePassword(WebRequest request, Model model, @RequestParam("id") long id, @RequestParam("token") String token) { public String changePassword(final WebRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) {
Locale locale = request.getLocale(); final Locale locale = request.getLocale();
PasswordResetToken passToken = service.getPasswordResetToken(token); final PasswordResetToken passToken = userService.getPasswordResetToken(token);
User user = passToken.getUser(); final User user = passToken.getUser();
if (passToken == null || user.getId() != id) { if (passToken == null || user.getId() != id) {
String message = messages.getMessage("auth.message.invalidToken", null, locale); final String message = messages.getMessage("auth.message.invalidToken", null, locale);
model.addAttribute("message", message); model.addAttribute("message", message);
System.out.println(id); System.out.println(id);
System.out.println(passToken); System.out.println(passToken);
return "redirect:/login.html?lang=" + locale.getLanguage(); return "redirect:/login.html?lang=" + locale.getLanguage();
} }
Calendar cal = Calendar.getInstance(); final Calendar cal = Calendar.getInstance();
if ((passToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { if ((passToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) {
model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale));
return "redirect:/login.html?lang=" + locale.getLanguage(); return "redirect:/login.html?lang=" + locale.getLanguage();
} }
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, userDetailsService.loadUserByUsername(user.getEmail()).getAuthorities()); final Authentication auth = new UsernamePasswordAuthenticationToken(user, null, userDetailsService.loadUserByUsername(user.getEmail()).getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth); SecurityContextHolder.getContext().setAuthentication(auth);
return "redirect:/updatePassword.html?lang=" + locale.getLanguage(); return "redirect:/updatePassword.html?lang=" + locale.getLanguage();
@ -197,22 +192,36 @@ public class RegistrationController {
@RequestMapping(value = "/user/savePassword", method = RequestMethod.POST) @RequestMapping(value = "/user/savePassword", method = RequestMethod.POST)
@PreAuthorize("hasRole('READ_PRIVILEGE')") @PreAuthorize("hasRole('READ_PRIVILEGE')")
public String savePassword(WebRequest request, Model model, @RequestParam("password") String password) { public String savePassword(final WebRequest request, final Model model, @RequestParam("password") final String password) {
Locale locale = request.getLocale(); final Locale locale = request.getLocale();
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
service.changeUserPassword(user, password); userService.changeUserPassword(user, password);
return "redirect:/login.html?lang=" + locale; return "redirect:/login.html?lang=" + locale;
} }
private User createUserAccount(UserDto accountDto) { // NON-API
private final SimpleMailMessage constructResetVerificationTokenEmail(final String contextPath, final Locale locale, final VerificationToken newToken, final User user) {
final String confirmationUrl = contextPath + "/regitrationConfirm.html?token=" + newToken.getToken();
final String message = messages.getMessage("message.resendToken", null, locale);
final SimpleMailMessage email = new SimpleMailMessage();
email.setSubject("Resend Registration Token");
email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl);
email.setTo(user.getEmail());
return email;
}
private User createUserAccount(final UserDto accountDto) {
User registered = null; User registered = null;
try { try {
registered = service.registerNewUserAccount(accountDto); registered = userService.registerNewUserAccount(accountDto);
} catch (EmailExistsException e) { } catch (final EmailExistsException e) {
return null; return null;
} }
return registered; return registered;
} }
} }