diff --git a/docs/source/running-doorman.rst b/docs/source/running-doorman.rst index 36b2dec670..0b920b83d6 100644 --- a/docs/source/running-doorman.rst +++ b/docs/source/running-doorman.rst @@ -53,7 +53,7 @@ Allowed parameters are: :revocation: Revocation service specific configuration - :localSigning: Configuration for local CRL signing using the file key store. If not defined t + :localSigning: Configuration for local CRL signing using the file key store. If not defined then an external signing process is assumed. :crlUpdateInterval: Validity time of the issued certificate revocation lists (in milliseconds). diff --git a/network-management/src/main/kotlin/com/r3/corda/networkmanage/tools/crr/submission/Main.kt b/network-management/src/main/kotlin/com/r3/corda/networkmanage/tools/crr/submission/Main.kt index 6ffba6acf6..75beedbb5a 100644 --- a/network-management/src/main/kotlin/com/r3/corda/networkmanage/tools/crr/submission/Main.kt +++ b/network-management/src/main/kotlin/com/r3/corda/networkmanage/tools/crr/submission/Main.kt @@ -29,7 +29,7 @@ fun submit(url: URL, inputReader: InputReader = ConsoleInputReader()) { val csrRequestId = inputReader.getOptionalInput("certificate signing request ID") val legalName = inputReader.getOptionalInput("node X.500 legal name")?.let { CordaX500Name.parse(it) } CertificateRevocationRequest.validateOptional(certificateSerialNumber, csrRequestId, legalName) - val reason = inputReader.getRequiredInput("revocation reason").let { CRLReason.valueOf(it) } + val reason = getReason(inputReader) val reporter = inputReader.getRequiredInput("reporter of the revocation request") val request = CertificateRevocationRequest(certificateSerialNumber, csrRequestId, legalName, reason, reporter) logger.debug("POST to $url request: $request") @@ -53,4 +53,29 @@ private fun InputReader.getRequiredInput(attributeName: String): String { } else { line } +} + +private enum class SupportedCrlReasons { + UNSPECIFIED, + KEY_COMPROMISE, + CA_COMPROMISE, + AFFILIATION_CHANGED, + SUPERSEDED, + CESSATION_OF_OPERATION, + PRIVILEGE_WITHDRAWN +} + +private fun getReason(inputReader: InputReader): CRLReason { + while (true) { + SupportedCrlReasons.values().forEachIndexed { index, value -> + println("${index + 1}. $value") + } + print("Selected the reason for the revocation:") + val input = inputReader.readLine()!!.toInt() + if (input < 1 || input > SupportedCrlReasons.values().size) { + println("Incorrect selection. Try again.") + } else { + return CRLReason.valueOf(SupportedCrlReasons.values()[input -1 ].name) + } + } } \ No newline at end of file diff --git a/network-management/src/test/kotlin/com/r3/corda/networkmanage/tools/crr/submission/CertificateRevocationRequestSubmissionToolTest.kt b/network-management/src/test/kotlin/com/r3/corda/networkmanage/tools/crr/submission/CertificateRevocationRequestSubmissionToolTest.kt index f3eb5301f6..793cf4b0ef 100644 --- a/network-management/src/test/kotlin/com/r3/corda/networkmanage/tools/crr/submission/CertificateRevocationRequestSubmissionToolTest.kt +++ b/network-management/src/test/kotlin/com/r3/corda/networkmanage/tools/crr/submission/CertificateRevocationRequestSubmissionToolTest.kt @@ -65,7 +65,7 @@ class CertificateRevocationRequestSubmissionToolTest { givenUserConsoleSequentialInputOnReadLine(request.certificateSerialNumber.toString(), request.csrRequestId!!, request.legalName.toString(), - request.reason.name, + "${request.reason.ordinal + 1}", request.reporter) val requestId = SecureHash.randomSHA256().toString()