summaryrefslogtreecommitdiffstats
path: root/base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java
diff options
context:
space:
mode:
Diffstat (limited to 'base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java')
-rw-r--r--base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java47
1 files changed, 43 insertions, 4 deletions
diff --git a/base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java b/base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java
index 3d5300370..bdb1269a8 100644
--- a/base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java
+++ b/base/server/cms/src/com/netscape/cms/servlet/key/KeyRequestDAO.java
@@ -17,6 +17,8 @@
// --- END COPYRIGHT BLOCK ---
package com.netscape.cms.servlet.key;
+import java.math.BigInteger;
+import java.security.cert.CertificateException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
@@ -53,6 +55,7 @@ import com.netscape.certsrv.key.KeyRequestResponse;
import com.netscape.certsrv.key.KeyResource;
import com.netscape.certsrv.key.SymKeyGenerationRequest;
import com.netscape.certsrv.kra.IKeyRecoveryAuthority;
+import com.netscape.certsrv.kra.IKeyService;
import com.netscape.certsrv.profile.IEnrollProfile;
import com.netscape.certsrv.request.CMSRequestInfo;
import com.netscape.certsrv.request.CMSRequestInfos;
@@ -60,6 +63,9 @@ import com.netscape.certsrv.request.IRequest;
import com.netscape.certsrv.request.RequestId;
import com.netscape.certsrv.request.RequestStatus;
import com.netscape.cms.servlet.request.CMSRequestDAO;
+import com.netscape.cmsutil.util.Utils;
+
+import netscape.security.x509.X509CertImpl;
/**
* @author alee
@@ -94,11 +100,13 @@ public class KeyRequestDAO extends CMSRequestDAO {
private IKeyRepository repo;
private IKeyRecoveryAuthority kra;
+ private IKeyService service;
public KeyRequestDAO() {
super("kra");
kra = ( IKeyRecoveryAuthority ) CMS.getSubsystem( "kra" );
repo = kra.getKeyRepository();
+ service = (IKeyService) kra;
}
/**
@@ -277,6 +285,39 @@ public class KeyRequestDAO extends CMSRequestDAO {
return createKeyRequestResponse(request, uriInfo);
}
+ public KeyRequestResponse submitAsyncKeyRecoveryRequest(KeyRecoveryRequest data, UriInfo uriInfo,
+ String requestor) throws EBaseException {
+ if (data == null) {
+ throw new BadRequestException("Invalid request.");
+ }
+
+ KeyId keyId = data.getKeyId();
+ IKeyRecord rec = null;
+ try {
+ rec = repo.readKeyRecord(keyId.toBigInteger());
+ } catch (EDBRecordNotFoundException e) {
+ throw new KeyNotFoundException(keyId);
+ }
+
+ String b64Certificate = data.getCertificate();
+ byte[] certData = Utils.base64decode(b64Certificate);
+ String requestId = null;
+ try {
+ requestId = service.initAsyncKeyRecovery(new BigInteger(keyId.toString()), new X509CertImpl(certData), requestor);
+ // TODO - update request with realm
+ } catch (EBaseException | CertificateException e) {
+ e.printStackTrace();
+ throw new PKIException(e.toString());
+ }
+ IRequest request = null;
+ try {
+ request = queue.findRequest(new RequestId(requestId));
+ } catch (EBaseException e) {
+ }
+ return createCMSRequestResponse(request, uriInfo);
+ }
+
+
public KeyRequestResponse submitRequest(SymKeyGenerationRequest data, UriInfo uriInfo, String owner)
throws EBaseException {
String clientKeyId = data.getClientKeyId();
@@ -429,10 +470,8 @@ public class KeyRequestDAO extends CMSRequestDAO {
return createKeyRequestResponse(request, uriInfo);
}
- public void approveRequest(RequestId id) throws EBaseException {
- IRequest request = queue.findRequest(id);
- request.setRequestStatus(RequestStatus.APPROVED);
- queue.updateRequest(request);
+ public void approveRequest(RequestId id, String requestor) throws EBaseException {
+ service.addAgentAsyncKeyRecovery(id.toString(), requestor);
}
public void rejectRequest(RequestId id) throws EBaseException {