package org.openiam.selfsrvc; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openiam.idm.srvc.auth.ws.LoginDataWebService; import org.openiam.idm.srvc.org.service.OrganizationDataService; import org.openiam.idm.srvc.prov.request.dto.ProvisionRequest; import org.openiam.idm.srvc.prov.request.dto.SearchRequest; import org.openiam.idm.srvc.prov.request.ws.RequestWebService; import org.openiam.idm.srvc.user.dto.Supervisor; import org.openiam.idm.srvc.user.dto.UserAttribute; import org.openiam.selfsrvc.pswd.PasswordConfiguration; import org.openiam.selfsrvc.usradmin.DelegationFilterHelper; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; import org.openiam.base.ws.ResponseStatus; import org.openiam.idm.srvc.grp.dto.Group; import org.openiam.idm.srvc.grp.ws.GroupDataWebService; import org.openiam.idm.srvc.grp.ws.GroupListResponse; import org.openiam.idm.srvc.loc.service.LocationDataService; import org.openiam.idm.srvc.role.dto.Role; import org.openiam.idm.srvc.role.ws.RoleDataWebService; import org.openiam.idm.srvc.role.ws.RoleListResponse; import org.openiam.idm.srvc.user.dto.User; import org.openiam.idm.srvc.user.ws.UserDataWebService; import org.openiam.idm.srvc.user.ws.UserResponse; import org.openiam.idm.srvc.auth.dto.Login; public class WelcomePageController extends AbstractController { private static final Log log = LogFactory.getLog(WelcomePageController.class); private String successView; private UserDataWebService userMgr; private RoleDataWebService roleDataService; private GroupDataWebService groupManager; protected LoginDataWebService loginManager; protected PasswordConfiguration configuration; protected RequestWebService provRequestService; protected OrganizationDataService orgManager; public WelcomePageController() { super(); } /* (non-Javadoc) * @see org.springframework.web.servlet.mvc.AbstractController#handleRequestInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { HttpSession session = req.getSession(); String userId = (String)session.getAttribute("userId"); List<String> roleIdList = new ArrayList<String>(); UserResponse response = userMgr.getUserWithDependent(userId, true); if (response.getStatus() == ResponseStatus.FAILURE) { ModelAndView mav = new ModelAndView("/error"); return mav; } User usr = response.getUser(); GroupListResponse groupResponse = groupManager.getUserInGroups(userId); RoleListResponse roleResponse = roleDataService.getUserRolesAsFlatList(userId); if (roleResponse != null && roleResponse.getStatus() == ResponseStatus.SUCCESS) { List<Role> roleList = roleResponse.getRoleList(); for (Role r : roleList) { roleIdList.add(r.getId().getRoleId()); } } String principal = (String)session.getAttribute("login"); Login lg = loginManager.getLoginByManagedSys(configuration.getDefaultSecurityDomain(), principal, configuration.getDefaultManagedSysId()).getPrincipal(); // Login lg = loginManager.getPrimaryIdentity(userId).getPrincipal(); String daysToExpStr = null; if (lg.getPwdExp() != null) { daysToExpStr = String.valueOf( setDaysToPassworExpiration(lg) ); }else { daysToExpStr = "NA"; } // supervisor List<Supervisor> supVisorList = userMgr.getSupervisors(userId).getSupervisorList(); String supervisorName = null; if (supVisorList != null && !supVisorList.isEmpty()) { Supervisor supervisor = supVisorList.get(0); supervisorName = supervisor.getSupervisor().getFirstName() + " " + supervisor.getSupervisor().getLastName(); } else { supervisorName = "NA"; } // user dept String deptCd = usr.getDeptCd(); String deptName = "NA"; if (deptCd != null && deptCd.length() >0) { deptName = orgManager.getOrganization(deptCd).getOrganizationName(); } SearchRequest search = buildSearch( userId, roleIdList, usr); List<ProvisionRequest> reqList = provRequestService.search(search).getReqList(); ModelAndView mav = new ModelAndView(getSuccessView()); mav.addObject("user", usr); mav.addObject("groupList",groupResponse.getGroupList()); mav.addObject("roleList", roleResponse.getRoleList()); mav.addObject("primaryIdentity", lg); mav.addObject("daysToExp", daysToExpStr); mav.addObject("supervisor", supervisorName); mav.addObject("dept", deptName); if (reqList != null && reqList.size() > 0) { mav.addObject("pendingReq", reqList.size()); } return mav; } public int setDaysToPassworExpiration(Login lg) { if (lg.getPwdExp() == null) { return -1; } long DAY = 86400000L; // lg.getPwdExp is the expiration date/time long diffInMilliseconds = lg.getPwdExp().getTime() - System.currentTimeMillis(); long diffInDays = diffInMilliseconds / DAY; // treat anything that is less than a day, as zero if (diffInDays < 1) { return 0; } // partial days always rounds down. This is misleading to the user diffInDays++; return (int)diffInDays; } public String getSuccessView() { return successView; } public void setSuccessView(String successView) { this.successView = successView; } public UserDataWebService getUserMgr() { return userMgr; } public void setUserMgr(UserDataWebService userMgr) { this.userMgr = userMgr; } public RoleDataWebService getRoleDataService() { return roleDataService; } public void setRoleDataService(RoleDataWebService roleDataService) { this.roleDataService = roleDataService; } public GroupDataWebService getGroupManager() { return groupManager; } public void setGroupManager(GroupDataWebService groupManager) { this.groupManager = groupManager; } public LoginDataWebService getLoginManager() { return loginManager; } public void setLoginManager(LoginDataWebService loginManager) { this.loginManager = loginManager; } public PasswordConfiguration getConfiguration() { return configuration; } public void setConfiguration(PasswordConfiguration configuration) { this.configuration = configuration; } public RequestWebService getProvRequestService() { return provRequestService; } public void setProvRequestService(RequestWebService provRequestService) { this.provRequestService = provRequestService; } private SearchRequest buildSearch( String userId, List<String> roleIdList, User usr) { SearchRequest search = new SearchRequest(); search.setStatus("PENDING"); search.setApproverId(userId); search.setRoleIdList(roleIdList); if (usr.getDelAdmin() != null && usr.getDelAdmin().intValue() == 1) { Map<String, UserAttribute> attrMap = usr.getUserAttributes(); List<String> deptFilterList = null; List<String> orgFilterList = null; List<String> divFilterList = null; orgFilterList = DelegationFilterHelper.getOrgIdFilterFromString(attrMap); System.out.println("Org Filterlist =" + orgFilterList); if (orgFilterList != null && orgFilterList.size() > 0) { search.setRequestForOrgList(orgFilterList); } } return search; } public OrganizationDataService getOrgManager() { return orgManager; } public void setOrgManager(OrganizationDataService orgManager) { this.orgManager = orgManager; } }