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

Reply via email to