You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ha...@apache.org on 2012/02/09 04:39:21 UTC

svn commit: r1242214 - in /camel/trunk/components/camel-crypto/src: main/java/org/apache/camel/component/crypto/ main/java/org/apache/camel/component/crypto/processor/ test/java/org/apache/camel/component/crypto/ test/resources/org/apache/camel/compone...

Author: hadrian
Date: Thu Feb  9 03:39:20 2012
New Revision: 1242214

URL: http://svn.apache.org/viewvc?rev=1242214&view=rev
Log:
CAMEL-4996. Fix clearHeaders option in camel-crypto

Modified:
    camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
    camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java
    camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
    camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
    camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
    camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
    camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml

Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java Thu Feb  9 03:39:20 2012
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE;
 
 public class DigitalSignatureConfiguration implements Cloneable, CamelContextAware {
 
@@ -50,7 +49,7 @@ public class DigitalSignatureConfigurati
     private String privateKeyName;
     private String keystoreName;
     private String randomName;
-    private boolean clearHeaders;
+    private boolean clearHeaders = true;
     private String operation;
 
     public DigitalSignatureConfiguration copy() {
@@ -367,7 +366,7 @@ public class DigitalSignatureConfigurati
      * base64 encoded signature. This defaults to 'CamelDigitalSignature'
      */
     public String getSignatureHeader() {
-        return signatureHeaderName != null ? signatureHeaderName : SIGNATURE;
+        return signatureHeaderName != null ? signatureHeaderName : DigitalSignatureConstants.SIGNATURE;
     }
 
     /**

Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java Thu Feb  9 03:39:20 2012
@@ -20,11 +20,11 @@ package org.apache.camel.component.crypt
  * <code>DigitalSignatureConstants</code> contains Constants for use as Message
  * header keys.
  */
-public interface DigitalSignatureConstants {
+public final class DigitalSignatureConstants {
 
-    String SIGNATURE_PRIVATE_KEY = "CamelSignaturePrivateKey";
-    String SIGNATURE_PUBLIC_KEY_OR_CERT = "CamelSignaturePublicKeyOrCert";
-    String SIGNATURE = "CamelDigitalSignature";
-    String KEYSTORE_ALIAS = "CamelSignatureKeyStoreAlias";
-    String KEYSTORE_PASSWORD = "CamelSignatureKeyStorePassword";
+    public static final String SIGNATURE_PRIVATE_KEY = "CamelSignaturePrivateKey";
+    public static final String SIGNATURE_PUBLIC_KEY_OR_CERT = "CamelSignaturePublicKeyOrCert";
+    public static final String SIGNATURE = "CamelDigitalSignature";
+    public static final String KEYSTORE_ALIAS = "CamelSignatureKeyStoreAlias";
+    public static final String KEYSTORE_PASSWORD = "CamelSignatureKeyStorePassword";
 }

Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java Thu Feb  9 03:39:20 2012
@@ -30,8 +30,8 @@ import org.apache.camel.Processor;
 import org.apache.camel.component.crypto.DigitalSignatureConfiguration;
 import org.apache.camel.component.crypto.DigitalSignatureConstants;
 import org.apache.camel.util.ExchangeHelper;
+import org.apache.camel.util.ObjectHelper;
 
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.KEYSTORE_ALIAS;
 
 public abstract class DigitalSignatureProcessor implements Processor {
 
@@ -56,7 +56,7 @@ public abstract class DigitalSignaturePr
     protected String getAlias(Exchange exchange) throws Exception {
         KeyStore keystore = config.getKeystore();
         if (keystore != null) {
-            String alias = exchange.getIn().getHeader(KEYSTORE_ALIAS, String.class);
+            String alias = exchange.getIn().getHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, String.class);
             if (alias == null) {
                 alias = config.getAlias();
             }
@@ -85,7 +85,7 @@ public abstract class DigitalSignaturePr
         if (config.getClearHeaders()) {
             Map<String, Object> headers = in.getHeaders();
             for (Field f : DigitalSignatureConstants.class.getFields()) {
-                headers.remove(f.getName());
+                headers.remove(ObjectHelper.lookupConstantFieldValue(DigitalSignatureConstants.class, f.getName()));
             }
         }
     }

Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java Thu Feb  9 03:39:20 2012
@@ -28,7 +28,6 @@ import org.apache.camel.component.crypto
 import org.apache.camel.component.crypto.DigitalSignatureConstants;
 import org.apache.commons.codec.binary.Base64;
 
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY;
 
 public class SigningProcessor extends DigitalSignatureProcessor {
 
@@ -64,10 +63,11 @@ public class SigningProcessor extends Di
         PrivateKey pk = config.getPrivateKey(getAlias(exchange), getKeyPassword(exchange));
 
         if (pk == null) {
-            pk = exchange.getIn().getHeader(SIGNATURE_PRIVATE_KEY, PrivateKey.class);
+            pk = exchange.getIn().getHeader(DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, PrivateKey.class);
             if (pk == null) {
-                throw new IllegalStateException(format("Cannot sign message as no Private Key has been supplied. Either supply one in"
-                                                       + " the route definition sign(keystore, alias) or sign(privateKey) or via the message header '%s'", SIGNATURE_PRIVATE_KEY));
+                throw new IllegalStateException(format("Cannot sign message as no Private Key has been supplied. "
+                    + "Either supply one in the route definition sign(keystore, alias) or sign(privateKey) "
+                    + "or via the message header '%s'", DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY));
             }
         }
         return pk;

Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java Thu Feb  9 03:39:20 2012
@@ -23,10 +23,10 @@ import java.security.cert.Certificate;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.component.crypto.DigitalSignatureConfiguration;
+import org.apache.camel.component.crypto.DigitalSignatureConstants;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.commons.codec.binary.Base64;
 
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT;
 
 /**
  * <code>VerifyingProcessor</code>
@@ -44,7 +44,7 @@ public class VerifyingProcessor extends 
             PublicKey pk = getPublicKeyOrCertificateFromHeader(exchange, PublicKey.class, config.getPublicKey());
             if (pk == null) {
                 throw new IllegalStateException(String.format("Cannot verify signature as no Public Key or Certificate has been supplied."
-                        + " Either supply one in the route definition or via the message header '%s'", SIGNATURE_PUBLIC_KEY_OR_CERT));
+                        + " Either supply one in the route definition or via the message header '%s'", DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT));
             }
             signer.initVerify(pk);
         } else {
@@ -74,7 +74,7 @@ public class VerifyingProcessor extends 
     }
 
     private <T> T getPublicKeyOrCertificateFromHeader(Exchange exchange, Class<? extends T> verificationType, T defaultsTo) {
-        T pkOrCert = exchange.getIn().getHeader(SIGNATURE_PUBLIC_KEY_OR_CERT, verificationType);
+        T pkOrCert = exchange.getIn().getHeader(DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, verificationType);
         if (pkOrCert == null) {
             pkOrCert = defaultsTo;
         }

Modified: camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java (original)
+++ camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java Thu Feb  9 03:39:20 2012
@@ -30,6 +30,7 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -135,6 +136,12 @@ public class SignatureTests extends Came
                 from("direct:headerkey-verify").to("crypto:verify://alias", "mock:result");
                 // END SNIPPET: headerkey
             }
+        }, new RouteBuilder() {
+            public void configure() throws Exception {
+                // START SNIPPET: clearheaders
+                from("direct:headers").to("crypto:sign://headers?privateKey=#myPrivateKey", "crypto:verify://headers?publicKey=#myPublicKey&clearHeaders=false", "mock:result");
+                // END SNIPPET: clearheaders
+            }
         }};
     }
 
@@ -143,6 +150,11 @@ public class SignatureTests extends Came
         setupMock();
         sendBody("direct:keypair", payload);
         assertMockEndpointsSatisfied();
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        Exchange e = mock.getExchanges().get(0);
+        Message result = e == null ? null : e.hasOut() ? e.getOut() : e.getIn();
+        assertNull(result.getHeader(DigitalSignatureConstants.SIGNATURE));
     }
 
     @Test
@@ -268,6 +280,19 @@ public class SignatureTests extends Came
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testVerifyHeadersNotCleared() throws Exception {
+        setupMock();
+        template.requestBody("direct:headers", payload);
+        assertMockEndpointsSatisfied();
+        assertMockEndpointsSatisfied();
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        Exchange e = mock.getExchanges().get(0);
+        Message result = e == null ? null : e.hasOut() ? e.getOut() : e.getIn();
+        assertNotNull(result.getHeader(DigitalSignatureConstants.SIGNATURE));
+    }
+
     private MockEndpoint setupMock() {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedBodiesReceived(payload);

Modified: camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml (original)
+++ camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml Thu Feb  9 03:39:20 2012
@@ -118,6 +118,14 @@
             <to uri="mock:result"/>
         </route>    
         <!-- END SNIPPET: headerkey -->
+        <!-- START SNIPPET: clearheaders -->
+        <route>
+            <from uri="direct:headers"/>
+            <to uri="crypto:sign://headers?privateKey=#myPrivateKey" />
+            <to uri="crypto:verify://headers?publicKey=#myPublicKey&amp;clearHeaders=false" />
+            <to uri="mock:result"/>
+        </route>
+        <!-- END SNIPPET: clearheaders -->
     </camelContext>
 
     <bean id="keystore" class="org.apache.camel.component.crypto.SpringSignatureTest" factory-method="keystore"/>