From 3c9b8e787ccf066c38469e1fe2c119d5c410bb5e Mon Sep 17 00:00:00 2001 From: Endi Sukma Dewata Date: Sat, 11 Aug 2012 10:32:01 -0500 Subject: Reorganized REST server classes. The factory and DAO classes used by REST services have been moved into the com.netscape.cms.servlet. packages. Ticket #215 --- .../cms/servlet/request/CMSRequestDAO.java | 168 +++++++++++++ .../cms/servlet/request/CertRequestService.java | 6 +- .../cms/servlet/request/KeyRequestService.java | 2 +- .../cms/servlet/request/model/CMSRequestDAO.java | 166 ------------- .../model/CertEnrollmentRequestFactory.java | 51 ---- .../cms/servlet/request/model/CertRequestDAO.java | 215 ----------------- .../request/model/CertRequestInfoFactory.java | 83 ------- .../request/model/CertReviewResponseFactory.java | 174 -------------- .../cms/servlet/request/model/KeyRequestDAO.java | 265 --------------------- 9 files changed, 172 insertions(+), 958 deletions(-) create mode 100644 base/common/src/com/netscape/cms/servlet/request/CMSRequestDAO.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/CMSRequestDAO.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/CertEnrollmentRequestFactory.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/CertRequestDAO.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/CertRequestInfoFactory.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/CertReviewResponseFactory.java delete mode 100644 base/common/src/com/netscape/cms/servlet/request/model/KeyRequestDAO.java (limited to 'base/common/src/com/netscape/cms/servlet/request') diff --git a/base/common/src/com/netscape/cms/servlet/request/CMSRequestDAO.java b/base/common/src/com/netscape/cms/servlet/request/CMSRequestDAO.java new file mode 100644 index 000000000..5d1df774d --- /dev/null +++ b/base/common/src/com/netscape/cms/servlet/request/CMSRequestDAO.java @@ -0,0 +1,168 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2011 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- +package com.netscape.cms.servlet.request; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriInfo; + +import com.netscape.certsrv.apps.CMS; +import com.netscape.certsrv.authority.IAuthority; +import com.netscape.certsrv.base.EBaseException; +import com.netscape.certsrv.request.IRequest; +import com.netscape.certsrv.request.IRequestList; +import com.netscape.certsrv.request.IRequestQueue; +import com.netscape.certsrv.request.IRequestVirtualList; +import com.netscape.certsrv.request.RequestId; +import com.netscape.cms.servlet.base.model.Link; +import com.netscape.cms.servlet.request.model.CMSRequestInfo; +import com.netscape.cms.servlet.request.model.CMSRequestInfos; + +/** + * @author alee + * + */ + +public abstract class CMSRequestDAO { + protected IRequestQueue queue; + protected IAuthority authority; + + private String[] vlvFilters = { + "(requeststate=*)", "(requesttype=enrollment)", + "(requesttype=recovery)", "(requeststate=canceled)", + "(&(requeststate=canceled)(requesttype=enrollment))", + "(&(requeststate=canceled)(requesttype=recovery))", + "(requeststate=rejected)", + "(&(requeststate=rejected)(requesttype=enrollment))", + "(&(requeststate=rejected)(requesttype=recovery))", + "(requeststate=complete)", + "(&(requeststate=complete)(requesttype=enrollment))", + "(&(requeststate=complete)(requesttype=recovery))" + }; + + public static final String ATTR_SERIALNO = "serialNumber"; + + public CMSRequestDAO(String authorityName) { + authority = (IAuthority) CMS.getSubsystem(authorityName); + queue = authority.getRequestQueue(); + } + + /** + * Finds list of requests matching the specified search filter. + * + * If the filter corresponds to a VLV search, then that search is executed and the pageSize + * and start parameters are used. Otherwise, the maxResults and maxTime parameters are + * used in the regularly indexed search. + * + * @param filter - ldap search filter + * @param start - start position for VLV search + * @param pageSize - page size for VLV search + * @param maxResults - max results to be returned in normal search + * @param maxTime - max time for normal search + * @param uriInfo - uri context of request + * @return collection of key request info + * @throws EBaseException + */ + public CMSRequestInfos listCMSRequests(String filter, RequestId start, int pageSize, int maxResults, int maxTime, + UriInfo uriInfo) throws EBaseException { + List list = new ArrayList(); + List links = new ArrayList(); + int totalSize = 0; + int current = 0; + + if (isVLVSearch(filter)) { + IRequestVirtualList vlvlist = queue.getPagedRequestsByFilter(start, false, filter, + pageSize + 1, "requestId"); + totalSize = vlvlist.getSize(); + current = vlvlist.getCurrentIndex(); + + int numRecords = (totalSize > (current + pageSize)) ? pageSize : + totalSize - current; + + for (int i = 0; i < numRecords; i++) { + IRequest request = vlvlist.getElementAt(i); + list.add(createCMSRequestInfo(request, uriInfo)); + } + } else { + // The non-vlv requests are indexed, but are not paginated. + // We should think about whether they should be, or if we need to + // limit the number of results returned. + IRequestList requests = queue.listRequestsByFilter(filter, maxResults, maxTime); + + if (requests == null) { + return null; + } + while (requests.hasMoreElements()) { + RequestId rid = requests.nextElement(); + IRequest request = queue.findRequest(rid); + if (request != null) { + list.add(createCMSRequestInfo(request, uriInfo)); + } + } + } + + // builder for vlv links + MultivaluedMap params = uriInfo.getQueryParameters(); + UriBuilder builder = uriInfo.getAbsolutePathBuilder(); + if (params.containsKey("requestState")) { + builder.queryParam("requestState", params.getFirst("requestState")); + } + if (params.containsKey("requestType")) { + builder.queryParam("requestType", params.getFirst("requestType")); + } + builder.queryParam("start", "{start}"); + builder.queryParam("pageSize", "{pageSize}"); + + // next link + if (totalSize > current + pageSize) { + int next = current + pageSize + 1; + URI nextUri = builder.clone().build(next, pageSize); + Link nextLink = new Link("next", nextUri.toString(), "application/xml"); + links.add(nextLink); + } + + // previous link + if (current > 0) { + int previous = current - pageSize; + URI previousUri = builder.clone().build(previous, pageSize); + Link previousLink = new Link("previous", previousUri.toString(), "application/xml"); + links.add(previousLink); + } + + CMSRequestInfos ret = new CMSRequestInfos(); + ret.setRequests(list); + ret.setLinks(links); + return ret; + } + + private boolean isVLVSearch(String filter) { + for (int i = 0; i < vlvFilters.length; i++) { + if (vlvFilters[i].equalsIgnoreCase(filter)) { + return true; + } + } + return false; + } + + protected abstract CMSRequestInfo createCMSRequestInfo(IRequest request, UriInfo uriInfo); +} + diff --git a/base/common/src/com/netscape/cms/servlet/request/CertRequestService.java b/base/common/src/com/netscape/cms/servlet/request/CertRequestService.java index e1aa56592..174b6d7fb 100644 --- a/base/common/src/com/netscape/cms/servlet/request/CertRequestService.java +++ b/base/common/src/com/netscape/cms/servlet/request/CertRequestService.java @@ -35,11 +35,11 @@ import com.netscape.certsrv.request.RequestId; import com.netscape.cms.servlet.base.BadRequestException; import com.netscape.cms.servlet.base.PKIException; import com.netscape.cms.servlet.base.PKIService; -import com.netscape.cms.servlet.request.model.CertReviewResponse; -import com.netscape.cms.servlet.request.model.CertRequestDAO; +import com.netscape.cms.servlet.cert.CertRequestDAO; +import com.netscape.cms.servlet.request.model.CertEnrollmentRequest; import com.netscape.cms.servlet.request.model.CertRequestInfo; import com.netscape.cms.servlet.request.model.CertRequestInfos; -import com.netscape.cms.servlet.request.model.CertEnrollmentRequest; +import com.netscape.cms.servlet.request.model.CertReviewResponse; import com.netscape.cmsutil.ldap.LDAPUtil; /** diff --git a/base/common/src/com/netscape/cms/servlet/request/KeyRequestService.java b/base/common/src/com/netscape/cms/servlet/request/KeyRequestService.java index e2afaf58c..188bcb23c 100644 --- a/base/common/src/com/netscape/cms/servlet/request/KeyRequestService.java +++ b/base/common/src/com/netscape/cms/servlet/request/KeyRequestService.java @@ -27,8 +27,8 @@ import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.request.RequestId; import com.netscape.cms.servlet.base.PKIException; import com.netscape.cms.servlet.base.PKIService; +import com.netscape.cms.servlet.key.KeyRequestDAO; import com.netscape.cms.servlet.request.model.KeyArchivalRequest; -import com.netscape.cms.servlet.request.model.KeyRequestDAO; import com.netscape.cms.servlet.request.model.KeyRequestInfo; import com.netscape.cms.servlet.request.model.KeyRequestInfos; import com.netscape.cms.servlet.request.model.KeyRecoveryRequest; diff --git a/base/common/src/com/netscape/cms/servlet/request/model/CMSRequestDAO.java b/base/common/src/com/netscape/cms/servlet/request/model/CMSRequestDAO.java deleted file mode 100644 index 5ac984168..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/CMSRequestDAO.java +++ /dev/null @@ -1,166 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2011 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- -package com.netscape.cms.servlet.request.model; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.authority.IAuthority; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.request.IRequest; -import com.netscape.certsrv.request.IRequestList; -import com.netscape.certsrv.request.IRequestQueue; -import com.netscape.certsrv.request.IRequestVirtualList; -import com.netscape.certsrv.request.RequestId; -import com.netscape.cms.servlet.base.model.Link; - -/** - * @author alee - * - */ - -public abstract class CMSRequestDAO { - protected IRequestQueue queue; - protected IAuthority authority; - - private String[] vlvFilters = { - "(requeststate=*)", "(requesttype=enrollment)", - "(requesttype=recovery)", "(requeststate=canceled)", - "(&(requeststate=canceled)(requesttype=enrollment))", - "(&(requeststate=canceled)(requesttype=recovery))", - "(requeststate=rejected)", - "(&(requeststate=rejected)(requesttype=enrollment))", - "(&(requeststate=rejected)(requesttype=recovery))", - "(requeststate=complete)", - "(&(requeststate=complete)(requesttype=enrollment))", - "(&(requeststate=complete)(requesttype=recovery))" - }; - - public static final String ATTR_SERIALNO = "serialNumber"; - - public CMSRequestDAO(String authorityName) { - authority = (IAuthority) CMS.getSubsystem(authorityName); - queue = authority.getRequestQueue(); - } - - /** - * Finds list of requests matching the specified search filter. - * - * If the filter corresponds to a VLV search, then that search is executed and the pageSize - * and start parameters are used. Otherwise, the maxResults and maxTime parameters are - * used in the regularly indexed search. - * - * @param filter - ldap search filter - * @param start - start position for VLV search - * @param pageSize - page size for VLV search - * @param maxResults - max results to be returned in normal search - * @param maxTime - max time for normal search - * @param uriInfo - uri context of request - * @return collection of key request info - * @throws EBaseException - */ - public CMSRequestInfos listCMSRequests(String filter, RequestId start, int pageSize, int maxResults, int maxTime, - UriInfo uriInfo) throws EBaseException { - List list = new ArrayList(); - List links = new ArrayList(); - int totalSize = 0; - int current = 0; - - if (isVLVSearch(filter)) { - IRequestVirtualList vlvlist = queue.getPagedRequestsByFilter(start, false, filter, - pageSize + 1, "requestId"); - totalSize = vlvlist.getSize(); - current = vlvlist.getCurrentIndex(); - - int numRecords = (totalSize > (current + pageSize)) ? pageSize : - totalSize - current; - - for (int i = 0; i < numRecords; i++) { - IRequest request = vlvlist.getElementAt(i); - list.add(createCMSRequestInfo(request, uriInfo)); - } - } else { - // The non-vlv requests are indexed, but are not paginated. - // We should think about whether they should be, or if we need to - // limit the number of results returned. - IRequestList requests = queue.listRequestsByFilter(filter, maxResults, maxTime); - - if (requests == null) { - return null; - } - while (requests.hasMoreElements()) { - RequestId rid = requests.nextElement(); - IRequest request = queue.findRequest(rid); - if (request != null) { - list.add(createCMSRequestInfo(request, uriInfo)); - } - } - } - - // builder for vlv links - MultivaluedMap params = uriInfo.getQueryParameters(); - UriBuilder builder = uriInfo.getAbsolutePathBuilder(); - if (params.containsKey("requestState")) { - builder.queryParam("requestState", params.getFirst("requestState")); - } - if (params.containsKey("requestType")) { - builder.queryParam("requestType", params.getFirst("requestType")); - } - builder.queryParam("start", "{start}"); - builder.queryParam("pageSize", "{pageSize}"); - - // next link - if (totalSize > current + pageSize) { - int next = current + pageSize + 1; - URI nextUri = builder.clone().build(next, pageSize); - Link nextLink = new Link("next", nextUri.toString(), "application/xml"); - links.add(nextLink); - } - - // previous link - if (current > 0) { - int previous = current - pageSize; - URI previousUri = builder.clone().build(previous, pageSize); - Link previousLink = new Link("previous", previousUri.toString(), "application/xml"); - links.add(previousLink); - } - - CMSRequestInfos ret = new CMSRequestInfos(); - ret.setRequests(list); - ret.setLinks(links); - return ret; - } - - private boolean isVLVSearch(String filter) { - for (int i = 0; i < vlvFilters.length; i++) { - if (vlvFilters[i].equalsIgnoreCase(filter)) { - return true; - } - } - return false; - } - - abstract CMSRequestInfo createCMSRequestInfo(IRequest request, UriInfo uriInfo); -} - diff --git a/base/common/src/com/netscape/cms/servlet/request/model/CertEnrollmentRequestFactory.java b/base/common/src/com/netscape/cms/servlet/request/model/CertEnrollmentRequestFactory.java deleted file mode 100644 index 36c4adfca..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/CertEnrollmentRequestFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -//--- BEGIN COPYRIGHT BLOCK --- -//This program is free software; you can redistribute it and/or modify -//it under the terms of the GNU General Public License as published by -//the Free Software Foundation; version 2 of the License. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License along -//with this program; if not, write to the Free Software Foundation, Inc., -//51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -//(C) 2012 Red Hat, Inc. -//All rights reserved. -//--- END COPYRIGHT BLOCK --- -package com.netscape.cms.servlet.request.model; - -import java.util.Enumeration; -import java.util.Locale; - -import com.netscape.certsrv.base.IArgBlock; -import com.netscape.certsrv.profile.EProfileException; -import com.netscape.certsrv.profile.IProfile; -import com.netscape.certsrv.profile.IProfileInput; -import com.netscape.cms.servlet.common.CMSRequest; -import com.netscape.cms.servlet.profile.model.ProfileInput; -import com.netscape.cms.servlet.profile.model.ProfileInputFactory; - -public class CertEnrollmentRequestFactory { - - public static CertEnrollmentRequest create(CMSRequest cmsReq, IProfile profile, Locale locale) - throws EProfileException { - IArgBlock params = cmsReq.getHttpParams(); - - CertEnrollmentRequest ret = new CertEnrollmentRequest(); - ret.setProfileId(profile.getId()); - - // populate profile inputs - Enumeration inputIds = profile.getProfileInputIds(); - while (inputIds.hasMoreElements()) { - IProfileInput input = profile.getProfileInput(inputIds.nextElement()); - ProfileInput addInput = ProfileInputFactory.create(input, params, locale); - ret.addInput(addInput); - } - - return ret; - } - -} diff --git a/base/common/src/com/netscape/cms/servlet/request/model/CertRequestDAO.java b/base/common/src/com/netscape/cms/servlet/request/model/CertRequestDAO.java deleted file mode 100644 index 3aacf1b88..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/CertRequestDAO.java +++ /dev/null @@ -1,215 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2011 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- -package com.netscape.cms.servlet.request.model; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Random; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.UriInfo; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.base.Nonces; -import com.netscape.certsrv.ca.ICertificateAuthority; -import com.netscape.certsrv.profile.IProfile; -import com.netscape.certsrv.profile.IProfileSubsystem; -import com.netscape.certsrv.request.IRequest; -import com.netscape.certsrv.request.IRequestQueue; -import com.netscape.certsrv.request.RequestId; -import com.netscape.cms.servlet.cert.EnrollmentProcessor; -import com.netscape.cms.servlet.cert.RenewalProcessor; -import com.netscape.cms.servlet.cert.RequestProcessor; -import com.netscape.cms.servlet.processors.Processor; -import com.netscape.cms.servlet.request.RequestNotFoundException; - - -/** - * @author alee - * - */ -public class CertRequestDAO extends CMSRequestDAO { - private IRequestQueue queue; - private ICertificateAuthority ca; - IProfileSubsystem ps; - private Nonces nonces = null; - private Random random = null; - - public static final String ATTR_SERIALNO = "serialNumber"; - - public CertRequestDAO() { - super("ca"); - ca = (ICertificateAuthority) CMS.getSubsystem("ca"); - queue = ca.getRequestQueue(); - if (ca.noncesEnabled()) { - random = new Random(); - nonces = ca.getNonces(); - } - ps = (IProfileSubsystem) CMS.getSubsystem(IProfileSubsystem.ID); - } - - /** - * Finds list of requests matching the specified search filter. - * - * If the filter corresponds to a VLV search, then that search is executed and the pageSize - * and start parameters are used. Otherwise, the maxResults and maxTime parameters are - * used in the regularly indexed search. - * - * @param filter - ldap search filter - * @param start - start position for VLV search - * @param pageSize - page size for VLV search - * @param maxResults - max results to be returned in normal search - * @param maxTime - max time for normal search - * @param uriInfo - uri context of request - * @return collection of key request info - * @throws EBaseException - */ - - @SuppressWarnings("unchecked") - public CertRequestInfos listRequests(String filter, RequestId start, int pageSize, int maxResults, int maxTime, - UriInfo uriInfo) throws EBaseException { - - CMSRequestInfos cmsInfos = listCMSRequests(filter, start, pageSize, maxResults, maxTime, uriInfo); - - CertRequestInfos ret = new CertRequestInfos(); - - if (cmsInfos == null) { - ret.setRequests(null); - ret.setLinks(null); - return ret; - } - - List list = new ArrayList(); - ; - Collection cmsList = cmsInfos.getRequests(); - - // We absolutely know 100% that this list is a list - // of CertRequestInfo objects. This is because the method - // createCMSRequestInfo. Is the only one adding to it - - list = (List) cmsList; - - ret.setLinks(cmsInfos.getLinks()); - ret.setRequests(list); - - return ret; - } - - /** - * Gets info for a specific request - * - * @param id - * @return info for specific request - * @throws EBaseException - */ - public CertRequestInfo getRequest(RequestId id, UriInfo uriInfo) throws EBaseException { - IRequest request = queue.findRequest(id); - if (request == null) { - return null; - } - CertRequestInfo info = createCMSRequestInfo(request, uriInfo); - return info; - } - - /** - * Gets info for a specific request - * - * @param id - * @return info for specific request - * @throws EBaseException - */ - public CertReviewResponse reviewRequest(HttpServletRequest servletRequest, RequestId id, - UriInfo uriInfo, Locale locale) throws EBaseException { - IRequest request = queue.findRequest(id); - if (request == null) { - return null; - } - String profileId = request.getExtDataInString("profileId"); - IProfile profile = ps.getProfile(profileId); - CertReviewResponse info = CertReviewResponseFactory.create(request, profile, uriInfo, locale); - if (ca.noncesEnabled()) { - addNonce(info, servletRequest); - } - return info; - } - - private void addNonce(CertReviewResponse info, HttpServletRequest servletRequest) throws EBaseException { - if (nonces != null) { - long n = random.nextLong(); - long m = nonces.addNonce(n, Processor.getSSLClientCertificate(servletRequest)); - if ((n + m) != 0) { - info.setNonce(Long.toString(m)); - } - } - } - - /** - * Submits an enrollment request and processes it. - * - * @param data - * @return info for the request submitted. - * @throws EBaseException - * @throws ServletException - */ - public CertRequestInfos submitRequest(CertEnrollmentRequest data, HttpServletRequest request, UriInfo uriInfo, - Locale locale) throws EBaseException { - HashMap results = null; - if (data.getIsRenewal()) { - RenewalProcessor processor = new RenewalProcessor("caProfileSubmit", locale); - results = processor.processRenewal(data, request); - } else { - EnrollmentProcessor processor = new EnrollmentProcessor("caProfileSubmit", locale); - results = processor.processEnrollment(data, request); - } - - CertRequestInfos ret = new CertRequestInfos(); - ArrayList infos = new ArrayList(); - IRequest reqs[] = (IRequest[]) results.get(Processor.ARG_REQUESTS); - for (IRequest req : reqs) { - CertRequestInfo info = CertRequestInfoFactory.create(req, uriInfo); - infos.add(info); - } - // TODO - what happens if the errorCode is internal error ? - ret.setRequests(infos); - ret.setLinks(null); - - return ret; - } - - public void changeRequestState(RequestId id, HttpServletRequest request, CertReviewResponse data, - Locale locale, String op) throws EBaseException { - IRequest ireq = queue.findRequest(id); - if (ireq == null) { - throw new RequestNotFoundException(id); - } - - RequestProcessor processor = new RequestProcessor("caProfileProcess", locale); - processor.processRequest(request, data, ireq, op); - } - - @Override - public CertRequestInfo createCMSRequestInfo(IRequest request, UriInfo uriInfo) { - return CertRequestInfoFactory.create(request, uriInfo); - } - -} diff --git a/base/common/src/com/netscape/cms/servlet/request/model/CertRequestInfoFactory.java b/base/common/src/com/netscape/cms/servlet/request/model/CertRequestInfoFactory.java deleted file mode 100644 index c21ea35c9..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/CertRequestInfoFactory.java +++ /dev/null @@ -1,83 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2012 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- - -package com.netscape.cms.servlet.request.model; - -import java.math.BigInteger; - -import javax.ws.rs.Path; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; - -import netscape.security.x509.X509CertImpl; - -import org.apache.commons.lang.StringUtils; - -import com.netscape.certsrv.profile.IEnrollProfile; -import com.netscape.certsrv.request.IRequest; -import com.netscape.certsrv.request.RequestId; -import com.netscape.certsrv.request.RequestStatus; -import com.netscape.cms.servlet.cert.CertResource; -import com.netscape.cms.servlet.request.CertRequestResource; - -public class CertRequestInfoFactory { - - public static CertRequestInfo create(IRequest request, UriInfo uriInfo) { - - CertRequestInfo info = new CertRequestInfo(); - - String requestType = request.getRequestType(); - RequestStatus requestStatus = request.getRequestStatus(); - - info.setRequestType(requestType); - info.setRequestStatus(requestStatus); - - info.setCertRequestType(request.getExtDataInString("cert_request_type")); - - Path certRequestPath = CertRequestResource.class.getAnnotation(Path.class); - RequestId requestId = request.getRequestId(); - - UriBuilder reqBuilder = uriInfo.getBaseUriBuilder(); - reqBuilder.path(certRequestPath.value() + "/" + requestId); - info.setRequestURL(reqBuilder.build().toString()); - - //Get Cert info if issued. - - String serialNoStr = null; - - if (requestType != null && requestStatus == RequestStatus.COMPLETE) { - X509CertImpl impl[] = new X509CertImpl[1]; - impl[0] = request.getExtDataInCert(IEnrollProfile.REQUEST_ISSUED_CERT); - - BigInteger serialNo; - if (impl[0] != null) { - serialNo = impl[0].getSerialNumber(); - serialNoStr = serialNo.toString(); - } - } - - if (!StringUtils.isEmpty(serialNoStr)) { - Path certPath = CertResource.class.getAnnotation(Path.class); - UriBuilder certBuilder = uriInfo.getBaseUriBuilder(); - certBuilder.path(certPath.value() + "/" + serialNoStr); - info.setCertURL(certBuilder.build().toString()); - } - - return info; - } -} diff --git a/base/common/src/com/netscape/cms/servlet/request/model/CertReviewResponseFactory.java b/base/common/src/com/netscape/cms/servlet/request/model/CertReviewResponseFactory.java deleted file mode 100644 index a27437d0f..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/CertReviewResponseFactory.java +++ /dev/null @@ -1,174 +0,0 @@ -//--- BEGIN COPYRIGHT BLOCK --- -//This program is free software; you can redistribute it and/or modify -//it under the terms of the GNU General Public License as published by -//the Free Software Foundation; version 2 of the License. -// -//This program is distributed in the hope that it will be useful, -//but WITHOUT ANY WARRANTY; without even the implied warranty of -//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//GNU General Public License for more details. -// -//You should have received a copy of the GNU General Public License along -//with this program; if not, write to the Free Software Foundation, Inc., -//51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -//(C) 2012 Red Hat, Inc. -//All rights reserved. -//--- END COPYRIGHT BLOCK --- -package com.netscape.cms.servlet.request.model; - -import java.util.Enumeration; -import java.util.Locale; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.UriInfo; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.base.IArgBlock; -import com.netscape.certsrv.base.Nonces; -import com.netscape.certsrv.profile.EProfileException; -import com.netscape.certsrv.profile.IPolicyDefault; -import com.netscape.certsrv.profile.IProfile; -import com.netscape.certsrv.profile.IProfileInput; -import com.netscape.certsrv.profile.IProfilePolicy; -import com.netscape.certsrv.property.EPropertyException; -import com.netscape.certsrv.request.IRequest; -import com.netscape.cms.servlet.common.CMSRequest; -import com.netscape.cms.servlet.processors.Processor; -import com.netscape.cms.servlet.profile.model.PolicyConstraint; -import com.netscape.cms.servlet.profile.model.PolicyConstraintFactory; -import com.netscape.cms.servlet.profile.model.PolicyDefault; -import com.netscape.cms.servlet.profile.model.PolicyDefaultFactory; -import com.netscape.cms.servlet.profile.model.ProfileInput; -import com.netscape.cms.servlet.profile.model.ProfileInputFactory; -import com.netscape.cms.servlet.profile.model.ProfilePolicy; -import com.netscape.cms.servlet.profile.model.ProfilePolicySet; - -public class CertReviewResponseFactory { - - public static CertReviewResponse create(IRequest request, IProfile profile, UriInfo uriInfo, Locale locale) throws EBaseException { - CertReviewResponse ret = new CertReviewResponse(); - - if (request.getRequestType().equals("renewal")) { - ret.setIsRenewal(true); - } else { - ret.setIsRenewal(false); - } - - ret.setRequestId(request.getRequestId()); - ret.setRequestType(request.getRequestType()); - ret.setRequestStatus(request.getRequestStatus().toString()); - if (request.getRequestOwner() == null) { - ret.setRequestOwner(""); - } else { - ret.setRequestOwner(request.getRequestOwner()); - } - ret.setRequestCreationTime(request.getCreationTime().toString()); - ret.setRequestModificationTime(request.getModificationTime().toString()); - - ret.setProfileId(profile.getId()); - ret.setProfileApprovedBy(request.getExtDataInString("profileApprovedBy")); - ret.setProfileSetId(request.getExtDataInString("profileSetId")); - if (profile.isVisible()) { - ret.setProfileIsVisible("true"); - } else { - ret.setProfileIsVisible("false"); - } - - ret.setProfileName(profile.getName(locale)); - ret.setProfileDescription(profile.getDescription(locale)); - ret.setProfileRemoteHost(request.getExtDataInString("profileRemoteHost")); - ret.setProfileRemoteAddr(request.getExtDataInString("profileRemoteAddr")); - if (request.getExtDataInString("requestNotes") == null) { - ret.setRequestNotes(""); - } else { - ret.setRequestNotes(request.getExtDataInString("requestNotes")); - } - - // populate profile inputs - Enumeration inputIds = profile.getProfileInputIds(); - while (inputIds.hasMoreElements()) { - IProfileInput input = profile.getProfileInput(inputIds.nextElement()); - ProfileInput addInput = ProfileInputFactory.create(input, request, locale); - ret.addInput(addInput); - } - - String profileSetId = request.getExtDataInString("profileSetId"); - CMS.debug("createAgentCertRequestInfo: profileSetId=" + profileSetId); - Enumeration policyIds = (profileSetId != null && profileSetId.length() > 0) ? - profile.getProfilePolicyIds(profileSetId) : null; - ProfilePolicySet dataPolicySet = new ProfilePolicySet(); - - if (policyIds != null) { - while (policyIds.hasMoreElements()) { - String id = policyIds.nextElement(); - CMS.debug("policyId:" + id); - IProfilePolicy policy = profile.getProfilePolicy(profileSetId, id); - ProfilePolicy dataPolicy = new ProfilePolicy(); - - //populate defaults - IPolicyDefault def = policy.getDefault(); - PolicyDefault dataDef = PolicyDefaultFactory.create(request, locale, def); - dataPolicy.setDef(dataDef); - - //populate constraints - PolicyConstraint dataCons = PolicyConstraintFactory.create(locale, policy.getConstraint()); - dataPolicy.setConstraint(dataCons); - - dataPolicySet.addPolicy(dataPolicy); - } - } - - - ret.addProfilePolicySet(dataPolicySet); - - // TODO populate profile outputs - return ret; - } - - public static CertReviewResponse create(CMSRequest cmsReq, IProfile profile, Nonces nonces, Locale locale) - throws EPropertyException, EProfileException { - HttpServletRequest req = cmsReq.getHttpReq(); - IRequest ireq = cmsReq.getIRequest(); - IArgBlock params = cmsReq.getHttpParams(); - - CertReviewResponse ret = new CertReviewResponse(); - ret.setProfileId(profile.getId()); - ret.setRequestNotes(req.getParameter("requestNotes")); - ret.setRequestId(ireq.getRequestId()); - - if (nonces != null) { - ret.setNonce(req.getParameter(Processor.ARG_REQUEST_NONCE)); - } - - // populate profile policy values - String profileSetId = ireq.getExtDataInString("profileSetId"); - Enumeration policyIds = (profileSetId != null && profileSetId.length() > 0) ? - profile.getProfilePolicyIds(profileSetId) : null; - ProfilePolicySet dataPolicySet = new ProfilePolicySet(); - - if (policyIds != null) { - while (policyIds.hasMoreElements()) { - String id = policyIds.nextElement(); - CMS.debug("policyId:" + id); - IProfilePolicy policy = profile.getProfilePolicy(profileSetId, id); - com.netscape.cms.servlet.profile.model.ProfilePolicy dataPolicy = - new com.netscape.cms.servlet.profile.model.ProfilePolicy(); - - //populate defaults - IPolicyDefault def = policy.getDefault(); - PolicyDefault dataDef = PolicyDefaultFactory.create(params, locale, def); - dataPolicy.setDef(dataDef); - - dataPolicySet.addPolicy(dataPolicy); - CMS.debug(dataPolicy.toString()); - } - } - - ret.addProfilePolicySet(dataPolicySet); - - return ret; - } - -} diff --git a/base/common/src/com/netscape/cms/servlet/request/model/KeyRequestDAO.java b/base/common/src/com/netscape/cms/servlet/request/model/KeyRequestDAO.java deleted file mode 100644 index 6e9de9290..000000000 --- a/base/common/src/com/netscape/cms/servlet/request/model/KeyRequestDAO.java +++ /dev/null @@ -1,265 +0,0 @@ -// --- BEGIN COPYRIGHT BLOCK --- -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -// -// (C) 2011 Red Hat, Inc. -// All rights reserved. -// --- END COPYRIGHT BLOCK --- -package com.netscape.cms.servlet.request.model; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.List; - -import javax.ws.rs.Path; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.dbs.keydb.IKeyRecord; -import com.netscape.certsrv.dbs.keydb.IKeyRepository; -import com.netscape.certsrv.dbs.keydb.KeyId; -import com.netscape.certsrv.kra.IKeyRecoveryAuthority; -import com.netscape.certsrv.profile.IEnrollProfile; -import com.netscape.certsrv.request.IRequest; -import com.netscape.certsrv.request.RequestId; -import com.netscape.certsrv.request.RequestStatus; -import com.netscape.cms.servlet.key.KeyResource; -import com.netscape.cms.servlet.request.KeyRequestResource; - -/** - * @author alee - * - */ -public class KeyRequestDAO extends CMSRequestDAO { - - private static String REQUEST_ARCHIVE_OPTIONS = IEnrollProfile.REQUEST_ARCHIVE_OPTIONS; - public static final String ATTR_SERIALNO = "serialNumber"; - - private IKeyRepository repo; - private IKeyRecoveryAuthority kra; - - public KeyRequestDAO() { - super("kra"); - kra = ( IKeyRecoveryAuthority ) CMS.getSubsystem( "kra" ); - repo = kra.getKeyRepository(); - } - - /** - * Finds list of requests matching the specified search filter. - * - * If the filter corresponds to a VLV search, then that search is executed and the pageSize - * and start parameters are used. Otherwise, the maxResults and maxTime parameters are - * used in the regularly indexed search. - * - * @param filter - ldap search filter - * @param start - start position for VLV search - * @param pageSize - page size for VLV search - * @param maxResults - max results to be returned in normal search - * @param maxTime - max time for normal search - * @param uriInfo - uri context of request - * @return collection of key request info - * @throws EBaseException - */ - @SuppressWarnings("unchecked") - public KeyRequestInfos listRequests(String filter, RequestId start, int pageSize, int maxResults, int maxTime, - UriInfo uriInfo) throws EBaseException { - - CMSRequestInfos cmsInfos = listCMSRequests(filter, start, pageSize, maxResults, maxTime, uriInfo); - KeyRequestInfos ret = new KeyRequestInfos(); - - if (cmsInfos == null) { - ret.setRequests(null); - ret.setLinks(null); - return ret; - } - - List list = new ArrayList(); - ; - Collection cmsList = cmsInfos.getRequests(); - - // We absolutely know 100% that this list is a list - // of KeyRequestInfo objects. This is because the method - // createCMSRequestInfo. Is the only one adding to it - - list = (List) cmsList; - - ret.setLinks(cmsInfos.getLinks()); - ret.setRequests(list); - - return ret; - - } - - /** - * Gets info for a specific request - * - * @param id - * @return info for specific request - * @throws EBaseException - */ - public KeyRequestInfo getRequest(RequestId id, UriInfo uriInfo) throws EBaseException { - IRequest request = queue.findRequest(id); - if (request == null) { - return null; - } - KeyRequestInfo info = createKeyRequestInfo(request, uriInfo); - return info; - } - - /** - * Submits an archival request and processes it. - * - * @param data - * @return info for the request submitted. - * @throws EBaseException - */ - public KeyRequestInfo submitRequest(KeyArchivalRequest data, UriInfo uriInfo) throws EBaseException { - String clientId = data.getClientId(); - String wrappedSecurityData = data.getWrappedPrivateData(); - String dataType = data.getDataType(); - - boolean keyExists = doesKeyExist(clientId, "active", uriInfo); - - if (keyExists == true) { - throw new EBaseException("Can not archive already active existing key!"); - } - - IRequest request = queue.newRequest(IRequest.SECURITY_DATA_ENROLLMENT_REQUEST); - - request.setExtData(REQUEST_ARCHIVE_OPTIONS, wrappedSecurityData); - request.setExtData(IRequest.SECURITY_DATA_CLIENT_ID, clientId); - request.setExtData(IRequest.SECURITY_DATA_TYPE, dataType); - - queue.processRequest(request); - - queue.markAsServiced(request); - - return createKeyRequestInfo(request, uriInfo); - } - - /** - * Submits a key recovery request. - * - * @param data - * @return info on the recovery request created - * @throws EBaseException - */ - public KeyRequestInfo submitRequest(KeyRecoveryRequest data, UriInfo uriInfo) throws EBaseException { - // set data using request.setExtData(field, data) - - String wrappedSessionKeyStr = data.getTransWrappedSessionKey(); - String wrappedPassPhraseStr = data.getSessionWrappedPassphrase(); - String nonceDataStr = data.getNonceData(); - - IRequest request = queue.newRequest(IRequest.SECURITY_DATA_RECOVERY_REQUEST); - - KeyId keyId = data.getKeyId(); - - Hashtable requestParams; - - requestParams = ((IKeyRecoveryAuthority) authority).createVolatileRequest(request.getRequestId()); - - if (requestParams == null) { - throw new EBaseException("Can not create Volatile params in submitRequest!"); - } - - CMS.debug("Create volatile params for recovery request. " + requestParams); - - if (wrappedPassPhraseStr != null) { - requestParams.put(IRequest.SECURITY_DATA_SESS_PASS_PHRASE, wrappedPassPhraseStr); - } - - if (wrappedSessionKeyStr != null) { - requestParams.put(IRequest.SECURITY_DATA_TRANS_SESS_KEY, wrappedSessionKeyStr); - } - - if (nonceDataStr != null) { - requestParams.put(IRequest.SECURITY_DATA_IV_STRING_IN, nonceDataStr); - } - - request.setExtData(ATTR_SERIALNO, keyId.toString()); - - queue.processRequest(request); - - return createKeyRequestInfo(request, uriInfo); - } - - public void approveRequest(RequestId id) throws EBaseException { - IRequest request = queue.findRequest(id); - request.setRequestStatus(RequestStatus.APPROVED); - queue.updateRequest(request); - } - - public void rejectRequest(RequestId id) throws EBaseException { - IRequest request = queue.findRequest(id); - request.setRequestStatus(RequestStatus.CANCELED); - queue.updateRequest(request); - } - - public void cancelRequest(RequestId id) throws EBaseException { - IRequest request = queue.findRequest(id); - request.setRequestStatus(RequestStatus.REJECTED); - queue.updateRequest(request); - } - - private KeyRequestInfo createKeyRequestInfo(IRequest request, UriInfo uriInfo) { - KeyRequestInfo ret = new KeyRequestInfo(); - - ret.setRequestType(request.getRequestType()); - ret.setRequestStatus(request.getRequestStatus()); - - Path keyRequestPath = KeyRequestResource.class.getAnnotation(Path.class); - RequestId rid = request.getRequestId(); - - UriBuilder reqBuilder = uriInfo.getBaseUriBuilder(); - reqBuilder.path(keyRequestPath.value() + "/" + rid); - ret.setRequestURL(reqBuilder.build().toString()); - - Path keyPath = KeyResource.class.getAnnotation(Path.class); - String kid = request.getExtDataInString("keyrecord"); - - UriBuilder keyBuilder = uriInfo.getBaseUriBuilder(); - keyBuilder.path(keyPath.value() + "/" + kid); - ret.setKeyURL(keyBuilder.build().toString()); - - return ret; - } - - @Override - public KeyRequestInfo createCMSRequestInfo(IRequest request, UriInfo uriInfo) { - return createKeyRequestInfo(request, uriInfo); - } - - //We only care if the key exists or not - private boolean doesKeyExist(String clientId, String keyStatus, UriInfo uriInfo) { - String state = "active"; - String filter = "(&(" + IRequest.SECURITY_DATA_CLIENT_ID + "=" + clientId + ")" - + "(" + IRequest.SECURITY_DATA_STATUS + "=" + state + "))"; - try { - Enumeration existingKeys = null; - - existingKeys = repo.searchKeys(filter, 1, 10); - if (existingKeys != null && existingKeys.hasMoreElements()) { - return true; - } - } catch (EBaseException e) { - return false; - } - - return false; - } -} -- cgit