package com.fp.frontend.controller.security; import com.fp.dto.Request; import com.fp.dto.Response; import com.fp.dto.query.DtoQuery; import com.fp.frontend.controller.alfresco.AlfrescoController; import com.fp.frontend.controller.armas.parametros.CentroControlArmasController; import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController; import com.fp.frontend.controller.pgeneral.gene.ParametersController; import com.fp.frontend.controller.pgeneral.gene.TerminosCondicionesController; import com.fp.frontend.helper.CallerHelper; import com.fp.frontend.helper.MessageHelper; import com.fp.frontend.utility.EnumParametros; import com.fp.persistence.commondb.exception.CommondbException; import com.fp.persistence.parmas.param.TarmCentroControl; import com.fp.persistence.parmas.soli.TarmTerminos; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.persistence.pgeneral.gene.TgeneParameters; import com.fp.persistence.pgeneral.safe.TsafeUserDetail; import com.fp.persistence.pgeneral.safe.TsafeUserDetailKey; import com.fp.persistence.pgeneral.safe.TsafeUserProfile; import com.fp.persistence.pgeneral.safe.TsafeUserProfileKey; import java.io.PrintStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.faces.application.Application; import javax.faces.application.NavigationHandler; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; import org.primefaces.context.RequestContext; import org.primefaces.model.StreamedContent; @ManagedBean @SessionScoped public class LoginController { private Request request; private MaiaMenu maiaMenu; private Map mdata = new HashMap(); private final Map mlocation = new HashMap(); private List> lcompany; private List lprofile; private String changepassword; private boolean renderBpmData = false; private String casLogoutUrl; private String profilecode; private String rutaTerminos; private StreamedContent content; @PostConstruct private void postconstruct() { this.request = new Request(); this.request.setCompany(Integer.valueOf(1)); HttpServletRequest httpServletRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); this.request.setTerminalCode(httpServletRequest.getRemoteAddr()); this.request.put("ip", httpServletRequest.getRemoteAddr()); this.request.put("host", httpServletRequest.getLocalAddr()); fillCompanies(); this.maiaMenu = new MaiaMenu(); } public void authenticate() throws Throwable { System.out.println("autentificacion debe cambiar : "); try { System.out.println("changepassword debe cambiar : "); String user = this.mdata.get("a").toString(); String pass = this.mdata.get("b").toString(); this.request.put("login", user); CallerHelper ch = new CallerHelper(); Response resp = ch.login(this.request, user, pass); TarmTerminos terminos = TerminosCondicionesController.findxIdentificacion(user); if ((resp.getResponseCode().compareTo("0") == 0) && (terminos == null)) { System.out.println("terminos"); try { this.rutaTerminos = ParametersController.find("CODIGO.TERMINOS.COND", "1").getTextvalue(); this.content = AlfrescoController.downloadDocument(this.rutaTerminos); } catch (Exception e) { System.out.println("error al obtener el parametro CODIGO.TERMINOS.COND"); } RequestContext requestContext = RequestContext.getCurrentInstance(); requestContext.execute("PF('aceptaTerminosCond').show()"); } else if (resp.getResponseCode().compareTo("0") == 0) { TsafeUserDetail tsafeUserDetail = (TsafeUserDetail)resp.get("TSAFEUSERDETAIL"); manageloginresponse(tsafeUserDetail); FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail); if (this.changepassword.equalsIgnoreCase("N")) { FacesContext ctx = FacesContext.getCurrentInstance(); ExternalContext externalContext = ctx.getExternalContext(); NavigationHandler handler = ctx.getApplication().getNavigationHandler(); handler.handleNavigation(ctx, null, "workspace"); externalContext.redirect(externalContext.getRequestContextPath() + "/" + "pages/workspace.xhtml"); this.request.setBrowser(obtainBrowserName((String)externalContext.getRequestHeaderMap().get("User-Agent"))); this.request.setOperativesystem(obtainSOName((String)externalContext.getRequestHeaderMap().get("User-Agent"))); changeprofile(); } else { ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); ec.redirect(ec.getRequestContextPath() + "/" + "change-password.xhtml"); System.out.println("debe cambiar la clave : " + ec.getRequestContextPath() + "/" + "passwordExpired.xhtml"); } } else { MessageHelper.setMessageError(resp); } } catch (Exception e) { MessageHelper.setMessageError(e); } } public void aceptaTerminosCondicion() { String user = this.mdata.get("a").toString(); String pass = this.mdata.get("b").toString(); try { CallerHelper ch = new CallerHelper(); this.request.put("terminos", "terminos"); this.request.put("aceptaterminos", "SI"); this.request.put("identificacionterminos", user); this.request.put("documentoterminos", this.rutaTerminos); Response resp = ch.login(this.request, user, pass); TsafeUserDetail tsafeUserDetail = (TsafeUserDetail)resp.get("TSAFEUSERDETAIL"); manageloginresponse(tsafeUserDetail); FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail); if (tsafeUserDetail.getChangepassword().equalsIgnoreCase("N")) { FacesContext ctx = FacesContext.getCurrentInstance(); ExternalContext externalContext = ctx.getExternalContext(); NavigationHandler handler = ctx.getApplication().getNavigationHandler(); handler.handleNavigation(ctx, null, "workspace"); externalContext.redirect(externalContext.getRequestContextPath() + "/" + "pages/workspace.xhtml"); this.request.setBrowser(obtainBrowserName((String)externalContext.getRequestHeaderMap().get("User-Agent"))); this.request.setOperativesystem(obtainSOName((String)externalContext.getRequestHeaderMap().get("User-Agent"))); changeprofile(); } else { ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); ec.redirect(ec.getRequestContextPath() + "/" + "change-password.xhtml"); System.out.println("debe cambiar la clave : " + ec.getRequestContextPath() + "/" + "passwordExpired.xhtml"); } } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } public void authenticateCas(String username, String urlCasLogout) throws Throwable { try { this.casLogoutUrl = urlCasLogout; this.request.put("login", username); CallerHelper ch = new CallerHelper(); Response resp = ch.loginCas(this.request, username, null); if (resp.getResponseCode().compareTo("0") == 0) { TsafeUserDetail tsafeUserDetail = (TsafeUserDetail)resp.get("TSAFEUSERDETAIL"); manageloginresponse(tsafeUserDetail); FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail); changeprofile(); } else { throw new Exception(resp.getResponseCode() + " " + resp.getResponseUserMessage()); } } catch (Exception e) { throw e; } } public void updateusesession() { System.out.println("logout::cerrando session"); try { CallerHelper ch = new CallerHelper(); ch.logout(this.request); } catch (Throwable e) {} } public String logout() { System.out.println("logout::cerrando session bean"); updateusesession(); FacesContext fc = FacesContext.getCurrentInstance(); if (fc != null) { fc.getExternalContext().invalidateSession(); } return "/login?faces-redirect=true"; } private void manageloginresponse(TsafeUserDetail userdetail) { this.mlocation.put("cia", userdetail.get("cn")); this.mlocation.put("branch", userdetail.get("bn")); this.mlocation.put("office", userdetail.get("on")); this.mlocation.put("area", userdetail.get("an")); this.mlocation.put("channel", userdetail.get("chn")); this.mlocation.put("accodate", userdetail.get("ad")); this.mlocation.put("workdate", userdetail.get("wd")); this.mlocation.put("nickname", userdetail.getNickname()); this.mlocation.put("sbsemployee", userdetail.get("sbsemployee")); this.mlocation.put("sbsusercode", userdetail.get("sbsusercode")); obtenerCentroControl(userdetail); obtenerUnidadControl(userdetail); this.request.setUser(userdetail.getPk().getUsercode()); this.request.setCompany(userdetail.getCompanycode()); this.request.setBranchCode(userdetail.getBranchcode()); this.request.setOfficeCode(userdetail.getOfficecode()); this.request.setChannelCode(userdetail.getChannelcode()); this.request.setLanguage(userdetail.getLanguagecode()); this.request.setCentrocontrol(userdetail.getCcentrocontrol()); this.changepassword = userdetail.getChangepassword(); this.lprofile = ((List)userdetail.get("lprofile")); this.request.setProfile(((TsafeUserProfile)this.lprofile.get(0)).getPk().getProfilecode()); } private void obtenerCentroControl(TsafeUserDetail userdetail) { TgeneCatalogDetail tcentrocontrol = null; try { TarmCentroControl centroControl = CentroControlArmasController.findPorCodigo(userdetail.getCcentrocontrol()); if (centroControl != null) { tcentrocontrol = CatalogDetailController.findCatalogo(centroControl.getInstituciontipo(), centroControl.getInstitucion()); } } catch (CommondbException e) {}catch (Exception e) {} if (tcentrocontrol != null) { userdetail.addAddtionalInfo("centrocontrol", tcentrocontrol.getDescription()); this.mlocation.put("centrocontrol", tcentrocontrol.getDescription()); } else { userdetail.addAddtionalInfo("centrocontrol", ""); this.mlocation.put("centrocontrol", ""); } } private void obtenerUnidadControl(TsafeUserDetail userdetail) { TgeneCatalogDetail unidad = null; try { TarmCentroControl centroControl = CentroControlArmasController.findPorCodigo(userdetail.getCcentrocontrol()); if (centroControl != null) { unidad = CatalogDetailController.findCatalogo(centroControl.getNombreinstitucioncodigo(), centroControl.getNombreinstitucion()); } } catch (CommondbException e) {}catch (Exception e) {} if (unidad != null) { userdetail.addAddtionalInfo("unidad", unidad.getDescription()); this.mlocation.put("unidad", unidad.getDescription()); } else { userdetail.addAddtionalInfo("unidad", ""); this.mlocation.put("unidad", ""); } } public void changeprofile() throws Exception { try { if (this.profilecode != null) { this.request.setProfile(this.profilecode); } CallerHelper ch = new CallerHelper(); Response resp = ch.menu(this.request); if (resp.getResponseCode().compareTo("0") == 0) { Map rootmenu = (Map)resp.get("rootmenu"); List> lmenu = (List)rootmenu.get("items"); this.maiaMenu.buildMenu(lmenu); } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } private void fillCompanies() { try { CallerHelper ch = new CallerHelper(); Request request = new Request(); DtoQuery dto = new DtoQuery(null, null, null, true, null); HashMap mtables = new HashMap(); mtables.put("CIAS", dto); request.setCompany(Integer.valueOf(1)); request.getModifiedData().put("queryalias", "COMPANY"); request.setQueryTables(mtables); Response resp = ch.executeQuery(request); if (resp.getResponseCode().compareTo("0") != 0) { this.lcompany = new ArrayList(); MessageHelper.setMessageError(resp); } else { this.lcompany = ((List)resp.get("CIAS")); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } public void fijaRequestData(Request request, String transactionmodule, Integer transactioncode, Integer transactionversion) throws Exception { request.setCompany(this.request.getCompany()); request.setCentrocontrol(this.request.getCentrocontrol()); request.setUnidad(this.request.getUnidad()); request.setBranchCode(this.request.getBranchCode()); request.setOfficeCode(this.request.getOfficeCode()); request.setUser(this.request.getUser()); request.setLanguage(this.request.getLanguage()); request.setChannelCode(this.request.getChannelCode()); request.setTerminalCode(this.request.getTerminalCode()); request.setProfile(this.request.getProfile()); request.setBrowser(this.request.getBrowser()); request.setOperativesystem(this.request.getOperativesystem()); request.setTransactionModule(transactionmodule); request.setTransactionCode(transactioncode); request.setTransactionVersion(transactionversion); } private String obtainBrowserName(String userAgent) { if (userAgent.contains("MSIE")) { return buildBrowser(userAgent, "MSIE"); } if (userAgent.contains("Firefox")) { return buildBrowser(userAgent, "Firefox"); } if (userAgent.contains("Chrome")) { return buildBrowser(userAgent, "Chrome"); } if (userAgent.contains("Opera")) { return buildBrowser(userAgent, "Opera"); } if (userAgent.contains("Safari")) { return buildBrowser(userAgent, "Safari"); } return "Unknown"; } private String obtainSOName(String userAgent) { String os = ""; if (userAgent.contains("Windows")) { os = buildOS(userAgent, "Windows"); } else if (userAgent.contains("Mac")) { os = buildOS(userAgent, "Mac"); } else if (userAgent.contains("Linux")) { os = buildOS(userAgent, "Linux"); } else if (userAgent.contains("android")) { os = buildOS(userAgent, "android"); } else if (userAgent.contains("iphone")) { os = buildOS(userAgent, "iphone"); } else { os = "UnKnown, More-Info: " + userAgent; } return os; } private String buildBrowser(String userAgent, String id) { String browser = ""; if (userAgent.contains("MSIE")) { String[] value = userAgent.substring(userAgent.indexOf(id), userAgent.length()).split(" "); browser = value[0] + " " + value[1]; } else { String[] value = userAgent.substring(userAgent.indexOf(id), userAgent.length()).split(" "); browser = value[0]; } return browser; } private String buildOS(String userAgent, String id) { String so = ""; if (userAgent.contains("Windows")) { String[] value = userAgent.substring(userAgent.indexOf(id), userAgent.length()).split(" "); so = value[0] + " " + value[1] + " " + value[2]; } else { String[] value = userAgent.substring(userAgent.indexOf(id), userAgent.length()).split(" "); so = value[0] + " " + value[1]; } return so; } public List> getLcompany() { return this.lcompany; } public void setLcompany(List> lcompany) { this.lcompany = lcompany; } public List getLprofile() { return this.lprofile; } public void setLprofile(List lprofile) { this.lprofile = lprofile; } public String getChangepassword() { return this.changepassword; } public void setChangepassword(String changepassword) { this.changepassword = changepassword; } public Map getMdata() { return this.mdata; } public void setMdata(Map mdata) { this.mdata = mdata; } public Request getRequest() { return this.request; } public void setRequest(Request request) { this.request = request; } public MaiaMenu getMaiaMenu() { return this.maiaMenu; } public void setMaiaMenu(MaiaMenu maiaMenu) { this.maiaMenu = maiaMenu; } public Map getMlocation() { return this.mlocation; } public boolean isRenderBpmData() { return this.renderBpmData; } public void setRenderBpmData(boolean renderBpmData) { this.renderBpmData = renderBpmData; } public String getCasLogoutUrl() { return this.casLogoutUrl; } public void setCasLogoutUrl(String casLogoutUrl) { this.casLogoutUrl = casLogoutUrl; } public String getProfilecode() { return this.profilecode; } public void setProfilecode(String profilecode) { this.profilecode = profilecode; } public void help() throws Exception { String m = this.request.getTransactionModule(); String t = this.request.getTransactionCode().toString(); String v = this.request.getTransactionVersion().toString(); String p = ParametersController.find(EnumParametros.PATH_ALFRESCO_AYUDA.getCodigo(), this.request.getCompany().toString()).getTextvalue(); RequestContext.getCurrentInstance().execute("Maiaworkspace.loadHelp('" + m + "', '" + t + "', '" + v + "', '" + p + "')"); } @PreDestroy private void closeSessionMaia() { try { FacesContext fc = FacesContext.getCurrentInstance(); if (fc != null) { logout(); } } catch (Exception e) {} } public String getRutaTerminos() { return this.rutaTerminos; } public void setRutaTerminos(String rutaTerminos) { this.rutaTerminos = rutaTerminos; } public StreamedContent getContent() { return this.content; } public void setContent(StreamedContent content) { this.content = content; } }