maia_modificado/.svn/pristine/4e/4e5acedc702018707a454e05312...

717 lines
23 KiB
Plaintext
Executable File

package com.fp.frontend.controller.security;
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.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;
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.safe.TsafeUserDetail;
import com.fp.persistence.pgeneral.safe.TsafeUserProfile;
/**
* @author jorge
*
*/
@ManagedBean
@SessionScoped
public class LoginController {
private Request request;
private MaiaMenu maiaMenu;
/**
* Informacion temporal a utilizar en cualquier controlador o pantalla del index, usuario password.
*/
private Map<String, Object> mdata = new HashMap<String, Object>();
/**
* Datos de localizacion del usaurio, cia, suc, ofia, perfil, canal, area, etc.
*/
private final Map<String, Object> mlocation = new HashMap<String, Object>();
/**
* Lista de companias.
*/
private List<Map<String, Object>> lcompany;
/**
* Lista de perfiles asociados al usuario que hace login a la aplicacion.
*/
private List<TsafeUserProfile> lprofile;
/**
* Bandera que indica si el usuario tiene que cambiar el password (Y) cambia el password .
*/
private String changepassword;
/**
* Indica que renderiza el campo para autorizar o negar una tarea de JBPM.
*/
private boolean renderBpmData = false;
/**
* Url logout del cas
*/
private String casLogoutUrl;
/**
* Codigo de perfil con el que se logea el usuario.
*/
private String profilecode;
/**
* Ruta del documento de los terminos y condiciones
*/
private String rutaTerminos;
private StreamedContent content;
// @ManagedProperty(value = "#{terminosCondicionesController}")
// private TerminosCondicionesController terminos;
// @ManagedProperty(value = "#{alfrescoController}")
// private AlfrescoController alfrescoController;
@PostConstruct
private void postconstruct() {
request = new Request();
request.setCompany(1);
// Ip cliente
HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.setTerminalCode(httpServletRequest.getRemoteAddr());
request.put("ip", httpServletRequest.getRemoteAddr());
request.put("host", httpServletRequest.getLocalAddr());
// this.request.put("jsessionid",
// httpServletRequest.getSession().getId());
this.fillCompanies();
maiaMenu = new MaiaMenu();
}
public void authenticate() throws Throwable {
try {
String user = mdata.get("a").toString();
String pass = mdata.get("b").toString();
request.put("login", user);
CallerHelper ch = new CallerHelper();
Response resp = ch.login(request, user, pass);
//validamos si aceptados los terminos y condiciones
TarmTerminos terminos=TerminosCondicionesController.findxIdentificacion(user);
if(resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0 && terminos==null){
System.out.println("terminos");
try {
rutaTerminos=ParametersController.find("CODIGO.TERMINOS.COND", "1").getTextvalue();
content=AlfrescoController.downloadDocument(rutaTerminos);
} catch (Exception e) {
System.out.println("error al obtener el parametro CODIGO.TERMINOS.COND");
}
//abre el dialogo que acepte
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("PF('aceptaTerminosCond').show()");
}else
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) resp.get("TSAFEUSERDETAIL");
this.manageloginresponse(tsafeUserDetail);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail);
// Con esto pasa por el filtro de compresion.
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext externalContext = ctx.getExternalContext();
NavigationHandler handler = ctx.getApplication().getNavigationHandler();
handler.handleNavigation(ctx, null, "workspace");
// Fija en browser y SO
request.setBrowser(this.obtainBrowserName(externalContext.getRequestHeaderMap().get("User-Agent")));
request.setOperativesystem(this.obtainSOName(externalContext.getRequestHeaderMap().get("User-Agent")));
// Obtiene y arma el menu del primer perfil.
this.changeprofile();
} else {
MessageHelper.setMessageError(resp);
}
} catch (Exception e) {
MessageHelper.setMessageError(e);
}
}
/**
* Nuevo boton de terminos y condiciones
*/
public void aceptaTerminosCondicion(){
String user = mdata.get("a").toString();
String pass = mdata.get("b").toString();
CallerHelper ch;
try {
ch = new CallerHelper();
request.put("terminos","terminos");
request.put("aceptaterminos","SI");
request.put("identificacionterminos",user);
request.put("documentoterminos",rutaTerminos);
Response resp = ch.login(request, user, pass);
TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) resp.get("TSAFEUSERDETAIL");
this.manageloginresponse(tsafeUserDetail);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail);
// Con esto pasa por el filtro de compresion.
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext externalContext = ctx.getExternalContext();
NavigationHandler handler = ctx.getApplication().getNavigationHandler();
handler.handleNavigation(ctx, null, "workspace");
// Fija en browser y SO
request.setBrowser(this.obtainBrowserName(externalContext.getRequestHeaderMap().get("User-Agent")));
request.setOperativesystem(this.obtainSOName(externalContext.getRequestHeaderMap().get("User-Agent")));
// Obtiene y arma el menu del primer perfil.
this.changeprofile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void authenticateCas(String username, String urlCasLogout) throws Throwable {
try {
casLogoutUrl = urlCasLogout;
request.put("login", username);
CallerHelper ch = new CallerHelper();
Response resp = ch.loginCas(request, username, null);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) resp.get("TSAFEUSERDETAIL");
this.manageloginresponse(tsafeUserDetail);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("TSAFEUSERDETAIL", tsafeUserDetail);
// Con esto pasa por el filtro de compresion.
//FacesContext ctx = FacesContext.getCurrentInstance();
// NavigationHandler handler =
// ctx.getApplication().getNavigationHandler();
// handler.handleNavigation(ctx, null, "workspace");
// Obtiene y arma el menu del primer perfil.
this.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(request);
} catch (Throwable e) {
// no hacer nada
}
}
public String logout() {
System.out.println("logout::cerrando session bean");
this.updateusesession();
FacesContext fc = FacesContext.getCurrentInstance();
if(fc!=null){
fc.getExternalContext().invalidateSession();
}
return "/login?faces-redirect=true";
}
@SuppressWarnings("unchecked")
private void manageloginresponse(TsafeUserDetail userdetail) {
mlocation.put("cia", userdetail.get("cn"));
mlocation.put("branch", userdetail.get("bn"));
mlocation.put("office", userdetail.get("on"));
mlocation.put("area", userdetail.get("an"));
mlocation.put("channel", userdetail.get("chn"));
mlocation.put("accodate", userdetail.get("ad"));
mlocation.put("workdate", userdetail.get("wd"));
mlocation.put("nickname", userdetail.getNickname());
mlocation.put("sbsemployee", userdetail.get("sbsemployee"));
mlocation.put("sbsusercode", userdetail.get("sbsusercode"));
obtenerCentroControl(userdetail);
obtenerUnidadControl(userdetail);
request.setUser(userdetail.getPk().getUsercode());
request.setCompany(userdetail.getCompanycode());
request.setBranchCode(userdetail.getBranchcode());
request.setOfficeCode(userdetail.getOfficecode());
request.setChannelCode(userdetail.getChannelcode());
request.setLanguage(userdetail.getLanguagecode());
request.setCentrocontrol(userdetail.getCcentrocontrol());
changepassword = userdetail.getChangepassword();
lprofile = (List<TsafeUserProfile>) userdetail.get("lprofile");
request.setProfile(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());
mlocation.put("centrocontrol", tcentrocontrol.getDescription());
}else{
userdetail.addAddtionalInfo("centrocontrol", "");
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());
mlocation.put("unidad", unidad.getDescription());
}else{
userdetail.addAddtionalInfo("unidad", "");
mlocation.put("unidad", "");
}
}
@SuppressWarnings({ "unchecked" })
public void changeprofile() throws Exception {
try {
if (profilecode != null) {
request.setProfile(profilecode);
}
CallerHelper ch = new CallerHelper();
Response resp = ch.menu(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
Map<String, Object> rootmenu = (Map<String, Object>) resp.get("rootmenu");
List<Map<String, Object>> lmenu = (List<Map<String, Object>>) rootmenu.get("items");
maiaMenu.buildMenu(lmenu);
} else {
MessageHelper.setMessageError(resp);
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
/**
* Obtiene lista de compania.
*/
@SuppressWarnings("unchecked")
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<String, DtoQuery>();
mtables.put("CIAS", dto); // permite adicionar mas de una tabla.
request.setCompany(1);
request.getModifiedData().put("queryalias", "COMPANY");
request.setQueryTables(mtables);
Response resp = ch.executeQuery(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
lcompany = new ArrayList<Map<String, Object>>();
MessageHelper.setMessageError(resp);
} else {
lcompany = (List<Map<String, Object>>) 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());
// datos de la transaccion de ejecucion.
request.setTransactionModule(transactionmodule);
request.setTransactionCode(transactioncode);
request.setTransactionVersion(transactionversion);
}
/**
* Obtiene el nombre del browser
*
* @param userAgent
* @return
*/
private String obtainBrowserName(String userAgent) {
if (userAgent.contains("MSIE")) {
return this.buildBrowser(userAgent, "MSIE");
}
if (userAgent.contains("Firefox")) {
return this.buildBrowser(userAgent, "Firefox");
}
if (userAgent.contains("Chrome")) {
return this.buildBrowser(userAgent, "Chrome");
}
if (userAgent.contains("Opera")) {
return this.buildBrowser(userAgent, "Opera");
}
if (userAgent.contains("Safari")) {
return this.buildBrowser(userAgent, "Safari");
}
return "Unknown";
}
/**
* Obtiene el nombre del Sistema Operativo
*
* @param userAgent
* @return
*/
private String obtainSOName(String userAgent) {
String os = "";
if (userAgent.contains("Windows")) {
os = this.buildOS(userAgent, "Windows");
} else if (userAgent.contains("Mac")) {
os = this.buildOS(userAgent, "Mac");
} else if (userAgent.contains("Linux")) {
os = this.buildOS(userAgent, "Linux");
} else if (userAgent.contains("android")) {
os = this.buildOS(userAgent, "android");
} else if (userAgent.contains("iphone")) {
os = this.buildOS(userAgent, "iphone");
} else {
os = "UnKnown, More-Info: " + userAgent;
}
return os;
}
/**
* Arma la respuesta del User-Agent
*
* @param userAgent
* @param id
* @return browser
*/
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;
}
/**
* Arma la respuesta del User-Agent
*
* @param userAgent
* @param id
* @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;
}
/**
* Entrega el valor de: lcompany
*
* @return List<Map<String,Object>>
*/
public List<Map<String, Object>> getLcompany() {
return lcompany;
}
/**
* Fija el valor de: lcompany
*
* @param Valor a fijar en el atributo.
*/
public void setLcompany(List<Map<String, Object>> lcompany) {
this.lcompany = lcompany;
}
/**
* Entrega el valor de: lprofile
*
* @return List<TsafeUserProfile>
*/
public List<TsafeUserProfile> getLprofile() {
return lprofile;
}
/**
* Fija el valor de: lprofile
*
* @param Valor a fijar en el atributo.
*/
public void setLprofile(List<TsafeUserProfile> lprofile) {
this.lprofile = lprofile;
}
/**
* Entrega el valor de: changepassword
*
* @return String
*/
public String getChangepassword() {
return changepassword;
}
/**
* Fija el valor de: changepassword
*
* @param Valor a fijar en el atributo.
*/
public void setChangepassword(String changepassword) {
this.changepassword = changepassword;
}
/**
* Entrega el valor de: mdata
*
* @return Map<String,Object>
*/
public Map<String, Object> getMdata() {
return mdata;
}
/**
* Fija el valor de: mdata
*
* @param Valor a fijar en el atributo.
*/
public void setMdata(Map<String, Object> mdata) {
this.mdata = mdata;
}
/**
* Entrega el valor de: request
*
* @return Request
*/
public Request getRequest() {
return request;
}
/**
* Fija el valor de: request
*
* @param Valor a fijar en el atributo.
*/
public void setRequest(Request request) {
this.request = request;
}
/**
* Entrega el valor de: maiaMenu
*
* @return MaiaMenu
*/
public MaiaMenu getMaiaMenu() {
return maiaMenu;
}
/**
* Fija el valor de: maiaMenu
*
* @param Valor a fijar en el atributo.
*/
public void setMaiaMenu(MaiaMenu maiaMenu) {
this.maiaMenu = maiaMenu;
}
/**
* Entrega el valor de: mlocation
*
* @return Map<String,Object>
*/
public Map<String, Object> getMlocation() {
return mlocation;
}
/**
* Entrega el valor de: renderBpmData
*
* @return boolean
*/
public boolean isRenderBpmData() {
return renderBpmData;
}
/**
* Fija el valor de: renderBpmData
*
* @param renderBpmData Valor a fijar en el atributo.
*/
public void setRenderBpmData(boolean renderBpmData) {
this.renderBpmData = renderBpmData;
}
public String getCasLogoutUrl() {
return casLogoutUrl;
}
public void setCasLogoutUrl(String casLogoutUrl) {
this.casLogoutUrl = casLogoutUrl;
}
/**
* Entrega el valor de: profilecode
*
* @return String
*/
public String getProfilecode() {
return profilecode;
}
/**
* Fija el valor de: profilecode
*
* @param profilecode
*/
public void setProfilecode(String profilecode) {
this.profilecode = profilecode;
}
/**
* Metodo para obtener el documento de ayuda
*/
public void help() throws Exception {
String m = request.getTransactionModule();
String t = request.getTransactionCode().toString();
String v = request.getTransactionVersion().toString();
String p = ParametersController.find(EnumParametros.PATH_ALFRESCO_AYUDA.getCodigo(), 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){
this.logout();
}
} catch (Exception e) {
// no hacer nada.
}
}
// public TerminosCondicionesController getTerminos() {
// return terminos;
// }
//
// public void setTerminos(TerminosCondicionesController terminos) {
// this.terminos = terminos;
// }
// public AlfrescoController getAlfrescoController() {
// return alfrescoController;
// }
//
// public void setAlfrescoController(AlfrescoController alfrescoController) {
// this.alfrescoController = alfrescoController;
// }
public String getRutaTerminos() {
return rutaTerminos;
}
public void setRutaTerminos(String rutaTerminos) {
this.rutaTerminos = rutaTerminos;
}
public StreamedContent getContent() {
return content;
}
public void setContent(StreamedContent content) {
this.content = content;
}
}