Skip to content

Commit f642035

Browse files
Merge pull request #104 from digicert/update-dcvException-dnssec-details
update dcv and validation exception to include dnssec
2 parents 3bec30c + 8f6814a commit f642035

File tree

7 files changed

+330
-3
lines changed

7 files changed

+330
-3
lines changed

library/src/main/java/com/digicert/validation/exceptions/AcmeValidationException.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import com.digicert.validation.enums.DcvError;
44
import com.digicert.validation.methods.acme.validate.AcmeValidationRequest;
5+
import com.digicert.validation.mpic.api.dns.DnssecDetails;
56
import lombok.Getter;
67

8+
import java.util.Set;
9+
710
@Getter
811
public class AcmeValidationException extends ValidationException{
912
private final AcmeValidationRequest acmeValidationRequest;
@@ -12,4 +15,10 @@ public AcmeValidationException(DcvError dcvError, AcmeValidationRequest acmeVali
1215
super(dcvError);
1316
this.acmeValidationRequest = acmeValidationRequest;
1417
}
18+
19+
public AcmeValidationException(DcvError dcvError, AcmeValidationRequest acmeValidationRequest, DnssecDetails dnssecDetails) {
20+
super(Set.of(dcvError), dnssecDetails);
21+
this.acmeValidationRequest = acmeValidationRequest;
22+
}
23+
1524
}

library/src/main/java/com/digicert/validation/exceptions/DcvException.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.digicert.validation.exceptions;
22

33
import com.digicert.validation.enums.DcvError;
4+
import com.digicert.validation.mpic.api.dns.DnssecDetails;
45
import lombok.Getter;
56

67
import java.util.Set;
@@ -24,6 +25,11 @@ public class DcvException extends Exception {
2425
*/
2526
private final Set<DcvError> errors;
2627

28+
/**
29+
* The DNSSEC details associated with this exception.
30+
*/
31+
private final DnssecDetails dnssecDetails;
32+
2733
/**
2834
* Constructs a new DcvException with the specified DcvError.
2935
*
@@ -39,7 +45,7 @@ public DcvException(DcvError dcvError) {
3945
* @param errors the set of DCV errors that caused the exception to be thrown
4046
*/
4147
public DcvException(Set<DcvError> errors) {
42-
this(errors, null);
48+
this(errors, null, null);
4349
}
4450

4551
/**
@@ -49,7 +55,19 @@ public DcvException(Set<DcvError> errors) {
4955
* @param cause the cause of the exception
5056
*/
5157
public DcvException(Set<DcvError> dcvErrors, Throwable cause) {
58+
this(dcvErrors, cause, null);
59+
}
60+
61+
/**
62+
* Constructs a new DcvException with a set of specified DcvErrors, an optional cause, and DNSSEC details.
63+
*
64+
* @param dcvErrors the set of DCV errors that caused the exception to be thrown
65+
* @param cause the cause of the exception
66+
* @param dnssecDetails the DNSSEC details associated with this exception
67+
*/
68+
public DcvException(Set<DcvError> dcvErrors, Throwable cause, DnssecDetails dnssecDetails) {
5269
super("DcvException with errors = " + dcvErrors.stream().map(DcvError::toString).collect(Collectors.joining(",")), cause);
5370
this.errors = dcvErrors;
71+
this.dnssecDetails = dnssecDetails;
5472
}
5573
}

library/src/main/java/com/digicert/validation/exceptions/ValidationException.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.digicert.validation.enums.DcvError;
44
import com.digicert.validation.methods.file.FileValidator;
5+
import com.digicert.validation.mpic.api.dns.DnssecDetails;
56
import lombok.Getter;
67
import lombok.ToString;
78

@@ -40,4 +41,15 @@ public ValidationException(DcvError dcvError) {
4041
public ValidationException(Set<DcvError> errors) {
4142
super(errors);
4243
}
44+
45+
/**
46+
* Constructs a new ValidationException with a set of specified DcvErrors and an optional cause.
47+
*
48+
* @param dcvErrors the set of DCV errors
49+
* @param dnssecDetails the DNSSEC details associated with this exception
50+
*/
51+
public ValidationException(Set<DcvError> dcvErrors, DnssecDetails dnssecDetails) {
52+
super(dcvErrors, null, dnssecDetails);
53+
}
54+
4355
}

