[Pki-devel] [PATCH] 555 Refactored LDAPDatabase.createFilter().

Endi Sukma Dewata edewata at redhat.com
Wed Feb 11 19:20:36 UTC 2015


The createFilter() method in LDAPDatabase has been changed to
construct an LDAP filter based on a keyword and a set of
attributes with their values. This will allow searching the
database based on specific attribute values. The subclasses of
LDAPDatabase have been updated accordingly.

https://fedorahosted.org/pki/ticket/1164

-- 
Endi S. Dewata
-------------- next part --------------
From 44f221ae9d427a08f8aa56219ec98166142630c2 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata at redhat.com>
Date: Wed, 11 Feb 2015 13:57:44 -0500
Subject: [PATCH] Refactored LDAPDatabase.createFilter().

The createFilter() method in LDAPDatabase has been changed to
construct an LDAP filter based on a keyword and a set of
attributes with their values. This will allow searching the
database based on specific attribute values. The subclasses of
LDAPDatabase have been updated accordingly.

https://fedorahosted.org/pki/ticket/1164
---
 .../src/com/netscape/cmscore/dbs/LDAPDatabase.java | 26 +++++++++++++++++++---
 .../dogtagpki/server/tps/dbs/ActivityDatabase.java | 20 ++++++++++++-----
 .../dogtagpki/server/tps/dbs/TPSCertDatabase.java  | 21 +++++++++++------
 .../dogtagpki/server/tps/dbs/TokenDatabase.java    | 21 +++++++++++------
 4 files changed, 65 insertions(+), 23 deletions(-)

diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java
index 0e3ffc13bc13bdbbeb0a2687793770297508a1d1..3e9f25e95ca1f41402bed2510b5139c452a57e5a 100644
--- a/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java
+++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java
@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.Map;
 
 import com.netscape.certsrv.apps.CMS;
 import com.netscape.certsrv.base.EBaseException;
@@ -17,6 +18,7 @@ import com.netscape.certsrv.dbs.IDBSearchResults;
 import com.netscape.certsrv.dbs.IDBSubsystem;
 import com.netscape.certsrv.dbs.Modification;
 import com.netscape.certsrv.dbs.ModificationSet;
