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&clearHeaders=false" /> + <to uri="mock:result"/> + </route> + <!-- END SNIPPET: clearheaders --> </camelContext> <bean id="keystore" class="org.apache.camel.component.crypto.SpringSignatureTest" factory-method="keystore"/>