library/src/main/java/com/digicert/validation/methods/acme/validate/AcmeValidationHandler.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
import com.digicert.validation.exceptions.AcmeValidationException;
88
import com.digicert.validation.exceptions.ValidationException;
99
import com.digicert.validation.methods.file.validate.MpicFileDetails;
10+
import com.digicert.validation.mpic.MpicDetails;
1011
import com.digicert.validation.mpic.MpicDnsService;
1112
import com.digicert.validation.mpic.MpicFileService;
1213
import com.digicert.validation.mpic.api.dns.DnsRecord;
14+
import com.digicert.validation.mpic.api.dns.DnssecStatus;
1315
import com.digicert.validation.mpic.api.dns.MpicDnsDetails;
1416
import lombok.extern.slf4j.Slf4j;
1517
import org.apache.commons.lang3.StringUtils;
@@ -90,7 +92,7 @@ private AcmeValidationResponse validateUsingAcmeDns(AcmeValidationRequest reques
9092
// If the MPIC file details contain an error, we will not throw an exception
9193
log.atLevel(logLevelForDcvErrors).log("event_id={} domain={} reason={}",
9294
LogEvents.ACME_VALIDATION_FAILED, request.getDomain(), mpicDnsDetails.dcvError());
93-
throw new AcmeValidationException(mpicDnsDetails.dcvError(), request);
95+
handleAcmeValidationFailure(mpicDnsDetails.dcvError(), request, mpicDnsDetails.mpicDetails());
9496
}
9597

9698
boolean isValid = mpicDnsDetails.dnsRecords().stream()
@@ -103,12 +105,22 @@ private AcmeValidationResponse validateUsingAcmeDns(AcmeValidationRequest reques
103105
if (!isValid) {
104106
log.atLevel(logLevelForDcvErrors).log("event_id={} domain={} reason={}",
105107
LogEvents.ACME_VALIDATION_FAILED, request.getDomain(), DcvError.RANDOM_VALUE_NOT_FOUND);
106-
throw new AcmeValidationException(DcvError.RANDOM_VALUE_NOT_FOUND, request);
108+
handleAcmeValidationFailure(DcvError.RANDOM_VALUE_NOT_FOUND, request, mpicDnsDetails.mpicDetails());
107109
}
108110

109111
return new AcmeValidationResponse(mpicDnsDetails.mpicDetails(), dnsRecordName, null);
110112
}
111113

114+
private void handleAcmeValidationFailure(DcvError dcvError, AcmeValidationRequest request, MpicDetails mpicDetails) throws AcmeValidationException {
115+
if (mpicDetails != null &&
116+
mpicDetails.dnssecDetails() != null &&
117+
mpicDetails.dnssecDetails().dnssecStatus() != DnssecStatus.NOT_CHECKED) {
118+
throw new AcmeValidationException(dcvError, request, mpicDetails.dnssecDetails());
119+
}
120+
121+
throw new AcmeValidationException(dcvError, request);
122+
}
123+
112124
private String calculateDnsTxtValue(AcmeValidationRequest request) throws ValidationException {
113125
String keyAuthorization = request.getRandomValue() + "." + request.getAcmeThumbprint();
114126
try {

library/src/main/java/com/digicert/validation/methods/dns/DnsValidator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import com.digicert.validation.methods.dns.validate.DnsValidationHandler;
1313
import com.digicert.validation.methods.dns.validate.DnsValidationRequest;
1414
import com.digicert.validation.methods.dns.validate.DnsValidationResponse;
15+
import com.digicert.validation.mpic.api.dns.DnssecDetails;
16+
import com.digicert.validation.mpic.api.dns.DnssecStatus;
1517
import com.digicert.validation.random.RandomValueGenerator;
1618
import com.digicert.validation.random.RandomValueVerifier;
1719
import com.digicert.validation.utils.DomainNameUtils;
@@ -137,6 +139,13 @@ public DomainValidationEvidence validate(DnsValidationRequest dnsValidationReque
137139
dnsValidationRequest.getDnsType().toString(),
138140
dnsValidationResponse.errors());
139141

142+
if (dnsValidationResponse.mpicDetails() != null &&
143+
dnsValidationResponse.mpicDetails().dnssecDetails() != null &&
144+
!DnssecStatus.NOT_CHECKED.equals(dnsValidationResponse.mpicDetails().dnssecDetails().dnssecStatus())) {
145+
DnssecDetails dnssecDetails = dnsValidationResponse.mpicDetails().dnssecDetails();
146+
throw new ValidationException(dnsValidationResponse.errors(), dnssecDetails);
147+
}
148+
140149
throw new ValidationException(dnsValidationResponse.errors());
141150
}
142151
}

0 commit comments

Comments
 (0)