summaryrefslogtreecommitdiffstats
path: root/base/server
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2014-03-17 11:40:42 -0400
committerEndi S. Dewata <edewata@redhat.com>2014-03-19 16:19:04 -0400
commitfbd1b96a35946b7ebf36afea3f3a2a50dcbf193f (patch)
treea8de6caa0be49b39321c546e02b35b6710299f1f /base/server
parent4c02156a7cc336afcb2cb46f77d98097eb83cda1 (diff)
downloadpki-fbd1b96a35946b7ebf36afea3f3a2a50dcbf193f.tar.gz
pki-fbd1b96a35946b7ebf36afea3f3a2a50dcbf193f.tar.xz
pki-fbd1b96a35946b7ebf36afea3f3a2a50dcbf193f.zip
Added search filter for TPS resources.
The TPS resources have been modified to accept a basic search filter for find operation. For resources based on LDAP database, the filtering is done using LDAP filter. For other resources, the filtering is done using string comparison. For now the filter is will only be matched against entry IDs. In the future the filter may be expanded to support other entry attributes. The CLI has been updated accordingly. The total attribute in DataCollection was changed from Integer into int because the total size of the collection cannot be null. The PKIException constructors have been consolidated into a single actual constructor. The other constructors have been modified to call the actual constructor with some default values. Ticket #847
Diffstat (limited to 'base/server')
-rw-r--r--base/server/cms/src/org/dogtagpki/server/rest/GroupService.java3
-rw-r--r--base/server/cms/src/org/dogtagpki/server/rest/SelfTestService.java14
-rw-r--r--base/server/cms/src/org/dogtagpki/server/rest/UserService.java16
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/dbs/Database.java15
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java11
5 files changed, 45 insertions, 14 deletions
diff --git a/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java b/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
index 2c3c0011a..0f3d9b0db 100644
--- a/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
+++ b/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
@@ -139,7 +139,8 @@ public class GroupService extends PKIService implements GroupResource {
return createOKResponse(response);
} catch (Exception e) {
- throw new PKIException(getUserMessage("CMS_INTERNAL_ERROR", headers));
+ CMS.debug(e);
+ throw new PKIException(e);
}
}
diff --git a/base/server/cms/src/org/dogtagpki/server/rest/SelfTestService.java b/base/server/cms/src/org/dogtagpki/server/rest/SelfTestService.java
index 652875fe8..62993f68e 100644
--- a/base/server/cms/src/org/dogtagpki/server/rest/SelfTestService.java
+++ b/base/server/cms/src/org/dogtagpki/server/rest/SelfTestService.java
@@ -21,7 +21,8 @@ package org.dogtagpki.server.rest;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
@@ -94,7 +95,7 @@ public class SelfTestService extends PKIService implements SelfTestResource {
}
@Override
- public Response findSelfTests(Integer start, Integer size) {
+ public Response findSelfTests(String filter, Integer start, Integer size) {
CMS.debug("SelfTestService.findSelfTests()");
@@ -103,9 +104,16 @@ public class SelfTestService extends PKIService implements SelfTestResource {
size = size == null ? DEFAULT_SIZE : size;
ISelfTestSubsystem subsystem = (ISelfTestSubsystem)CMS.getSubsystem(ISelfTestSubsystem.ID);
- Iterator<String> entries = Arrays.asList(subsystem.listSelfTestsEnabledOnDemand()).iterator();
+
+ // filter self tests
+ Collection<String> results = new ArrayList<String>();
+ for (String name : subsystem.listSelfTestsEnabledOnDemand()) {
+ if (filter != null && !name.contains(filter)) continue;
+ results.add(name);
+ }
SelfTestCollection response = new SelfTestCollection();
+ Iterator<String> entries = results.iterator();
int i = 0;
// skip to the start of the page
diff --git a/base/server/cms/src/org/dogtagpki/server/rest/UserService.java b/base/server/cms/src/org/dogtagpki/server/rest/UserService.java
index ac1f0617f..839b29291 100644
--- a/base/server/cms/src/org/dogtagpki/server/rest/UserService.java
+++ b/base/server/cms/src/org/dogtagpki/server/rest/UserService.java
@@ -133,6 +133,7 @@ public class UserService extends PKIService implements UserResource {
*/
@Override
public Response findUsers(String filter, Integer start, Integer size) {
+ UserCollection response = new UserCollection();
try {
filter = StringUtils.isEmpty(filter) ? "*" : "*"+LDAPUtil.escapeFilter(filter)+"*";
start = start == null ? 0 : start;
@@ -140,7 +141,6 @@ public class UserService extends PKIService implements UserResource {
Enumeration<IUser> users = userGroupManager.findUsers(filter);
- UserCollection response = new UserCollection();
int i = 0;
// skip to the start of the page
@@ -168,8 +168,20 @@ public class UserService extends PKIService implements UserResource {
return createOKResponse(response);
+ } catch (EUsrGrpException e) {
+ // Workaround for ticket #914.
+ // If no users found, return empty result.
+ if (CMS.getUserMessage("CMS_USRGRP_USER_NOT_FOUND").equals(e.getMessage())) {
+ CMS.debug("UserService.findUsers(): " + e.getMessage());
+ return createOKResponse(response);
+ }
+
+ CMS.debug(e);
+ throw new PKIException(e);
+
} catch (Exception e) {
- throw new PKIException(getUserMessage("CMS_INTERNAL_ERROR", headers));
+ CMS.debug(e);
+ throw new PKIException(e);
}
}
diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/Database.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/Database.java
index 3df2d5919..f8c55204b 100644
--- a/base/server/cmscore/src/com/netscape/cmscore/dbs/Database.java
+++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/Database.java
@@ -18,6 +18,7 @@
package com.netscape.cmscore.dbs;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -43,8 +44,18 @@ public class Database<E> {
CMS.debug("Initializing " + name + " database");
}
- public Collection<E> getRecords() throws Exception {
- return records.values();
+ /**
+ * Find records matching filter
+ */
+ public Collection<E> findRecords(String filter) throws Exception {
+
+ Collection<E> results = new ArrayList<E>();
+ for (String id : records.keySet()) {
+ if (filter != null && !id.contains(filter)) continue;
+ results.add(records.get(id));
+ }
+
+ return results;
}
public E getRecord(String id) throws Exception {
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 f6ded787b..4c3ac8dfb 100644
--- a/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java
+++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java
@@ -98,14 +98,14 @@ public abstract class LDAPDatabase<E extends IDBObj> extends Database<E> {
public abstract String createFilter(String filter);
@Override
- public Collection<E> getRecords() throws Exception {
- CMS.debug("LDAPDatabase: getRecords()");
+ public Collection<E> findRecords(String filter) throws Exception {
+ CMS.debug("LDAPDatabase: findRecords()");
try (IDBSSession session = dbSubsystem.createSession()) {
Collection<E> list = new ArrayList<E>();
-
- CMS.debug("LDAPDatabase: searching " + baseDN);
- IDBSearchResults results = session.search(baseDN, createFilter(null));
+ filter = createFilter(filter);
+ CMS.debug("LDAPDatabase: searching " + baseDN + " with filter " + filter);
+ IDBSearchResults results = session.search(baseDN, filter);
while (results.hasMoreElements()) {
@SuppressWarnings("unchecked")
@@ -167,5 +167,4 @@ public abstract class LDAPDatabase<E extends IDBObj> extends Database<E> {
session.delete(dn);
}
}
-
}