Blame SOURCES/pki-core-SecurityDataRecoveryService.patch

f8ded1
--- patch/base/kra/src/com/netscape/kra/SecurityDataRecoveryService.java	2017-06-06 04:56:02.188426066 +0200
f8ded1
+++ pki/base/kra/src/com/netscape/kra/SecurityDataRecoveryService.java	2017-06-06 01:50:56.698341052 +0200
f8ded1
@@ -17,6 +17,8 @@
f8ded1
 // --- END COPYRIGHT BLOCK ---
f8ded1
 package com.netscape.kra;
f8ded1
 
f8ded1
+import java.math.BigInteger;
f8ded1
+
f8ded1
 import com.netscape.certsrv.apps.CMS;
f8ded1
 import com.netscape.certsrv.base.EBaseException;
f8ded1
 import com.netscape.certsrv.dbs.keydb.KeyId;
f8ded1
@@ -41,6 +43,7 @@ public class SecurityDataRecoveryService
f8ded1
 
f8ded1
     private IKeyRecoveryAuthority kra = null;
f8ded1
     private SecurityDataProcessor processor = null;
f8ded1
+    private ILogger signedAuditLogger = CMS.getSignedAuditLogger();
f8ded1
 
f8ded1
     public SecurityDataRecoveryService(IKeyRecoveryAuthority kra) {
f8ded1
         this.kra = kra;
f8ded1
@@ -65,8 +68,66 @@ public class SecurityDataRecoveryService
f8ded1
             throws EBaseException {
f8ded1
 
f8ded1
         CMS.debug("SecurityDataRecoveryService.serviceRequest()");
f8ded1
-        processor.recover(request);
f8ded1
-        kra.getRequestQueue().updateRequest(request);
f8ded1
+
f8ded1
+        // parameters for auditing
f8ded1
+        String auditSubjectID = request.getExtDataInString(IRequest.ATTR_REQUEST_OWNER);
f8ded1
+        BigInteger serialNumber = request.getExtDataInBigInteger("serialNumber");
f8ded1
+        KeyId keyId = serialNumber != null ? new KeyId(serialNumber): null;
f8ded1
+        RequestId requestID = request.getRequestId();
f8ded1
+        String approvers = request.getExtDataInString(IRequest.ATTR_APPROVE_AGENTS);
f8ded1
+
f8ded1
+        try {
f8ded1
+            processor.recover(request);
f8ded1
+            kra.getRequestQueue().updateRequest(request);
f8ded1
+            auditRecoveryRequestProcessed(
f8ded1
+                    auditSubjectID,
f8ded1
+                    ILogger.SUCCESS,
f8ded1
+                    requestID,
f8ded1
+                    keyId,
f8ded1
+                    null,
f8ded1
+                    approvers);
f8ded1
+        } catch (EBaseException e) {
f8ded1
+            auditRecoveryRequestProcessed(
f8ded1
+                    auditSubjectID,
f8ded1
+                    ILogger.FAILURE,
f8ded1
+                    requestID,
f8ded1
+                    keyId,
f8ded1
+                    e.getMessage(),
f8ded1
+                    approvers);
f8ded1
+            throw e;
f8ded1
+        }
f8ded1
         return false;  //TODO: return true?
f8ded1
     }
f8ded1
+
f8ded1
+    private void audit(AuditEvent event) {
f8ded1
+
f8ded1
+        String template = event.getMessage();
f8ded1
+        Object[] params = event.getParameters();
f8ded1
+
f8ded1
+        String message = CMS.getLogMessage(template, params);
f8ded1
+
f8ded1
+        audit(message);
f8ded1
+    }
f8ded1
+
f8ded1
+    private void audit(String msg) {
f8ded1
+        if (signedAuditLogger == null)
f8ded1
+            return;
f8ded1
+
f8ded1
+        signedAuditLogger.log(ILogger.EV_SIGNED_AUDIT,
f8ded1
+                null,
f8ded1
+                ILogger.S_SIGNED_AUDIT,
f8ded1
+                ILogger.LL_SECURITY,
f8ded1
+                msg);
f8ded1
+    }
f8ded1
+
f8ded1
+    private void auditRecoveryRequestProcessed(String subjectID, String status, RequestId requestID,
f8ded1
+            KeyId keyID, String reason, String recoveryAgents) {
f8ded1
+        audit(new SecurityDataRecoveryProcessedEvent(
f8ded1
+                subjectID,
f8ded1
+                status,
f8ded1
+                requestID,
f8ded1
+                keyID,
f8ded1
+                reason,
f8ded1
+                recoveryAgents));
f8ded1
+    }
f8ded1
 }