NewUserController.java 2.04 KB
package fr.plil.sio.web.mvc;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

@Controller
public class NewUserController {

    @Resource
    private UserRepository userRepository;

    @Resource
    private UserService userService;

    @Resource
    private UserSession userSession;

    @Resource
    private UserFormValidator userFormValidator;

    @RequestMapping(value = {"/newUser"}, method = RequestMethod.GET)
    public ModelAndView getNewUserForm() {
        return new ModelAndView("newUser", "user", new User());
    }

    @RequestMapping(value = {"/newUser"}, method = RequestMethod.POST)
    public String postNewUser(@ModelAttribute("userForm") UserForm user,
                              BindingResult result) {

        if (!userSession.getUsername().equals("admin")) {
            result.rejectValue("username", "new.user.only.admin");
        }

        userFormValidator.validate(user, result);

        boolean present = (userRepository.findByUsername(user.getUsername()) != null);

        if (present) {
            result.rejectValue("username", "new.user.form.present");
        }

        if(result.hasErrors()) {
            return "newUser";
        }

        userService.createUser(user.getUsername(), user.getPassword());

        return "redirect:/";
    }

    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void setUserSession(UserSession userSession) {
        this.userSession = userSession;
    }

    public void setUserFormValidator(UserFormValidator userFormValidator) {
        this.userFormValidator = userFormValidator;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}