|
62 | 62 | import java.util.HashMap; |
63 | 63 | import java.util.List; |
64 | 64 | import java.util.Map; |
| 65 | +import java.util.Optional; |
65 | 66 |
|
66 | 67 | import static java.util.Objects.requireNonNull; |
67 | 68 |
|
@@ -105,12 +106,13 @@ public List<RevocationInfo> validateCertificateNotRevoked(X509Certificate subjec |
105 | 106 | OcspService primaryService = resolvePrimaryOcspService(subjectCertificate); |
106 | 107 | CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker(primaryService.getAccessLocation().toASCIIString()); |
107 | 108 |
|
108 | | - if (primaryService.getFallbackService() == null) { |
| 109 | + Optional<FallbackOcspService> firstFallbackServiceOpt = primaryService.getFallbackService(); |
| 110 | + if (firstFallbackServiceOpt.isEmpty()) { |
109 | 111 | return List.of(request(primaryService, subjectCertificate, issuerCertificate, false)); |
110 | 112 | } |
111 | 113 |
|
112 | 114 | List<RevocationInfo> revocationInfoList = new ArrayList<>(); |
113 | | - CheckedSupplier<RevocationInfo> fallbackSupplier = buildFallbackSupplier(primaryService, subjectCertificate, |
| 115 | + CheckedSupplier<RevocationInfo> fallbackSupplier = buildFallbackSupplier(firstFallbackServiceOpt.get(), subjectCertificate, |
114 | 116 | issuerCertificate, revocationInfoList); |
115 | 117 | CheckedSupplier<RevocationInfo> decoratedSupplier = decorateWithResilience(primaryService, subjectCertificate, |
116 | 118 | issuerCertificate, revocationInfoList, fallbackSupplier, circuitBreaker); |
@@ -146,11 +148,10 @@ private CircuitBreakerStatistics createCircuitBreakerStatistics(CircuitBreaker c |
146 | 148 | ); |
147 | 149 | } |
148 | 150 |
|
149 | | - private CheckedSupplier<RevocationInfo> buildFallbackSupplier(OcspService primaryService, |
| 151 | + private CheckedSupplier<RevocationInfo> buildFallbackSupplier(FallbackOcspService firstFallbackService, |
150 | 152 | X509Certificate subjectCertificate, |
151 | 153 | X509Certificate issuerCertificate, |
152 | 154 | List<RevocationInfo> revocationInfoList) { |
153 | | - final FallbackOcspService firstFallbackService = primaryService.getFallbackService(); |
154 | 155 | CheckedSupplier<RevocationInfo> firstFallbackSupplier = () -> { |
155 | 156 | try { |
156 | 157 | return request(firstFallbackService, subjectCertificate, issuerCertificate, true); |
@@ -329,7 +330,7 @@ private RevocationInfo request(OcspService ocspService, X509Certificate subjectC |
329 | 330 | RevocationInfo revocationInfo = getRevocationInfo(ocspResponderUri, e, request, response, requestDuration, responseTime); |
330 | 331 | throw new ResilientUserCertificateRevokedException(new ValidationInfo(subjectCertificate, List.of(revocationInfo))); |
331 | 332 | } catch (OCSPClientException e) { |
332 | | - RevocationInfo revocationInfo = getRevocationInfo(ocspResponderUri, e, request, response, requestDuration, responseTime); |
| 333 | + RevocationInfo revocationInfo = getRevocationInfo(ocspResponderUri, e, request, null, null, null); |
333 | 334 | revocationInfo.ocspResponseAttributes().put(RevocationInfo.KEY_OCSP_RESPONSE, e.getResponseBody()); |
334 | 335 | revocationInfo.ocspResponseAttributes().put(RevocationInfo.KEY_HTTP_STATUS_CODE, e.getStatusCode()); |
335 | 336 | throw new ResilientUserCertificateOCSPCheckFailedException(new ValidationInfo(subjectCertificate, List.of(revocationInfo))); |
|
0 commit comments