package br.com.centralit.citcorpore.integracao.ad;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.SizeLimitExceededException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.PagedResultsControl;
import javax.naming.ldap.PagedResultsResponseControl;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citcorpore.bean.ADUserDTO;
import br.com.centralit.citcorpore.bean.ServidorContextoDTO;
import br.com.centralit.citcorpore.negocio.UsuarioService;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.service.ServiceLocator;
@SuppressWarnings({ "unchecked", "rawtypes" })
public final class LDAPUtils {
protected static LDAPUtils instanceLdap;
public static String INITIAL_CTX = "com.sun.jndi.ldap.LdapCtxFactory";
public static String SERVIDOR = "";// = "ldap://stj.gov.br:389";
public static String CONNECTION_TYPE = "simple";
public static String ADMIN_DN = "";// = "ldapciep";
public static String ADMIN_PW = "";// = "ldapses0p";
public static String BASE_DN = "";// = "dc=stj,dc=gov,dc=br";
public static String SUB_DOMINIO = ""; //"ou =*, dc=*";
public static String MSG_ERROR_LDAP_CONNECTION = "N�o foi poss�vel obter um contexto LDAP";
public static String MSG_ERROR_LDAP_VALIDATION_USER = "Username ou Password Inv�lida";
public static String FILTRO = "";
public static String LDAP_FILTRO = "";
public static String LDAP_ATRIBUTO = "";
public static String GRUPOPADRAO = "";
public static String ID_PERFIL_ACESSO_DEFAULT = "";
public static String NUMERO_COLABORADORES_CONSULTA_AD = "";
private LDAPUtils() {}
public static LDAPUtils getInstance() {
if (instanceLdap == null) {
instanceLdap = new LDAPUtils();
}
return instanceLdap;
}
static {
inicializaDados();
}
private static void inicializaDados() {
String[] loginAd;
String[] ldad_sufixo;
String admin_dn_login = "";
String admin_dominio = "";
try {
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LOGIN_AD, " ").trim().equalsIgnoreCase("")) {
admin_dn_login = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LOGIN_AD, " ").trim();
ADMIN_DN = admin_dn_login;
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAD_SUFIXO_DOMINIO, " ").trim().equalsIgnoreCase("")) {
loginAd = admin_dn_login.split(";");
ldad_sufixo = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAD_SUFIXO_DOMINIO, " ").trim().split(";");
for (int i = 0; i < ldad_sufixo.length; i++) {
admin_dominio += loginAd[i]+ldad_sufixo[i]+";";
}
ADMIN_DN = admin_dominio;
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.SENHA_AD, " ").trim().equalsIgnoreCase("")) {
ADMIN_PW = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.SENHA_AD, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_URL, " ").trim().equalsIgnoreCase("")) {
SERVIDOR = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_URL, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.DOMINIO_AD, " ").trim().equalsIgnoreCase("")) {
BASE_DN = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.DOMINIO_AD, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_SUBDOMINIO, " ").trim().equalsIgnoreCase("")) {
SUB_DOMINIO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_SUBDOMINIO, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_FILTRO, " ").trim().equalsIgnoreCase("")) {
LDAP_FILTRO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_FILTRO, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_ATRIBUTO, " ").trim().equalsIgnoreCase("")) {
LDAP_ATRIBUTO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.LDAP_ATRIBUTO, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.ID_PERFIL_ACESSO_DEFAULT, " ").trim().equalsIgnoreCase("")) {
ID_PERFIL_ACESSO_DEFAULT = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.ID_PERFIL_ACESSO_DEFAULT, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.ID_GRUPO_PADRAO_LDAP, " ").trim().equalsIgnoreCase("")) {
GRUPOPADRAO = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.ID_GRUPO_PADRAO_LDAP, " ").trim();
}
if (!ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.NUMERO_COLABORADORES_CONSULTA_AD, " ").trim().equalsIgnoreCase("")) {
NUMERO_COLABORADORES_CONSULTA_AD = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.NUMERO_COLABORADORES_CONSULTA_AD, " ").trim();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static ADUserDTO autenticacaoAD(String login, String password) throws Exception {
inicializaDados();
ADUserDTO adUserAux = null;
NamingEnumeration results = null;
NamingEnumeration cursor = null;
Collection<ServidorContextoDTO> listContexto = null;
SearchControls search = null;
SearchControls searchUser = null;
String filtro = null;
boolean usuarioAutenticado = false;
listContexto = createLdapConnection();
for (ServidorContextoDTO dirContext : listContexto) {
if (dirContext != null && dirContext.isAtivo()) {
search = new SearchControls();
search.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchUser = new SearchControls();
searchUser.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] atributosParaRetornar = new String[1];
/**
* Realiza a Valida��o Caso o parametro openLDAP esteja ativo
* sambaNTPassword - Atributo de Senha configurada para o openLDAP
* distinguishedName - (Default) Atributo de senha padr�o
*/
String parametroOpenLdap = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_OPEN_LDAP, "N");
if (parametroOpenLdap.equals("S")) {
atributosParaRetornar[0] = "uid";
} else {
atributosParaRetornar[0] = "distinguishedName";
}
searchUser.setReturningAttributes(atributosParaRetornar);
String[] atributosRetorno = getADFieldList();
search.setReturningAttributes(atributosRetorno);
/**
* uid - Referencia ao CPF
* sAMAccountName - (Default) Login do usuario
*/
if (parametroOpenLdap.equals("S")) {
filtro = "(&(uid=" + login + "))";
} else {
filtro = "(&(sAMAccountName=" + login + "))";
}
try {
String subDominioValido ="";
cursor = dirContext.getDirContext().search(dirContext.getBaseDominio(), filtro, searchUser);
if (cursor.hasMoreElements()) {
SearchResult result = (SearchResult) cursor.nextElement();
Attributes att = result.getAttributes();
String dn = "";
/**
* sambaNTPassword - Atributo de Senha configurada para o openLDAP distinguishedName - (Default) Atributo de senha padr�o
*/
if (parametroOpenLdap.equals("S")) {
dn = (String) att.get("uid").get();
if(dirContext.getSubDominio() != null){
String[] subDomino = dirContext.getSubDominio().split(";");
for(int i = 0 ;i < subDomino.length;i++){
if(validateUser("uid=" + dn + "," + subDomino[i]+","+dirContext.getBaseDominio(), password)){
subDominioValido = subDomino[i];
usuarioAutenticado = true;
break;
}
}
}else{
usuarioAutenticado = validateUser("uid=" + dn + "," + dirContext.getBaseDominio(), password);
}
} else {
dn = (String) att.get("distinguishedName").get();
usuarioAutenticado = validateUser(dn, password);
}
}
if (usuarioAutenticado) {
if(subDominioValido!=""){
results = dirContext.getDirContext().search(subDominioValido+","+dirContext.getBaseDominio(), filtro, search);
}else{
results = dirContext.getDirContext().search(dirContext.getBaseDominio(), filtro, search);
}
if (results != null && results.hasMoreElements()) {
while (results != null && results.hasMoreElements()) {
adUserAux = new ADUserDTO();
System.out.println("------------- IN�CIO --------------");
String retorno = null;
SearchResult searchResult = (SearchResult) results.next();
for (int i = 0; i < atributosRetorno.length; i++) {
if (searchResult.getAttributes().get(atributosRetorno[i]) != null) {
retorno = nullToNaoDisponivel(searchResult.getAttributes().get(atributosRetorno[i]).toString());
setPropertyToAdUserDTO(adUserAux, atributosRetorno[i], retorno.split(":")[1]);
}
}
System.out.println(adUserAux.getUserPrincipalName() + " - " + adUserAux.getsAMAccountName());
System.out.println("------------- FIM --------------");
}
adUserAux.setIdGrupo(dirContext.getGrupoPadrao());
adUserAux.setLdapAtributo(dirContext.getLdpaAtributo());
break;
}
}
} catch (NamingException e) {
System.out.println(MSG_ERROR_LDAP_CONNECTION);
e.printStackTrace();
}
}
}
return adUserAux;
}
/**
* Sincroniza todos os usu�rios do AD com o CITSMart
*
* @return <code>ArrayList<ADUserDTO></code>
* @author Vadoilo Damasceno
* @throws Exception
*/
public static synchronized Collection<ADUserDTO> sincronizaUsuariosAD() throws Exception {
UsuarioService usuarioService;
ArrayList<ADUserDTO> listaUsuariosAD = new ArrayList<ADUserDTO>();
inicializaDados();
ADUserDTO adUserAux = null;
NamingEnumeration results = null;
SearchControls searchControls = null;
String filtro = null;
for (ServidorContextoDTO context : dadosConexao()) {
LdapContext ldapContexto = context.getLdapContext();
String var = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_OPEN_LDAP, "N");
if (ldapContexto != null) {
searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
try {
System.out.println(" \n \n LDAP - ROTINA DE SINCRONIZA��O COM AD INICIADA \n \n");
String numColaboradoresPorPag;
Integer pageSize = new Integer(4000);
if (context.getNumeroColaboradores() != null && !context.getNumeroColaboradores().equals("")) {
numColaboradoresPorPag = context.getNumeroColaboradores();
}else{
numColaboradoresPorPag = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.NUMERO_COLABORADORES_CONSULTA_AD, "4000").trim();
}
if (numColaboradoresPorPag != null && !StringUtils.isEmpty(numColaboradoresPorPag)) {
pageSize = Integer.parseInt(numColaboradoresPorPag.trim());
}
byte[] cookie = null;
int contador = 0;
int total;
int numPagina = 0;
String[] atributosRetorno = getADFieldList();
searchControls.setReturningAttributes(atributosRetorno);
//filtro caso venha pelo context ele pega esse valor, sen�o pega o valor padr�o do parametro;
if (context.getLdpaFiltro() != null && context.getLdpaFiltro().equals("")) {
filtro = context.getLdpaFiltro();
}else{
filtro = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_FILTRO, "(&(objectCategory=person)(objectClass=user))");
}
if(filtro.indexOf(";") > 0) {
filtro = context.getLdpaFiltro().split(";")[0];
}
usuarioService = (UsuarioService) ServiceLocator.getInstance().getService(UsuarioService.class, null);
if(var.equals("S")) {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, Control.NONCRITICAL) });
} else {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, Control.CRITICAL) });
}
do {
numPagina++;
results = ldapContexto.search(context.getBaseDominio(), filtro, searchControls);
System.out.println(" \n \n LDAP - P�GINA " + numPagina + " - INICIADA \n \n");
while (results != null && results.hasMoreElements()) {
contador++;
adUserAux = new ADUserDTO();
System.out.println("---------------------------------------");
String retorno = null;
SearchResult searchResult = (SearchResult) results.next();
for (int i = 0; i < atributosRetorno.length; i++) {
if (searchResult.getAttributes().get(atributosRetorno[i]) != null) {
retorno = nullToNaoDisponivel(searchResult.getAttributes().get(atributosRetorno[i]).toString());
setPropertyToAdUserDTO(adUserAux, atributosRetorno[i], retorno.split(":")[1]);
}
}
System.out.println(contador + " - " + adUserAux.getsAMAccountName() + " - " + adUserAux.getUserPrincipalName());
System.out.println("---------------------------------------");
listaUsuariosAD.add(adUserAux);
adUserAux.setLdapAtributo(context.getLdpaAtributo());
adUserAux.setIdGrupo(context.getGrupoPadrao());
usuarioService.sincronizaUsuarioAD(adUserAux, 0);
}
// Examine the paged results control response
Control[] controls = ldapContexto.getResponseControls();
if (controls != null) {
for (int i = 0; i < controls.length; i++) {
if (controls[i] instanceof PagedResultsResponseControl) {
PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
total = prrc.getResultSize();
cookie = prrc.getCookie();
} else {
// Handle other response controls (if any)
}
}
}
// Re-activate paged results]
if(var.equals("S")) {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, cookie, Control.NONCRITICAL) });
} else {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
}
} while (cookie != null);
System.out.println("LDAP - ROTINA DE SINCRONIZA��O COM AD FINALIZADA.");
System.out.println("LDAP - TOTAL DE REGISTROS RECUPERADOS = " + contador);
} catch (AuthenticationException ex) {
String[] erro = ex.toString().split(":");
String[] e = erro[erro.length - 1].split(",");
if (e[1].compareTo(" data 525") == 0) {
System.out.println("Usuario invalido");
} else if (e[1].compareTo(" data 52e") == 0) {
System.out.println("Senha invalida");
}
} catch (SizeLimitExceededException sizeLimit) {
System.out.println("Limite excedeu...");
sizeLimit.printStackTrace();
} catch (NamingException ex) {
ex.printStackTrace();
System.out.println("NamingException is: " + ex);
} catch (IOException ie) {
System.err.println("LDAP - IOException ");
ie.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ldapContexto.close();
ldapContexto = null;
} catch (NamingException e) {
System.out.println("LDAP - NamingException - n�o foi poss�vel fechar ldapContexto.");
e.printStackTrace();
}
}
}
}
return listaUsuariosAD;
}
/**
* Consulta empregado a partir da Tela de Solicita��o Servi�o. Pesquisa � realizada pelo Login do Usu�rio.
*
* @param login
* @param idGrupoSolicitante
* @return ADUserDTO
* @throws Exception
*/
public static ArrayList<ADUserDTO> consultaEmpregado(String login, Integer idGrupoSolicitante) throws Exception {
UsuarioService usuarioService;
inicializaDados();
ADUserDTO adUserAux = null;
NamingEnumeration results = null;
NamingEnumeration cursor = null;
String flag = null;
Hashtable active = new Hashtable();
// DirContext contexto = null;
Collection<ServidorContextoDTO> listContexto = null;
SearchControls search = null;
SearchControls searchUser = null;
ArrayList<ADUserDTO> listaUsuariosAD = new ArrayList<ADUserDTO>();
String filtro = null;
boolean usuarioAutenticado = false;
listContexto = createLdapConnection();
for (ServidorContextoDTO dirContext : listContexto) {
String var = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_OPEN_LDAP, "N");
if (dirContext != null) {
search = new SearchControls();
search.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchUser = new SearchControls();
searchUser.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] atributosParaRetornar = new String[1];
if(var.equals("S")) {
atributosParaRetornar[0] = "uid";
} else {
atributosParaRetornar[0] = "distinguishedName";
}
searchUser.setReturningAttributes(atributosParaRetornar);
String[] atributosRetorno = getADFieldList();
search.setReturningAttributes(atributosRetorno);
if(var.equals("S")) {
filtro = "(&(uid=" + login + "))";
} else {
filtro = "(&(sAMAccountName=" + login + "))";
}
try {
usuarioService = (UsuarioService) ServiceLocator.getInstance().getService(UsuarioService.class, null);
results = dirContext.getDirContext().search(dirContext.getBaseDominio(), filtro, search);
if (results != null && results.hasMoreElements()) {
while (results != null && results.hasMoreElements()) {
adUserAux = new ADUserDTO();
System.out.println("------------- IN�CIO --------------");
String retorno = null;
SearchResult searchResult = (SearchResult) results.next();
for (int i = 0; i < atributosRetorno.length; i++) {
if (searchResult.getAttributes().get(atributosRetorno[i]) != null) {
retorno = nullToNaoDisponivel(searchResult.getAttributes().get(atributosRetorno[i]).toString());
setPropertyToAdUserDTO(adUserAux, atributosRetorno[i], retorno.split(":")[1]);
}
}
System.out.println(adUserAux.getUserPrincipalName() + " - " + adUserAux.getsAMAccountName());
System.out.println("------------- FIM --------------");
usuarioService.sincronizaUsuarioAD(adUserAux, idGrupoSolicitante);
listaUsuariosAD.add(adUserAux);
}
}
} catch (AuthenticationException ex) {
String[] erro = ex.toString().split(":");
String[] e = erro[erro.length - 1].split(",");
if (e[1].compareTo(" data 525") == 0) {
flag = "Usuario invalido";
} else if (e[1].compareTo(" data 52e") == 0) {
flag = "Sennha invalida";
}
} catch (NamingException ex) {
System.out.println("NamingException is: " + ex);
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(flag);
}
}
}
return listaUsuariosAD;
}
private static void setPropertyToAdUserDTO(ADUserDTO adUserObject, String name, String value) throws Exception {
String var = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_OPEN_LDAP, "N");
if (name.equalsIgnoreCase("CN")) {
adUserObject.setCN(value);
if(var.equals("S")) {
adUserObject.setUserPrincipalName(value);
}
return;
}
if (name.equalsIgnoreCase("description")) {
adUserObject.setDescription(value);
return;
}
if (name.equalsIgnoreCase("displayName")) {
adUserObject.setDisplayName(value);
return;
}
if (name.equalsIgnoreCase("DN")) {
adUserObject.setDN(value);
return;
}
if (name.equalsIgnoreCase("givenName")) {
adUserObject.setGivenName(value);
return;
}
if (name.equalsIgnoreCase("homeDrive")) {
adUserObject.setHomeDrive(value);
return;
}
if (name.equalsIgnoreCase("name")) {
adUserObject.setName(value);
return;
}
if (name.equalsIgnoreCase("objectCategory")) {
adUserObject.setObjectCategory(value);
return;
}
if (name.equalsIgnoreCase("objectClass")) {
adUserObject.setObjectClass(value);
return;
}
if (name.equalsIgnoreCase("physicalDeliveryOfficeName")) {
adUserObject.setPhysicalDeliveryOfficeName(value);
return;
}
if (name.equalsIgnoreCase("profilePath")) {
adUserObject.setProfilePath(value);
return;
}
if (name.equalsIgnoreCase("uid") && var.equals("S")) {
adUserObject.setsAMAccountName(value);
return;
} else if (name.equalsIgnoreCase("sAMAccountName")) {
adUserObject.setsAMAccountName(value);
return;
}
if (name.equalsIgnoreCase("SN")) {
adUserObject.setSN(value);
return;
}
if (name.equalsIgnoreCase("userAccountControl")) {
adUserObject.setUserAccountControl(value);
return;
}
if (name.equalsIgnoreCase("userPrincipalName")) {
adUserObject.setUserPrincipalName(value);
return;
}
if (name.equalsIgnoreCase("homeMDB")) {
adUserObject.setHomeMDB(value);
return;
}
if (name.equalsIgnoreCase("legacyExchangeDN")) {
adUserObject.setLegacyExchangeDN(value);
return;
}
if (name.equalsIgnoreCase("mail")) {
adUserObject.setMail(value);
return;
}
if (name.equalsIgnoreCase("mAPIRecipient")) {
adUserObject.setmAPIRecipient(value);
return;
}
if (name.equalsIgnoreCase("mailNickname")) {
adUserObject.setMailNickname(value);
return;
}
if (name.equalsIgnoreCase("c")) {
adUserObject.setC(value);
return;
}
if (name.equalsIgnoreCase("company")) {
adUserObject.setCompany(value);
return;
}
if (name.equalsIgnoreCase("department")) {
adUserObject.setDepartment(value);
return;
}
if (name.equalsIgnoreCase("homephone")) {
adUserObject.setHomephone(value);
return;
}
if (name.equalsIgnoreCase("l")) {
adUserObject.setL(value);
return;
}
if (name.equalsIgnoreCase("location")) {
adUserObject.setLocation(value);
return;
}
if (name.equalsIgnoreCase("manager")) {
adUserObject.setManager(value);
return;
}
if (name.equalsIgnoreCase("mobile")) {
adUserObject.setMobile(value);
return;
}
if (name.equalsIgnoreCase("OU")) {
adUserObject.setOU(value);
return;
}
if (name.equalsIgnoreCase("postalCode")) {
adUserObject.setPostalCode(value);
return;
}
if (name.equalsIgnoreCase("st")) {
adUserObject.setSt(value);
return;
}
if (name.equalsIgnoreCase("streetAddress")) {
adUserObject.setStreetAddress(value);
return;
}
if (name.equalsIgnoreCase("telephoneNumber")) {
adUserObject.setTelephoneNumber(value);
return;
}
}
public static String[] getADFieldList() {
String[] fields = { "CN", "description", "displayName", "DN", "givenName", "homeDrive", "name", "objectCategory", "objectClass", "physicalDeliveryOfficeName", "profilePath", "sAMAccountName", "SN",
"userAccountControl", "userPrincipalName", "homeMDB", "legacyExchangeDN", "mail", "mAPIRecipient", "mailNickname", "c", "company", "department", "homephone", "l", "location", "manager", "mobile", "OU",
"postalCode", "st", "streetAddress", "telephoneNumber", "uid" };
return fields;
}
public static String nullToNaoDisponivel(String value) {
return value == null ? "N�o dispon�vel" : value;
}
private static Collection<ServidorContextoDTO> createLdapConnection() {
DirContext contexto = null;
Hashtable env = new Hashtable();
Collection<DirContext> ctx = new ArrayList<DirContext>();
ServidorContextoDTO servidorContextoDTO = null;
Collection<ServidorContextoDTO> listServidor = new ArrayList<ServidorContextoDTO>();
// Especifica INITIAL CONTEXT
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CTX);
String[] servidor = SERVIDOR.trim().split(";");
String[] admin_dn = ADMIN_DN.trim().split(";");
String[] admin_pw = ADMIN_PW.trim().split(";");
String[] ldap_filtro = null;
String[] ldap_atributo = null;
String[] grupo_padrao = null;
String[] perfil_acesso = null;
String[] numero_colaboradores = null;
String[] base_dominio = null;
String[] sub_pastaDominio = null;
if (!LDAP_FILTRO.equals("")) {
ldap_filtro = LDAP_FILTRO.trim().split(";");
}
if (!LDAP_ATRIBUTO.equals("")) {
ldap_atributo = LDAP_ATRIBUTO.trim().split(";");
}
if (!GRUPOPADRAO.equals("")) {
grupo_padrao = GRUPOPADRAO .trim().split(";");
}
if (!ID_PERFIL_ACESSO_DEFAULT.equals("")) {
perfil_acesso = ID_PERFIL_ACESSO_DEFAULT.trim().split(";");
}
if (!NUMERO_COLABORADORES_CONSULTA_AD.equals("")) {
numero_colaboradores = NUMERO_COLABORADORES_CONSULTA_AD .trim().split(";");
}
if (!BASE_DN.equals("")) {
base_dominio = BASE_DN.trim().split(";");
}
if (!SUB_DOMINIO.equals("")) {
sub_pastaDominio = SUB_DOMINIO.trim().split("&");
}
for (int i = 0; i < servidor.length; i++) {
servidorContextoDTO = new ServidorContextoDTO();
// Especifica o IP/Nome e a porta do servidor LDAP
env.put(Context.PROVIDER_URL, servidor[i]);
// Usu�rio ADMIN0
env.put(Context.SECURITY_PRINCIPAL, admin_dn[i]);
// Senha ADMIN
env.put(Context.SECURITY_CREDENTIALS, admin_pw[i]);
// Tipo de Conex�o
env.put(Context.SECURITY_AUTHENTICATION, CONNECTION_TYPE);
// Cria um Initial Context
try {
contexto = new InitialDirContext(env);
if (contexto != null) {
servidorContextoDTO.setDirContext(contexto);
servidorContextoDTO.setServidor(servidor[i]);
if (grupo_padrao != null && grupo_padrao.length != 0) {
servidorContextoDTO.setGrupoPadrao(grupo_padrao[i]);
}
if (ldap_atributo != null && ldap_atributo.length != 0) {
servidorContextoDTO.setLdpaAtributo(ldap_atributo[i]);
}
if (ldap_filtro != null && ldap_filtro.length != 0) {
servidorContextoDTO.setLdpaFiltro(ldap_filtro[i]);
}
if (numero_colaboradores != null && numero_colaboradores.length != 0) {
servidorContextoDTO.setNumeroColaboradores(numero_colaboradores[i]);
}
if (perfil_acesso != null && perfil_acesso.length != 0) {
servidorContextoDTO.setPerfilAcesso(perfil_acesso[i]);
}
if (base_dominio != null && base_dominio.length != 0) {
servidorContextoDTO.setBaseDominio(base_dominio[i]);
}
if (sub_pastaDominio != null && sub_pastaDominio.length != 0) {
servidorContextoDTO.setSubDominio(sub_pastaDominio[i]);
}
servidorContextoDTO.setAtivo(true);
listServidor.add(servidorContextoDTO);
}
//contexto.close();
} catch (NamingException e) {
servidorContextoDTO.setDirContext(contexto);
servidorContextoDTO.setServidor(servidor[i]);
servidorContextoDTO.setAtivo(false);
listServidor.add(servidorContextoDTO);
System.out.println(MSG_ERROR_LDAP_CONNECTION);
e.printStackTrace();
}
}
return listServidor;
}
private static boolean validateUser(String dn, String senha) {
DirContext ldapCtx = null;
boolean bResult = false;
Hashtable env = new Hashtable();
String[] servidor = SERVIDOR.trim().split(";");
for (int i = 0; i < servidor.length; i++) {
// Especifica INITIAL CONTEXT
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CTX);
// Especifica o IP/Nome e a porta do servidor LDAP
env.put(Context.PROVIDER_URL, servidor[i]);
// Ldap Distingued Name
env.put(Context.SECURITY_PRINCIPAL, dn);
// Senha Usu�rio
env.put(Context.SECURITY_CREDENTIALS, senha);
// Tipo de Conex�o
env.put(Context.SECURITY_AUTHENTICATION, CONNECTION_TYPE);
try {
// Cria um Initial Context
ldapCtx = new InitialDirContext(env);
} catch (AuthenticationException auEx) {
/**
* A forma como esta rotina est� implementada faz com que o sistema tente autenticar o usu�rio para cada subdom�nio, at� o final da lista. Para cada subdom�nio, portanto, � exibida
* essa mensagem, caso o usu�rio n�o consiga autentica��o. Para evitar a polui��o do LOG esta mensagem foi comentada. valdoilo.damasceno
*/
//System.out.println(MSG_ERROR_LDAP_VALIDATION_USER + "[LDAP: error code 49 - Invalid Credentials]");
//auEx.printStackTrace();
} catch (NamingException ne) {
System.out.println(MSG_ERROR_LDAP_CONNECTION);
ne.printStackTrace();
} finally {
if (ldapCtx != null) {
bResult = true;
try {
ldapCtx.close();
} catch (NamingException e) {
e.printStackTrace();
}
break;
}
}
}
return bResult;
}
/**
* Testa conex�o com LDAP.
*
* @return boolean
* @author valdoilo.damasceno
* @throws Exception
*/
public static Collection<ADUserDTO> testarConexao() throws Exception {
UsuarioService usuarioService;
inicializaDados();
ADUserDTO adUserAux = null;
NamingEnumeration results = null;
Collection<ADUserDTO> listAdUserAux = new ArrayList<ADUserDTO>();
Hashtable active = new Hashtable();
SearchControls searchControls = null;
String filtro = null;
boolean usuarioAutenticado = false;
for (ServidorContextoDTO context : dadosConexao()) {
adUserAux = new ADUserDTO();
LdapContext ldapContexto = context.getLdapContext();
ArrayList<ADUserDTO> listaUsuariosAD = new ArrayList<ADUserDTO>();
String var = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_OPEN_LDAP, "N");
if (ldapContexto != null) {
searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
try {
Integer pageSize = new Integer(1);
byte[] cookie = null;
int contador = 0;
int total;
int numPagina = 0;
String[] atributosRetorno = getADFieldList();
searchControls.setReturningAttributes(atributosRetorno);
//filtro caso venha pelo context ele pega esse valor, sen�o pega o valor padr�o do parametro;
if (context.getLdpaFiltro() != null && !context.getLdpaFiltro().equalsIgnoreCase("")) {
filtro = context.getLdpaFiltro();
}else{
filtro = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.LDAP_FILTRO, "(&(objectCategory=person)(objectClass=user))");
}
usuarioService = (UsuarioService) ServiceLocator.getInstance().getService(UsuarioService.class, null);
if(var.equals("S")) {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, Control.NONCRITICAL) });
} else {
ldapContexto.setRequestControls(new Control[] { new PagedResultsControl(pageSize, Control.CRITICAL) });
}
numPagina++;
results = ldapContexto.search(context.getBaseDominio(), filtro, searchControls);
while (results != null && results.hasMoreElements() && contador < 1) {
contador++;
String retorno = null;
SearchResult searchResult = (SearchResult) results.next();
for (int i = 0; i < atributosRetorno.length; i++) {
if (searchResult.getAttributes().get(atributosRetorno[i]) != null) {
retorno = nullToNaoDisponivel(searchResult.getAttributes().get(atributosRetorno[i]).toString());
setPropertyToAdUserDTO(adUserAux, atributosRetorno[i], retorno.split(":")[1]);
}
}
}
} catch (AuthenticationException ex) {
String[] erro = ex.toString().split(":");
String[] e = erro[erro.length - 1].split(",");
if (e[1].compareTo(" data 525") == 0) {
System.out.println("Usuario invalido");
} else if (e[1].compareTo(" data 52e") == 0) {
System.out.println("Senha invalida");
}
} catch (SizeLimitExceededException sizeLimit) {
System.out.println("Limite excedeu...");
sizeLimit.printStackTrace();
} catch (NamingException ex) {
ex.printStackTrace();
System.out.println("NamingException is: " + ex);
} catch (IOException ie) {
System.err.println("LDAP - IOException ");
ie.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ldapContexto.close();
ldapContexto = null;
adUserAux.setAtivo(true);
adUserAux.setServer(context.getServidor());
listAdUserAux.add(adUserAux);
} catch (NamingException e) {
System.out.println("LDAP - NamingException - n�o foi poss�vel fechar ldapContexto.");
e.printStackTrace();
}
}
}else{
adUserAux.setAtivo(false);
adUserAux.setServer(context.getServidor());
listAdUserAux.add(adUserAux);
}
}
return listAdUserAux;//olhar
}
private static Collection<ServidorContextoDTO> dadosConexao() throws Exception {
Collection<DirContext> dirContext = new ArrayList<DirContext>();
Collection<ServidorContextoDTO> listServidor = new ArrayList<ServidorContextoDTO>();
Hashtable env = new Hashtable();
LdapContext contexto = null;
String[] servidor = SERVIDOR.trim().split(";");
String[] admin_dn = ADMIN_DN.trim().split(";");
String[] admin_pw = ADMIN_PW.trim().split(";");
String[] ldap_filtro = null;
String[] ldap_atributo = null;
String[] grupo_padrao = null;
String[] perfil_acesso = null;
String[] numero_colaboradores = null;
String[] base_dominio = null;
if (!LDAP_FILTRO.equals("")) {
ldap_filtro = LDAP_FILTRO.trim().split(";");
}
if (!LDAP_ATRIBUTO.equals("")) {
ldap_atributo = LDAP_ATRIBUTO.trim().split(";");
}
if (!GRUPOPADRAO.equals("")) {
grupo_padrao = GRUPOPADRAO .trim().split(";");
}
if (!ID_PERFIL_ACESSO_DEFAULT.equals("")) {
perfil_acesso = ID_PERFIL_ACESSO_DEFAULT.trim().split(";");
}
if (!NUMERO_COLABORADORES_CONSULTA_AD.equals("")) {
numero_colaboradores = NUMERO_COLABORADORES_CONSULTA_AD .trim().split(";");
}
if (!BASE_DN.equals("")) {
base_dominio = BASE_DN.trim().split(";");
}
for (int i = 0; i < servidor.length; i++) {
ServidorContextoDTO servidorContextoDTO = new ServidorContextoDTO();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CTX);
env.put(Context.PROVIDER_URL, servidor[i]);
env.put(Context.SECURITY_PRINCIPAL, admin_dn[i]);
env.put(Context.SECURITY_CREDENTIALS, admin_pw[i]);
env.put(Context.SECURITY_AUTHENTICATION, CONNECTION_TYPE);
try {
servidorContextoDTO.setServidor(servidor[i]);
contexto = new InitialLdapContext(env, null);
if (contexto != null) {
servidorContextoDTO.setLdapContext(contexto);
if (grupo_padrao != null && grupo_padrao.length != 0) {
servidorContextoDTO.setGrupoPadrao(grupo_padrao[i]);
}
if (ldap_atributo != null && ldap_atributo.length != 0) {
servidorContextoDTO.setLdpaAtributo(ldap_atributo[i]);
}
if (ldap_filtro != null && ldap_filtro.length != 0) {
servidorContextoDTO.setLdpaFiltro(ldap_filtro[i]);
}
if (numero_colaboradores != null && numero_colaboradores.length != 0) {
servidorContextoDTO.setNumeroColaboradores(numero_colaboradores[i]);
}
if (perfil_acesso != null && perfil_acesso.length != 0) {
servidorContextoDTO.setPerfilAcesso(perfil_acesso[i]);
}
if (base_dominio != null && base_dominio.length != 0) {
servidorContextoDTO.setBaseDominio(base_dominio[i]);
}
servidorContextoDTO.setAtivo(true);
listServidor.add(servidorContextoDTO);
}
//contexto.close();
} catch (NamingException e) {
servidorContextoDTO.setAtivo(false);
listServidor.add(servidorContextoDTO);
System.out.println(MSG_ERROR_LDAP_CONNECTION);
e.printStackTrace();
}
}
return listServidor;
}
}