package com.chughes.dip.controller;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
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.bind.annotation.RequestParam;
import com.chughes.dip.data.UserRepository;
import com.chughes.dip.user.UserDetailsImpl;
import com.chughes.dip.user.UserEntity;
@Controller
public class UserToolsController {
@Autowired
UserRepository us;
@RequestMapping(value="/login")
public String login(){
return "login";
}
@RequestMapping(value="/signin")
public String signin(){
return "redirect:/login";
}
@RequestMapping(value="/newuser")
public String newUser(Model model){
UserDetailsImpl user = new UserDetailsImpl();
model.addAttribute("user", user);
return "newuser";
}
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
model.addAttribute("error", "true");
return "login";
}
@RequestMapping(value="/saveuser")
public String saveUser(@Valid UserDetailsImpl user) throws Exception{
us.createUser(user);
return "saveuser";
}
@RequestMapping(value="/not-found")
public String notfound(){
return "not-found";
}
@PreAuthorize("hasRole('PLAYER')")
@RequestMapping(value="/account")
public String account(Model model){
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth.getPrincipal() instanceof UserDetailsImpl){
UserDetailsImpl user = (UserDetailsImpl) auth.getPrincipal();
UserEntity ue = us.getUserEntity(user.getId());
model.addAttribute("user", ue);
}
return "account";
}
@Autowired private BCryptPasswordEncoder encoder;
@PreAuthorize("hasRole('PLAYER')")
@RequestMapping(value="/updateuser")
public String updateUser(@Valid UserDetailsImpl user,@RequestParam(value="pass")String pass) throws Exception{
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth.getPrincipal() instanceof UserDetailsImpl){
if (us.getUserByName(user.getUsername()) != null){
throw new Exception("Username Taken");
}
UserDetailsImpl user1 = (UserDetailsImpl) auth.getPrincipal();
UserEntity usernew = us.getUserEntity(user1.getId());
usernew.setUsername(user.getUsername());
usernew.setEmail(user.getEmail());
if (pass.length() < 5 && pass.length() > 0){
throw new Exception("Password must be at least 5 characters");
}else if (pass.length() >= 5){
usernew.setPassword(encoder.encode(pass));
}
us.editUser(usernew);
}
return "updateuser";
}
@RequestMapping(value="/privacy")
public String privacy(){
return "privacy";
}
}