+import com.netscape.cmsutil.ldap.LDAPUtil;
 
 /**
  * This class implements LDAP database.
@@ -98,15 +100,33 @@ public abstract class LDAPDatabase<E extends IDBObj> extends Database<E> {
     }
 
     public abstract String createDN(String id);
-    public abstract String createFilter(String filter);
+    public abstract String createFilter(String keyword, Map<String, String> attributes);
+
+    public void createFilter(StringBuilder sb, Map<String, String> attributes) {
+
+        // if no attributes specified, don't change filter
+        if (attributes == null || attributes.isEmpty()) return;
+
+        // wrap current filter with attribute matching filter
+        sb.insert(0, "(&");
+        for (Map.Entry<String, String> entry : attributes.entrySet()) {
+            sb.append("(" + entry.getKey() + "=" + LDAPUtil.escapeFilter(entry.getValue()) + ")");
+        }
+        sb.append(")");
+    }
 
     @Override
-    public Collection<E> findRecords(String filter) throws Exception {
+    public Collection<E> findRecords(String keyword) throws Exception {
+        return findRecords(keyword, null);
+    }
+
+    public Collection<E> findRecords(String keyword, Map<String, String> attributes) throws Exception {
+
         CMS.debug("LDAPDatabase: findRecords()");
 
         try (IDBSSession session = dbSubsystem.createSession()) {
             Collection<E> list = new ArrayList<E>();
-            String ldapFilter = createFilter(filter);
+            String ldapFilter = createFilter(keyword, attributes);
             CMS.debug("LDAPDatabase: searching " + baseDN + " with filter " + ldapFilter);
             IDBSearchResults results = session.search(baseDN, ldapFilter);
 
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java
index 4eb3e11e756a73475cc306cde42d7fe9937424dc..c15ff92550362ab63b61c10a78f8fc0de521a901 100644
--- a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java
@@ -20,8 +20,8 @@ package org.dogtagpki.server.tps.dbs;
 
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
 import org.dogtagpki.tps.main.Util;
 
 import com.netscape.certsrv.base.EBaseException;
@@ -89,13 +89,21 @@ public class ActivityDatabase extends LDAPDatabase<ActivityRecord> {
     }
 
     @Override
-    public String createFilter(String filter) {
+    public String createFilter(String keyword, Map<String, String> attributes) {
 
-        if (StringUtils.isEmpty(filter)) {
-            return "(id=*)";
+        StringBuilder sb = new StringBuilder();
+
+        if (keyword != null) {
+            keyword = LDAPUtil.escapeFilter(keyword);
+            sb.append("(|(tokenID=*" + keyword + "*)(userID=*" + keyword + "*))");
+        }
+
+        createFilter(sb, attributes);
+
+        if (sb.length() == 0) {
+            sb.append("(id=*)");
         }
 
-        filter = LDAPUtil.escapeFilter(filter);
-        return "(|(tokenID=*" + filter + "*)(userID=*" + filter + "*))";
+        return sb.toString();
     }
 }
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java
index 7450b06654d32095eb55c8b6c7e255dc7492ee8f..b593f9918f8350344f32e48bf279efbb20161bbd 100644
--- a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java
@@ -19,8 +19,7 @@
 package org.dogtagpki.server.tps.dbs;
 
 import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
+import java.util.Map;
 
 import com.netscape.certsrv.base.EBaseException;
 import com.netscape.certsrv.dbs.IDBSubsystem;
@@ -59,13 +58,21 @@ public class TPSCertDatabase extends LDAPDatabase<TPSCertRecord> {
     }
 
     @Override
-    public String createFilter(String filter) {
+    public String createFilter(String keyword, Map<String, String> attributes) {
 
-        if (StringUtils.isEmpty(filter)) {
-            return "(id=*)";
+        StringBuilder sb = new StringBuilder();
+
+        if (keyword != null) {
+            keyword = LDAPUtil.escapeFilter(keyword);
+            sb.append("(|(id=*" + keyword + "*)(tokenID=*" + keyword + "*)(userID=*" + keyword + "*))");
+        }
+
+        createFilter(sb, attributes);
+
+        if (sb.length() == 0) {
+            sb.append("(id=*)");
         }
 
-        filter = LDAPUtil.escapeFilter(filter);
-        return "(|(id=*" + filter + "*)(tokenID=*" + filter + "*)(userID=*" + filter + "*))";
+        return sb.toString();
     }
 }
diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java
index f86c6e203badb119549290ab3db8e8d9079fa944..19f4830b3776838375c75d54d5442f9234efd57b 100644
--- a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java
+++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java
@@ -19,8 +19,7 @@
 package org.dogtagpki.server.tps.dbs;
 
 import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
+import java.util.Map;
 
 import com.netscape.certsrv.base.EBaseException;
 import com.netscape.certsrv.dbs.IDBSubsystem;
@@ -56,13 +55,21 @@ public class TokenDatabase extends LDAPDatabase<TokenRecord> {
     }
 
     @Override
-    public String createFilter(String filter) {
+    public String createFilter(String keyword, Map<String, String> attributes) {
 
-        if (StringUtils.isEmpty(filter)) {
-            return "(id=*)";
+        StringBuilder sb = new StringBuilder();
+
+        if (keyword != null) {
+            keyword = LDAPUtil.escapeFilter(keyword);
+            sb.append("(|(id=*" + keyword + "*)(userID=*" + keyword + "*))");
+        }
+
+        createFilter(sb, attributes);
+
+        if (sb.length() == 0) {
+            sb.append("(id=*)");
         }
 
-        filter = LDAPUtil.escapeFilter(filter);
-        return "(|(id=*" + filter + "*)(userID=*" + filter + "*))";
+        return sb.toString();
     }
 }
-- 
1.8.4.2



More information about the Pki-devel mailing list