package gcom.util;
import java.io.IOException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import gcom.fachada.Fachada;
import gcom.seguranca.FiltroSegurancaParametro;
import gcom.seguranca.SegurancaParametro;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.filtro.ParametroNaoNulo;
import gcom.util.filtro.ParametroSimples;
public class GerenciadorSSO {
private Cookie[] cookies;
private String conteudoDoCookie;
private HttpServletRequest httpRequest;
private HttpClient http = new HttpClient();
private String token;
private SegurancaParametro parametro;
public GerenciadorSSO(HttpServletRequest httpRequest) throws IOException {
this.httpRequest = httpRequest;
this.cookies = httpRequest.getCookies();
this.validarToken();
this.setSessions();
}
public boolean isOk() throws IOException {
return http.getStatusCode() == 200;
}
public boolean isLogado() throws IOException {
return isOk();
}
public String getConteudoDoCookie() {
return this.conteudoDoCookie;
}
public String getToken() {
return this.token;
}
private void setSessions() throws IOException {
if (this.isOk() && !usuarioAutenticado()) {
HttpSession session = httpRequest.getSession(false);
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(FiltroUsuario.ID, this.getConteudoDoCookie()));
filtroUsuario.adicionarParametro(new ParametroNaoNulo(FiltroUsuario.ID));
Usuario usuario = (Usuario) Fachada.getInstancia().pesquisar(filtroUsuario, Usuario.class.getName()).iterator().next();
session.setAttribute("usuarioLogado", usuario);
Fachada.getInstancia().montarMenuUsuario(session, httpRequest.getRemoteAddr());
}
}
public boolean usuarioAutenticado() {
HttpSession session = httpRequest.getSession();
if (session != null) {
Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
if (usuario != null) {
return true;
}
}
return false;
}
public String getUrlPortal(){
return parametro.getValor();
}
private void validarToken() throws IOException {
if (existeAlgumCookie())
this.token = getCookie().getValue();
FiltroSegurancaParametro filtro = new FiltroSegurancaParametro();
filtro.adicionarParametro(new ParametroSimples(FiltroSegurancaParametro.NOME, SegurancaParametro.NOME_PARAMETRO_SEGURANCA.URL_SEGURANCA.name()));
filtro.adicionarParametro(new ParametroNaoNulo(FiltroSegurancaParametro.NOME));
parametro = (SegurancaParametro) Fachada.getInstancia().pesquisar(filtro, SegurancaParametro.class.getName()).iterator().next();
this.conteudoDoCookie = http.GetPageContent(parametro.getValor() + "/authorization?token=" + token);
}
private boolean existeAlgumCookie() {
return this.cookies != null && getCookie() != null;
}
private Cookie getCookie() {
Cookie cookieGsan = null;
for (Cookie cookie : cookies) {
if (cookie != null) {
if (cookie.getName().equals("gsan")) {
cookieGsan = cookie;
}
}
}
return cookieGsan;
}
}