diff options
author | Endi S. Dewata <edewata@redhat.com> | 2014-03-17 11:40:42 -0400 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2014-03-19 16:19:04 -0400 |
commit | fbd1b96a35946b7ebf36afea3f3a2a50dcbf193f (patch) | |
tree | a8de6caa0be49b39321c546e02b35b6710299f1f /base/server | |
parent | 4c02156a7cc336afcb2cb46f77d98097eb83cda1 (diff) | |
download | pki-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')
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); } } - } |