maia_modificado/.svn/pristine/85/856160b7bae3ef1bb760d0bebd3...

598 lines
19 KiB
Plaintext
Executable File

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<String, Object> mdata = new HashMap();
private final Map<String, Object> mlocation = new HashMap();
private List<Map<String, Object>> lcompany;
private List<TsafeUserProfile> 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<String, Object> rootmenu = (Map)resp.get("rootmenu");
List<Map<String, Object>> 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<String, DtoQuery> 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<Map<String, Object>> getLcompany()
{
return this.lcompany;
}
public void setLcompany(List<Map<String, Object>> lcompany)
{
this.lcompany = lcompany;
}
public List<TsafeUserProfile> getLprofile()
{
return this.lprofile;
}
public void setLprofile(List<TsafeUserProfile> lprofile)
{
this.lprofile = lprofile;
}
public String getChangepassword()
{
return this.changepassword;
}
public void setChangepassword(String changepassword)
{
this.changepassword = changepassword;
}
public Map<String, Object> getMdata()
{
return this.mdata;
}
public void setMdata(Map<String, Object> 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<String, Object> 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;
}
}