/*
* oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text.
*
* Copyright (c) 2014, Gluu
*/
package org.xdi.oxauth.util;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.unboundid.ldap.sdk.DN;
import com.unboundid.ldap.sdk.Filter;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.RDN;
/**
* LDAP Utilities.
*
* @author Yuriy Zabrovarnyy
* @version 0.9, 26/07/2012
*/
public class LdapUtils {
private final static Logger log = LoggerFactory.getLogger(LdapUtils.class);
/**
* Avoid initialization
*/
private LdapUtils() {
}
public static boolean isDN(String p_dn) {
return DN.isValidDN(p_dn);
}
public static boolean isValidDNs(String... p_dnList) {
return isValidDNs(p_dnList != null ? Arrays.asList(p_dnList) : null);
}
public static boolean isValidDNs(List<String> p_dnList) {
if (p_dnList != null) {
for (String dn : p_dnList) {
if (!isDN(dn)) {
return false;
}
}
}
return true;
}
/**
* Creates any filter to load all objects represented by this dn list.
*
* @param p_filterAttributeName filter attribute name
* @param p_dnList dn list
* @return filter
*/
public static Filter createAnyFilterFromDnList(String p_filterAttributeName, List<String> p_dnList) {
try {
if (p_dnList != null && !p_dnList.isEmpty()) {
final StringBuilder sb = new StringBuilder("(|");
for (String dn : p_dnList) {
final DN dnObj = new DN(dn);
final RDN rdn = dnObj.getRDN();
if (rdn.getAttributeNames()[0].equals(p_filterAttributeName)) {
final String[] values = rdn.getAttributeValues();
if (values != null && values.length == 1) {
sb.append("(");
sb.append(p_filterAttributeName).append("=");
sb.append(values[0]);
sb.append(")");
}
}
}
sb.append(")");
final String filterAsString = sb.toString();
log.trace("dnList: " + p_dnList + ", ldapFilter: " + filterAsString);
return Filter.create(filterAsString);
}
} catch (LDAPException e) {
log.trace(e.getMessage(), e);
}
return null;
}
}