Repository: camel Updated Branches: refs/heads/master 812591a19 -> 2ca68387b
CAMEL-7999: More components include documentation Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2ca68387 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2ca68387 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2ca68387 Branch: refs/heads/master Commit: 2ca68387b75abeba143e65a0edba434c9f034661 Parents: 812591a Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Jan 5 12:00:32 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jan 5 12:00:32 2015 +0100 ---------------------------------------------------------------------- .../camel/component/crypto/CryptoOperation.java | 22 +++++++ .../crypto/DigitalSignatureComponent.java | 6 +- .../crypto/DigitalSignatureConfiguration.java | 69 ++++++++++++++------ .../crypto/DigitalSignatureEndpoint.java | 21 ++++-- .../processor/DigitalSignatureProcessor.java | 2 +- .../crypto/processor/SigningProcessor.java | 2 +- .../crypto/processor/VerifyingProcessor.java | 4 +- 7 files changed, 92 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/CryptoOperation.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/CryptoOperation.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/CryptoOperation.java new file mode 100644 index 0000000..b1c860f --- /dev/null +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/CryptoOperation.java @@ -0,0 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.crypto; + +public enum CryptoOperation { + + sign, verify +} http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureComponent.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureComponent.java index 95ef3fb..9afe028 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureComponent.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureComponent.java @@ -23,20 +23,22 @@ import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.util.ObjectHelper; /** * <code>DigitalSignatureComponent</code> */ -public class DigitalSignatureComponent extends DefaultComponent { +public class DigitalSignatureComponent extends UriEndpointComponent { private DigitalSignatureConfiguration configuration; public DigitalSignatureComponent() { + super(DigitalSignatureEndpoint.class); } public DigitalSignatureComponent(CamelContext context) { - super(context); + super(context, DigitalSignatureEndpoint.class); } protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java index 554db3b..d3ccf98 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java @@ -28,32 +28,54 @@ import java.security.cert.Certificate; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.spi.UriParam; +import org.apache.camel.spi.UriParams; +import org.apache.camel.spi.UriPath; import org.apache.camel.util.jsse.KeyStoreParameters; - +@UriParams public class DigitalSignatureConfiguration implements Cloneable, CamelContextAware { + private CamelContext context; + + @UriPath + private CryptoOperation cryptoOperation; + @UriParam private PrivateKey privateKey; + @UriParam private KeyStore keystore; + @UriParam private SecureRandom secureRandom; + @UriParam(defaultValue = "SHA1WithDSA") private String algorithm = "SHA1WithDSA"; - private Integer bufferSize = Integer.valueOf(2048); + @UriParam(defaultValue = "" + 2048) + private Integer bufferSize = 2048; + @UriParam private String provider; + @UriParam private String signatureHeaderName; + @UriParam private String alias; + @UriParam private char[] password; + @UriParam private PublicKey publicKey; + @UriParam private Certificate certificate; - private CamelContext context; /** references that should be resolved when the context changes */ + @UriParam private String publicKeyName; + @UriParam private String certificateName; + @UriParam private String privateKeyName; + @UriParam private String keystoreName; + @UriParam private String randomName; + @UriParam(defaultValue = "true") private boolean clearHeaders = true; - private String operation; public DigitalSignatureConfiguration copy() { try { @@ -68,13 +90,14 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa } public void setCamelContext(CamelContext camelContext) { + // TODO: this is wrong a configuration should not have CamelContext this.context = camelContext; // try to retrieve the references once the context is available. - setKeystore(keystoreName); - setPublicKey(publicKeyName); - setPrivateKey(privateKeyName); - setCertificate(certificateName); - setSecureRandom(randomName); + setKeystoreName(keystoreName); + setPublicKeyName(publicKeyName); + setPrivateKeyName(privateKeyName); + setCertificateName(certificateName); + setSecureRandomName(randomName); } /** @@ -155,7 +178,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa /** * Sets the reference name for a PrivateKey that can be fond in the registry. */ - public void setPrivateKey(String privateKeyName) { + public void setPrivateKeyName(String privateKeyName) { if (context != null && privateKeyName != null) { PrivateKey pk = context.getRegistry().lookupByNameAndType(privateKeyName, PrivateKey.class); if (pk != null) { @@ -177,7 +200,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa /** * Sets the reference name for a publicKey that can be fond in the registry. */ - public void setPublicKey(String publicKeyName) { + public void setPublicKeyName(String publicKeyName) { if (context != null && publicKeyName != null) { PublicKey pk = context.getRegistry().lookupByNameAndType(publicKeyName, PublicKey.class); if (pk != null) { @@ -229,14 +252,13 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa * exchange based on its payload. */ public void setCertificate(Certificate certificate) { - this.certificate = certificate; } /** * Sets the reference name for a PrivateKey that can be fond in the registry. */ - public void setCertificate(String certificateName) { + public void setCertificateName(String certificateName) { if (context != null && certificateName != null) { Certificate certificate = context.getRegistry().lookupByNameAndType(certificateName, Certificate.class); if (certificate != null) { @@ -275,7 +297,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa /** * Sets the reference name for a Keystore that can be fond in the registry. */ - public void setKeystore(String keystoreName) { + public void setKeystoreName(String keystoreName) { if (context != null && keystoreName != null) { KeyStore keystore = context.getRegistry().lookupByNameAndType(keystoreName, KeyStore.class); if (keystore != null) { @@ -318,7 +340,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa /** * Sets the reference name for a SecureRandom that can be fond in the registry. */ - public void setSecureRandom(String randomName) { + public void setSecureRandomName(String randomName) { if (context != null && randomName != null) { SecureRandom random = context.getRegistry().lookupByNameAndType(randomName, SecureRandom.class); if (keystore != null) { @@ -375,7 +397,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa * Get the name of the message header that should be used to store the * base64 encoded signature. This defaults to 'CamelDigitalSignature' */ - public String getSignatureHeader() { + public String getSignatureHeaderName() { return signatureHeaderName != null ? signatureHeaderName : DigitalSignatureConstants.SIGNATURE; } @@ -383,7 +405,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa * Set the name of the message header that should be used to store the * base64 encoded signature. This defaults to 'CamelDigitalSignature' */ - public void setSignatureHeader(String signatureHeaderName) { + public void setSignatureHeaderName(String signatureHeaderName) { this.signatureHeaderName = signatureHeaderName; } @@ -395,7 +417,7 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa * * @return true if the Signature headers should be unset, false otherwise */ - public boolean getClearHeaders() { + public boolean isClearHeaders() { return clearHeaders; } @@ -416,13 +438,18 @@ public class DigitalSignatureConfiguration implements Cloneable, CamelContextAwa * @param operation the operation supplied after the crypto scheme */ public void setCryptoOperation(String operation) { - this.operation = operation; + this.cryptoOperation = CryptoOperation.valueOf(operation); + } + + public void setCryptoOperation(CryptoOperation operation) { + this.cryptoOperation = operation; } /** * Gets the Crypto operation that was supplied in the the crypto scheme in the endpoint uri */ - public String getCryptoOperation() { - return operation; + public CryptoOperation getCryptoOperation() { + return cryptoOperation; } + } http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureEndpoint.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureEndpoint.java index fd1558e..f4f1299 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureEndpoint.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureEndpoint.java @@ -28,11 +28,15 @@ import org.apache.camel.Producer; import org.apache.camel.component.crypto.processor.SigningProcessor; import org.apache.camel.component.crypto.processor.VerifyingProcessor; import org.apache.camel.impl.DefaultEndpoint; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriParam; /** * <code>DigitalSignatureEndpoint</code> */ +@UriEndpoint(scheme = "crypto", label = "security,transformation") public class DigitalSignatureEndpoint extends DefaultEndpoint { + @UriParam private DigitalSignatureConfiguration configuration; public DigitalSignatureEndpoint(String uri, DigitalSignatureComponent component, DigitalSignatureConfiguration configuration) { @@ -41,8 +45,11 @@ public class DigitalSignatureEndpoint extends DefaultEndpoint { } public Producer createProducer() throws Exception { - return "sign".equals(configuration.getCryptoOperation()) - ? new DigitalSignatureProducer(this, new SigningProcessor(configuration)) : new DigitalSignatureProducer(this, new VerifyingProcessor(configuration)); + if (CryptoOperation.sign == configuration.getCryptoOperation()) { + return new DigitalSignatureProducer(this, new SigningProcessor(configuration)); + } else { + return new DigitalSignatureProducer(this, new VerifyingProcessor(configuration)); + } } public Consumer createConsumer(Processor processor) throws Exception { @@ -74,7 +81,7 @@ public class DigitalSignatureEndpoint extends DefaultEndpoint { } public void setPublicKey(String publicKeyName) { - getConfiguration().setPublicKey(publicKeyName); + getConfiguration().setPublicKeyName(publicKeyName); } public Certificate getCertificate() throws Exception { @@ -138,11 +145,11 @@ public class DigitalSignatureEndpoint extends DefaultEndpoint { } public String getSignatureHeader() { - return getConfiguration().getSignatureHeader(); + return getConfiguration().getSignatureHeaderName(); } public void setSignatureHeader(String signatureHeaderName) { - getConfiguration().setSignatureHeader(signatureHeaderName); + getConfiguration().setSignatureHeaderName(signatureHeaderName); } public String getAlias() { @@ -153,8 +160,8 @@ public class DigitalSignatureEndpoint extends DefaultEndpoint { getConfiguration().setAlias(alias); } - public boolean getClearHeaders() { - return getConfiguration().getClearHeaders(); + public boolean isClearHeaders() { + return getConfiguration().isClearHeaders(); } public void setClearHeaders(boolean clearHeaders) { http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java index ae168f0..040f367 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java @@ -87,7 +87,7 @@ public abstract class DigitalSignatureProcessor implements Processor { } protected void clearMessageHeaders(Message in) { - if (config.getClearHeaders()) { + if (config.isClearHeaders()) { Map<String, Object> headers = in.getHeaders(); for (Field f : DigitalSignatureConstants.class.getFields()) { headers.remove(ObjectHelper.lookupConstantFieldValue(DigitalSignatureConstants.class, f.getName())); http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java index e7f39aa..4948dfb 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java @@ -44,7 +44,7 @@ public class SigningProcessor extends DigitalSignatureProcessor { clearMessageHeaders(in); Message out = exchange.getOut(); out.copyFrom(in); - out.setHeader(config.getSignatureHeader(), new Base64().encode(signature)); + out.setHeader(config.getSignatureHeaderName(), new Base64().encode(signature)); } protected Signature initSignatureService(Exchange exchange) throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/2ca68387/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java index 5780b0d..4190a19 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java @@ -61,9 +61,9 @@ public class VerifyingProcessor extends DigitalSignatureProcessor { } private byte[] getSignatureFromExchange(Exchange exchange) throws Exception { - String encodedSignature = ExchangeHelper.getMandatoryHeader(exchange, config.getSignatureHeader(), String.class); + String encodedSignature = ExchangeHelper.getMandatoryHeader(exchange, config.getSignatureHeaderName(), String.class); if (encodedSignature == null) { - throw new IllegalStateException("Cannot verify exchange as no " + config.getSignatureHeader() + " header is present."); + throw new IllegalStateException("Cannot verify exchange as no " + config.getSignatureHeaderName() + " header is present."); } return new Base64().decode(encodedSignature); }