use of net.sourceforge.myvd.types.FilterNode in project OpenUnison by TremoloSecurity.
the class OktaInsert method cleanFilter.
private boolean cleanFilter(FilterNode root) {
FilterType op;
// filter.append('(');
String comp = null;
ArrayList<FilterNode> children;
Iterator<FilterNode> filterIt;
String attribName = null;
boolean isFirst = true;
op = root.getType();
switch(op) {
case AND:
case OR:
ArrayList<FilterNode> toRemove = new ArrayList<FilterNode>();
children = root.getChildren();
for (FilterNode node : children) {
if (!cleanFilter(node)) {
toRemove.add(node);
}
}
if (!toRemove.isEmpty()) {
children.removeAll(toRemove);
}
return !children.isEmpty();
case NOT:
return cleanFilter(root.getNot());
case EQUALS:
{
if (root.getName().equalsIgnoreCase("objectclass")) {
return false;
}
break;
}
case PRESENCE:
// presence search seems broken in okta,skip it
return false;
}
return true;
}
use of net.sourceforge.myvd.types.FilterNode in project OpenUnison by TremoloSecurity.
the class OktaInsert method stringFilter.
private String stringFilter(FilterNode root, StringBuffer filter) {
FilterType op;
// filter.append('(');
String comp = null;
ArrayList<FilterNode> children;
Iterator<FilterNode> filterIt;
String attribName = null;
boolean isFirst = true;
op = root.getType();
switch(op) {
case AND:
HashMap<String, ArrayList<FilterNode>> attribs = new HashMap<String, ArrayList<FilterNode>>();
// first sort the nodes into "buckets"
children = root.getChildren();
filterIt = children.iterator();
while (filterIt.hasNext()) {
FilterNode node = filterIt.next();
if (node.getType() == FilterType.AND) {
ArrayList<FilterNode> ands = attribs.get("&");
if (ands == null) {
ands = new ArrayList<FilterNode>();
attribs.put("&", ands);
}
ands.add(node);
} else if (node.getType() == FilterType.OR) {
ArrayList<FilterNode> ors = attribs.get("|");
if (ors == null) {
ors = new ArrayList<FilterNode>();
attribs.put("|", ors);
}
ors.add(node);
} else if (node.getType() == FilterType.NOT) {
ArrayList<FilterNode> nots = attribs.get("!");
if (nots == null) {
nots = new ArrayList<FilterNode>();
attribs.put("!", nots);
}
nots.add(node);
} else {
ArrayList<FilterNode> attribNodes = attribs.get(node.getName());
if (attribNodes == null) {
attribNodes = new ArrayList<FilterNode>();
attribs.put(node.getName(), attribNodes);
}
attribNodes.add(node);
}
}
filter.append(" ( ");
Iterator<String> itBuckets = attribs.keySet().iterator();
while (itBuckets.hasNext()) {
String attrib = itBuckets.next();
ArrayList<FilterNode> nodes = attribs.get(attrib);
if (attrib.equals("&")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter);
if (itNodes.hasNext()) {
filter.append(" and ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" and ");
}
} else if (attrib.equals("|")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter);
if (itNodes.hasNext()) {
filter.append(" and ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" and ");
}
} else if (attrib.equals("!")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter);
if (itNodes.hasNext()) {
filter.append(" and ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" and ");
}
} else {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter);
if (itNodes.hasNext()) {
filter.append(" or ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" and ");
}
}
}
filter.append(" ) ");
break;
case OR:
filter.append(" ( ");
children = root.getChildren();
filterIt = children.iterator();
while (filterIt.hasNext()) {
stringFilter(filterIt.next(), filter);
if (filterIt.hasNext()) {
filter.append(" or ");
}
}
filter.append(" ) ");
break;
case NOT:
filter.append(" NOT ( ");
stringFilter(root.getNot(), filter);
filter.append(" ) ");
break;
case EQUALS:
{
if (root.getName().equalsIgnoreCase("objectclass")) {
filter.append(" profile.displayName pr ");
} else {
attribName = root.getName();
if (attribName == null) {
filter.append(" 1 = 0 ");
} else {
filter.append("profile.").append(attribName).append(" eq \"").append(root.getValue()).append("\" ");
}
}
break;
}
case GREATER_THEN:
{
attribName = root.getName();
filter.append("profile.").append(attribName).append(" gt \"").append(root.getValue()).append("\" ");
break;
}
case LESS_THEN:
{
attribName = root.getName();
filter.append("profile.").append(attribName).append(" lt \"").append(root.getValue()).append("\" ");
break;
}
case PRESENCE:
if (root.getName().equalsIgnoreCase("objectclass")) {
filter.append(" 1=1 ");
} else {
filter.append("profile.").append(attribName).append(" pr ");
}
break;
/*case APPROX_MATCH:
filter.append((String)itr.next());
filter.append("~=");
byte[] value = (byte[])itr.next();
filter.append(byteString(value));
if (comp != null && itr.hasNext()) {
filter.append(comp);
}
break;
case LDAPSearchRequest.EXTENSIBLE_MATCH:
String oid = (String)itr.next();
filter.append((String)itr.next());
filter.append(':');
filter.append(oid);
filter.append(":=");
filter.append((String)itr.next());
if (comp != null && itr.hasNext()) {
filter.append(comp);
}
break;*/
case SUBSTR:
{
attribName = root.getName();
filter.append(attribName);
filter.append(" LIKE '");
boolean noStarLast = false;
filter.append(root.getValue().replace('*', '%')).append('\'');
break;
}
}
if (comp != null) {
filter.append(')');
}
return attribName;
}
use of net.sourceforge.myvd.types.FilterNode in project OpenUnison by TremoloSecurity.
the class AmazonDynamoDB method addBaseToFilter.
private Filter addBaseToFilter(DistinguishedName base, Filter filter) {
String rdnName, rdnVal;
RDN rdn = (RDN) base.getDN().getRDNs().get(0);
rdnName = rdn.getType();
rdnVal = rdn.getValue();
ArrayList<FilterNode> ands = new ArrayList<FilterNode>();
ands.add(new FilterNode(FilterType.EQUALS, rdnName, rdnVal));
try {
ands.add((FilterNode) filter.getRoot().clone());
} catch (CloneNotSupportedException e) {
}
FilterNode newroot = new FilterNode(FilterType.AND, ands);
filter = new Filter(newroot);
return filter;
}
use of net.sourceforge.myvd.types.FilterNode in project OpenUnison by TremoloSecurity.
the class AmazonDynamoDB method search.
@Override
public void search(SearchInterceptorChain chain, DistinguishedName base, Int scope, Filter filter, ArrayList<Attribute> attributes, Bool typesOnly, Results results, LDAPSearchConstraints constraints) throws LDAPException {
boolean addBase = false;
boolean addUser = false;
boolean addGroups = false;
boolean searchUsers = false;
boolean searchGroups = false;
Filter filterToUser = null;
Iterator<Item> userResults = null;
Iterator<Item> groupResults = null;
try {
filterToUser = new Filter((FilterNode) filter.getRoot().clone());
} catch (CloneNotSupportedException e) {
}
if (scope.getValue() == 0) {
if (base.getDN().equals(this.baseDN)) {
addBase = true;
} else if (base.getDN().equals(this.userDN)) {
addUser = true;
} else if (base.getDN().equals(this.groupDN)) {
addGroups = true;
} else if (base.getDN().toString().endsWith(this.userDN.toString())) {
searchUsers = true;
filterToUser = this.addBaseToFilter(base, filterToUser);
} else if (base.getDN().toString().endsWith(this.groupDN.toString())) {
searchGroups = true;
filterToUser = this.addBaseToFilter(base, filterToUser);
} else {
throw new LDAPException("Object not found", LDAPException.NO_SUCH_OBJECT, base.getDN().toString());
}
} else if (scope.getValue() == 1) {
if (base.getDN().equals(this.baseDN)) {
addUser = true;
addGroups = true;
} else if (base.getDN().equals(userDN)) {
searchUsers = true;
// filterToUser = this.addBaseToFilter(base, filterToUser);
} else if (base.getDN().equals(groupDN)) {
searchGroups = true;
// filterToUser = this.addBaseToFilter(base, filterToUser);
}
} else if (scope.getValue() == 2) {
if (base.getDN().equals(this.baseDN)) {
addBase = true;
addUser = true;
addGroups = true;
searchUsers = true;
searchGroups = true;
// filterToUser = this.addBaseToFilter(base, filterToUser);
} else if (base.getDN().equals(userDN) || base.getDN().toString().endsWith(this.userDN.toString())) {
searchUsers = true;
// filterToUser = this.addBaseToFilter(base, filterToUser);
} else if (base.getDN().equals(groupDN) || base.getDN().toString().endsWith(this.groupDN.toString())) {
searchGroups = true;
// filterToUser = this.addBaseToFilter(base, filterToUser);
}
}
ArrayList<Entry> baseEntries = new ArrayList<Entry>();
if (addBase) {
baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.baseDN)));
}
if (addUser) {
baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.userDN)));
}
if (addGroups) {
baseEntries.add(new Entry(EntryUtil.createBaseEntry(this.groupDN)));
}
}
use of net.sourceforge.myvd.types.FilterNode in project OpenUnison by TremoloSecurity.
the class AmazonSimpleDB method stringFilter.
private String stringFilter(FilterNode root, StringBuffer filter, ArrayList<Object> vals) {
FilterType op;
// filter.append('(');
String comp = null;
ArrayList<FilterNode> children;
Iterator<FilterNode> filterIt;
String attribName = null;
boolean isFirst = true;
op = root.getType();
switch(op) {
case AND:
HashMap<String, ArrayList<FilterNode>> attribs = new HashMap<String, ArrayList<FilterNode>>();
// first sort the nodes into "buckets"
children = root.getChildren();
filterIt = children.iterator();
while (filterIt.hasNext()) {
FilterNode node = filterIt.next();
if (node.getType() == FilterType.AND) {
ArrayList<FilterNode> ands = attribs.get("&");
if (ands == null) {
ands = new ArrayList<FilterNode>();
attribs.put("&", ands);
}
ands.add(node);
} else if (node.getType() == FilterType.OR) {
ArrayList<FilterNode> ors = attribs.get("|");
if (ors == null) {
ors = new ArrayList<FilterNode>();
attribs.put("|", ors);
}
ors.add(node);
} else if (node.getType() == FilterType.NOT) {
ArrayList<FilterNode> nots = attribs.get("!");
if (nots == null) {
nots = new ArrayList<FilterNode>();
attribs.put("!", nots);
}
nots.add(node);
} else {
ArrayList<FilterNode> attribNodes = attribs.get(node.getName().toLowerCase());
if (attribNodes == null) {
attribNodes = new ArrayList<FilterNode>();
attribs.put(node.getName(), attribNodes);
}
attribNodes.add(node);
}
}
filter.append(" ( ");
Iterator<String> itBuckets = attribs.keySet().iterator();
while (itBuckets.hasNext()) {
String attrib = itBuckets.next();
ArrayList<FilterNode> nodes = attribs.get(attrib);
if (attrib.equals("&")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter, vals);
if (itNodes.hasNext()) {
filter.append(" AND ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" AND ");
}
} else if (attrib.equals("|")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter, vals);
if (itNodes.hasNext()) {
filter.append(" AND ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" AND ");
}
} else if (attrib.equals("!")) {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter, vals);
if (itNodes.hasNext()) {
filter.append(" AND ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" AND ");
}
} else {
Iterator<FilterNode> itNodes = nodes.iterator();
filter.append(" ( ");
while (itNodes.hasNext()) {
stringFilter(itNodes.next(), filter, vals);
if (itNodes.hasNext()) {
filter.append(" OR ");
}
}
filter.append(" ) ");
if (itBuckets.hasNext()) {
filter.append(" AND ");
}
}
}
filter.append(" ) ");
break;
case OR:
filter.append(" ( ");
children = root.getChildren();
filterIt = children.iterator();
while (filterIt.hasNext()) {
stringFilter(filterIt.next(), filter, vals);
if (filterIt.hasNext()) {
filter.append(" OR ");
}
}
filter.append(" ) ");
break;
case NOT:
filter.append(" NOT ( ");
stringFilter(root.getNot(), filter, vals);
filter.append(" ) ");
break;
case EQUALS:
{
if (root.getName().equalsIgnoreCase("objectclass")) {
filter.append(" (uid IS NOT NULL OR cn IS NOT NULL) ");
} else {
attribName = root.getName().toLowerCase();
if (attribName == null) {
filter.append(" (uid IS NULL AND cn IS NULL) ");
} else {
filter.append(attribName);
filter.append("='");
filter.append(root.getValue());
filter.append('\'');
vals.add(root.getValue());
}
}
break;
}
case GREATER_THEN:
{
attribName = root.getName().toLowerCase();
filter.append(attribName);
filter.append(">=");
filter.append("=");
filter.append(root.getValue());
vals.add(root.getValue());
break;
}
case LESS_THEN:
{
attribName = root.getName().toLowerCase();
filter.append(attribName);
filter.append("<=");
filter.append("=");
filter.append(root.getValue());
vals.add(root.getValue());
break;
}
case PRESENCE:
if (root.getName().equalsIgnoreCase("objectclass")) {
filter.append(" (uid IS NOT NULL OR cn IS NOT NULL) ");
} else {
filter.append(root.getName().toLowerCase());
filter.append(" IS NOT NULL ");
}
break;
/*case APPROX_MATCH:
filter.append((String)itr.next());
filter.append("~=");
byte[] value = (byte[])itr.next();
filter.append(byteString(value));
if (comp != null && itr.hasNext()) {
filter.append(comp);
}
break;
case LDAPSearchRequest.EXTENSIBLE_MATCH:
String oid = (String)itr.next();
filter.append((String)itr.next());
filter.append(':');
filter.append(oid);
filter.append(":=");
filter.append((String)itr.next());
if (comp != null && itr.hasNext()) {
filter.append(comp);
}
break;*/
case SUBSTR:
{
attribName = root.getName().toLowerCase();
filter.append(attribName);
filter.append(" LIKE '");
boolean noStarLast = false;
filter.append(root.getValue().replace('*', '%')).append('\'');
break;
}
}
if (comp != null) {
filter.append(')');
}
return attribName;
}
Aggregations