package edu.asu.spring.quadriga.web; import java.security.Principal; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import edu.asu.spring.quadriga.aspects.annotations.NoAuthorizationCheck; import edu.asu.spring.quadriga.domain.enums.EProjectAccessibility; import edu.asu.spring.quadriga.domain.workbench.IProject; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.service.IUserManager; import edu.asu.spring.quadriga.service.workbench.IRetrieveProjectManager; /** * The controller to manage the login step performed by every user in Quadriga Database * * @author Ram Kumar Kumaresan */ @Controller public class LoginController { @Autowired private IUserManager userManager; @Autowired private IRetrieveProjectManager retrieveProjectManager; /** * A valid authenticated user is redirected to the home page. * * @return Returned to the home page of Quadriga. * @throws QuadrigaStorageException */ @NoAuthorizationCheck @RequestMapping(value = "auth/welcome", method = RequestMethod.GET) public String validUserHandle(ModelMap model, Principal principal, Authentication authentication) { // Get the LDAP-authenticated userid String sUserId = principal.getName(); model.addAttribute("username", sUserId); return "redirect:home"; } /** * User requests a login page * * @return Redirected to the login page * @throws QuadrigaStorageException */ @NoAuthorizationCheck @RequestMapping(value = "/login", method = RequestMethod.GET) public String login(ModelMap model) throws QuadrigaStorageException { List<IProject> projectList = retrieveProjectManager.getProjectListByAccessibility(EProjectAccessibility.PUBLIC); Collections.sort(projectList, new Comparator<IProject>() { @Override public int compare(IProject o1, IProject o2) { return o1.getUpdatedDate().compareTo(o2.getUpdatedDate()); } }); int size = projectList.size() > 4 ? 4 : projectList.size(); model.addAttribute("latestProjects", projectList.subList(0, size)); return "login"; } /** * Authentication failed. User credentials mismatch causes this request. * * @return Redirected to login page */ @NoAuthorizationCheck @RequestMapping(value = "/loginfailed", method = RequestMethod.GET) public String loginerror(ModelMap model) { model.addAttribute("error", "true"); return "login"; } }