package edu.asu.spring.quadriga.web.manageusers; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import edu.asu.spring.quadriga.exceptions.QuadrigaNotificationException; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.exceptions.UsernameExistsException; import edu.asu.spring.quadriga.service.IUserManager; import edu.asu.spring.quadriga.web.manageusers.beans.AccountRequest; import edu.asu.spring.quadriga.web.manageusers.beans.NewUserAccountValidator; @Controller public class RegisterUserController { @Autowired private IUserManager usermanager; @InitBinder("accountRequest") protected void initBinder(WebDataBinder binder) { binder.setValidator(new NewUserAccountValidator()); } @RequestMapping(value = "register") public String initRegisterPage(ModelMap model) { model.addAttribute("request", new AccountRequest()); return "register"; } @RequestMapping(value = "register-user") public String registerUser(ModelMap model, @Valid @ModelAttribute AccountRequest request, BindingResult result, RedirectAttributes redirectAttrs) throws QuadrigaStorageException, QuadrigaNotificationException { if (result.hasErrors()) { model.addAttribute("request", request); model.addAttribute("errors", result); return "register"; } boolean success = false; String username = request.getUsername(); try { request.setUsername(username.toLowerCase()); success = usermanager.addNewUser(request); } catch (UsernameExistsException e) { model.addAttribute("errormsg_username_in_use", "Username already in use."); request.setUsername(username); request.setPassword(""); request.setRepeatedPassword(""); model.addAttribute("request", request); return "register"; } if (!success) { model.addAttribute("errormsg_failure", "Sorry, user could not be added."); request.setPassword(""); request.setRepeatedPassword(""); model.addAttribute("request", request); return "register"; } redirectAttrs.addFlashAttribute("successmsg", "Your account has been created! An administrator will review the account and approve it. You will get an email once your account has been reviewed."); return "redirect:/login"; } }