This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
commit 8dd50bb8907549ce0cf43c5b4d216d14cab83ff2 Author: Emerson Pinter <e...@pinter.dev> AuthorDate: Thu Mar 20 13:47:57 2025 -0300 Store SignatureRecord in FailException With this change is possible to use other fields like selector to generate a results header. --- .../main/java/org/apache/james/jdkim/DKIMVerifier.java | 18 +++++++++--------- .../apache/james/jdkim/exceptions/FailException.java | 17 +++++++++++++---- .../james/jdkim/exceptions/PermFailException.java | 11 +++++++++-- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java index 546c01c..2648a5e 100644 --- a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java +++ b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java @@ -119,27 +119,27 @@ public class DKIMVerifier extends DKIMCommon { .matches()) { throw new PermFailException("inapplicable key identity local=" + sign.getIdentityLocalPart() + " Pattern: " - + pkr.getGranularityPattern().pattern(), sign.getIdentity().toString()); + + pkr.getGranularityPattern().pattern(), sign); } if (!pkr.isHashMethodSupported(sign.getHashMethod())) { throw new PermFailException("inappropriate hash for a=" - + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString()); + + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign); } if (!pkr.isKeyTypeSupported(sign.getHashKeyType())) { throw new PermFailException("inappropriate key type for a=" - + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString()); + + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign); } if (pkr.isDenySubdomains()) { if (!sign.getIdentity().toString().toLowerCase().endsWith( ("@" + sign.getDToken()).toLowerCase())) { throw new PermFailException( - "AUID in subdomain of SDID is not allowed by the public key record.", sign.getIdentity().toString()); + "AUID in subdomain of SDID is not allowed by the public key record.", sign); } } } catch (IllegalStateException e) { - throw new PermFailException("Invalid public key: " + e.getMessage(), sign.getIdentity().toString()); + throw new PermFailException("Invalid public key: " + e.getMessage(), sign); } } @@ -179,16 +179,16 @@ public class DKIMVerifier extends DKIMCommon { } if (key == null) { if (lastTempFailure != null) { - if (sign != null) lastTempFailure.setRelatedRecordIdentity(sign.getIdentity().toString()); + if (sign != null) lastTempFailure.setRelatedRecord(sign); throw lastTempFailure; } else if (lastPermFailure != null) { - if (sign != null) lastPermFailure.setRelatedRecordIdentity(sign.getIdentity().toString()); + if (sign != null) lastPermFailure.setRelatedRecord(sign); throw lastPermFailure; } // this is unexpected because the publicKeySelector always returns // null or exception else { throw new PermFailException( - "no key for signature [unexpected condition]", sign.getIdentity().toString()); + "no key for signature [unexpected condition]", sign); } } return key; @@ -482,7 +482,7 @@ public class DKIMVerifier extends DKIMCommon { signatureCheck(h, sign, headers, signature); if (!signature.verify(decoded)) - throw new PermFailException("Header signature does not verify"); + throw new PermFailException("Header signature does not verify", sign); } catch (InvalidKeyException e) { throw new PermFailException(e.getMessage(), e); } catch (NoSuchAlgorithmException e) { diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java index 17cc7d0..cf33fe0 100644 --- a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java +++ b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java @@ -19,11 +19,13 @@ package org.apache.james.jdkim.exceptions; +import org.apache.james.jdkim.api.SignatureRecord; + public class FailException extends Exception { private static final long serialVersionUID = 1584103235607992818L; - private String relatedRecordIdentity = null; + private SignatureRecord relatedRecord = null; public FailException(String error) { super(error); @@ -34,10 +36,17 @@ public class FailException extends Exception { } public String getRelatedRecordIdentity() { - return relatedRecordIdentity; + if(relatedRecord != null) { + return relatedRecord.getIdentity().toString(); + } + return null; + } + + public SignatureRecord getRelatedRecord() { + return relatedRecord; } - public void setRelatedRecordIdentity(String relatedRecordIdentity) { - this.relatedRecordIdentity = relatedRecordIdentity; + public void setRelatedRecord(SignatureRecord relatedRecord) { + this.relatedRecord = relatedRecord; } } diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java index 2673e86..2fe72ff 100644 --- a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java +++ b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java @@ -20,6 +20,8 @@ package org.apache.james.jdkim.exceptions; +import org.apache.james.jdkim.api.SignatureRecord; + public class PermFailException extends FailException { private static final long serialVersionUID = 1304736020453821093L; @@ -32,9 +34,14 @@ public class PermFailException extends FailException { super(string, e); } - public PermFailException(String string, String signatureIdentity) { + public PermFailException(String string, SignatureRecord signatureRecord, Exception e) { + super(string, e); + setRelatedRecord(signatureRecord); + } + + public PermFailException(String string, SignatureRecord signatureRecord) { super(string); - setRelatedRecordIdentity(signatureIdentity); + setRelatedRecord(signatureRecord); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org