Author: davsclaus Date: Sat Apr 2 10:31:37 2011 New Revision: 1087994 URL: http://svn.apache.org/viewvc?rev=1087994&view=rev Log: CAMEL-3804: Added support for custom SecurityPolicy and Extension to camel-cometd. Fixed CS. Thanks to Rob van de Meulengraaf for the patch.
Added: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java (with props) camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/io/ camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/io/iframe.js (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/io/script.js (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd/ack.js (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd/reload.js (with props) camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/org/ camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/org/cometd.js (with props) Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConverters.java camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducer.java camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveMain.java camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslCometdProducerConsumerTest.java camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/dojo.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/dojo.js.uncompressed.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/dojo.xd.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojo/dojo.xd.js.uncompressed.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd.js.uncompressed.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd.xd.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd.xd.js.uncompressed.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd/timestamp.js camel/trunk/components/camel-cometd/src/test/resources/webapp/dojo/dojox/cometd/timesync.js camel/trunk/components/camel-cometd/src/test/resources/webapp/index.html Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java Sat Apr 2 10:31:37 2011 @@ -17,11 +17,15 @@ package org.apache.camel.component.cometd; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.camel.Endpoint; import org.apache.camel.impl.DefaultComponent; +import org.cometd.Extension; +import org.cometd.SecurityPolicy; import org.cometd.server.AbstractBayeux; import org.cometd.server.continuation.ContinuationCometdServlet; import org.eclipse.jetty.server.Connector; @@ -37,8 +41,6 @@ import org.slf4j.LoggerFactory; /** * Component for Jetty Cometd - * - * @version */ public class CometdComponent extends DefaultComponent { private static final transient Logger LOG = LoggerFactory.getLogger(CometdComponent.class); @@ -50,6 +52,8 @@ public class CometdComponent extends Def private String sslPassword; private String sslKeystore; private SslSocketConnector sslSocketConnector; + private SecurityPolicy securityPolicy; + private List<Extension> extensions; class ConnectorRef { Connector connector; @@ -57,7 +61,7 @@ public class CometdComponent extends Def int refCount; public ConnectorRef(Connector connector, - ContinuationCometdServlet servlet) { + ContinuationCometdServlet servlet) { this.connector = connector; this.servlet = servlet; increment(); @@ -102,7 +106,7 @@ public class CometdComponent extends Def connector.setHost(endpoint.getUri().getHost()); if ("localhost".equalsIgnoreCase(endpoint.getUri().getHost())) { LOG.warn("You use localhost interface! It means that no external connections will be available." - + " Don't you want to use 0.0.0.0 instead (all network interfaces)?"); + + " Don't you want to use 0.0.0.0 instead (all network interfaces)?"); } getServer().addConnector(connector); @@ -114,8 +118,18 @@ public class CometdComponent extends Def } else { connectorRef.increment(); } + AbstractBayeux bayeux = connectorRef.servlet.getBayeux(); bayeux.setJSONCommented(endpoint.isJsonCommented()); + + if (securityPolicy != null) { + bayeux.setSecurityPolicy(securityPolicy); + } + if (extensions != null) { + for (Extension extension : extensions) { + bayeux.addExtension(extension); + } + } prodcon.setBayeux(bayeux); } } @@ -145,26 +159,26 @@ public class CometdComponent extends Def ContinuationCometdServlet servlet = new ContinuationCometdServlet(); ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.NO_SECURITY | ServletContextHandler.NO_SESSIONS); - context.setConnectorNames(new String[] {connector.getName()}); + context.setConnectorNames(new String[]{connector.getName()}); ServletHolder holder = new ServletHolder(); holder.setServlet(servlet); - + // Use baseResource to pass as a parameter the url // pointing to by example classpath:webapp if (endpoint.getBaseResource() != null) { String[] resources = endpoint.getBaseResource().split(":"); LOG.debug(">>> Protocol found :" + resources[0] + ", and resource : " + resources[1]); - + if (resources[0].equals("file")) { context.setBaseResource(Resource.newResource(resources[1])); } else if (resources[0].equals("classpath")) { // Create a URL handler using classpath protocol - URL url = this.getCamelContext().getClassResolver().loadResourceAsURL(resources[1]); + URL url = this.getCamelContext().getClassResolver().loadResourceAsURL(resources[1]); context.setBaseResource(Resource.newResource(url)); - } + } } - + context.addServlet(holder, "/cometd/*"); context.addServlet("org.eclipse.jetty.servlet.DefaultServlet", "/"); @@ -227,6 +241,29 @@ public class CometdComponent extends Def this.sslKeystore = sslKeystore; } + public void setSecurityPolicy(SecurityPolicy securityPolicy) { + this.securityPolicy = securityPolicy; + } + + public SecurityPolicy getSecurityPolicy() { + return securityPolicy; + } + + public List<Extension> getExtensions() { + return extensions; + } + + public void setExtensions(List<Extension> extensions) { + this.extensions = extensions; + } + + public void addExtension(Extension extension) { + if (extensions == null) { + extensions = new ArrayList<Extension>(); + } + extensions.add(extension); + } + protected Server createServer() throws Exception { Server server = new Server(); ContextHandlerCollection collection = new ContextHandlerCollection(); Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java Sat Apr 2 10:31:37 2011 @@ -28,8 +28,6 @@ import org.cometd.server.BayeuxService; /** * A Consumer for receiving messages using Cometd and Bayeux protocol. - * - * @version */ public class CometdConsumer extends DefaultConsumer implements CometdProducerConsumer { Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConverters.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConverters.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConverters.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConverters.java Sat Apr 2 10:31:37 2011 @@ -20,12 +20,10 @@ import org.apache.camel.Converter; /** * Cometd specific converters. - * - * @version */ @Converter public final class CometdConverters { - + private CometdConverters() { //Utility Class } Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java Sat Apr 2 10:31:37 2011 @@ -28,11 +28,9 @@ import org.apache.camel.util.ObjectHelpe /** * Endpoint for Camel Cometd. - * - * @version */ public class CometdEndpoint extends DefaultEndpoint { - + private String baseResource; private int timeout = 240000; private int interval; @@ -42,7 +40,7 @@ public class CometdEndpoint extends Defa private int logLevel = 1; private URI uri; private CometdComponent component; - + public CometdEndpoint(CometdComponent component, String uri, String remaining, Map<String, Object> parameters) { super(uri, component); this.component = component; @@ -61,18 +59,18 @@ public class CometdEndpoint extends Defa public Consumer createConsumer(Processor processor) throws Exception { ObjectHelper.notNull(component, "component"); - CometdConsumer consumer = new CometdConsumer(this, processor); + CometdConsumer consumer = new CometdConsumer(this, processor); return consumer; } public void connect(CometdProducerConsumer prodcons) throws Exception { component.connect(prodcons); } - + public void disconnect(CometdProducerConsumer prodcons) throws Exception { component.disconnect(prodcons); } - + public CometdComponent getComponent() { return component; } @@ -80,7 +78,7 @@ public class CometdEndpoint extends Defa public boolean isSingleton() { return false; } - + public String getPath() { return uri.getPath(); } @@ -111,7 +109,7 @@ public class CometdEndpoint extends Defa public void setBaseResource(String baseResource) { this.baseResource = baseResource; } - + public int getTimeout() { return timeout; } Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducer.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducer.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducer.java Sat Apr 2 10:31:37 2011 @@ -28,12 +28,10 @@ import org.slf4j.LoggerFactory; /** * A Producer to send messages using Cometd and Bayeux protocol. - * - * @version */ public class CometdProducer extends DefaultProducer implements CometdProducerConsumer { private static final transient Logger LOG = LoggerFactory.getLogger(CometdProducer.class); - + private AbstractBayeux bayeux; private final CometdEndpoint endpoint; @@ -70,7 +68,7 @@ public class CometdProducer extends Defa public CometdEndpoint getEndpoint() { return endpoint; } - + public AbstractBayeux getBayeux() { return bayeux; } Modified: camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java (original) +++ camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java Sat Apr 2 10:31:37 2011 @@ -30,5 +30,5 @@ public interface CometdProducerConsumer * Sets the bayeux to use. */ void setBayeux(AbstractBayeux bayeux); - + } \ No newline at end of file Added: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java?rev=1087994&view=auto ============================================================================== --- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java (added) +++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java Sat Apr 2 10:31:37 2011 @@ -0,0 +1,176 @@ +/** + * 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.cometd; + +import java.io.File; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.cometd.Bayeux; +import org.cometd.Client; +import org.cometd.Extension; +import org.cometd.Message; +import org.cometd.RemoveListener; +import org.cometd.server.AbstractBayeux; + +public class CometdProducerConsumerInteractiveAuthenticatedMain { + + private static final String URI = "cometd://127.0.0.1:9091/service/test?baseResource=file:./src/test/resources/webapp&" + + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; + + private static final String URIS = "cometds://127.0.0.1:9443/service/test?baseResource=file:./src/test/resources/webapp&" + + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; + + private CamelContext context; + + private String pwd = "changeit"; + + public static void main(String[] args) throws Exception { + CometdProducerConsumerInteractiveAuthenticatedMain me = new CometdProducerConsumerInteractiveAuthenticatedMain(); + me.testCometdProducerConsumerInteractive(); + } + + public void testCometdProducerConsumerInteractive() throws Exception { + context = new DefaultCamelContext(); + context.addRoutes(createRouteBuilder()); + context.start(); + } + + private RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + public void configure() { + CometdComponent component = (CometdComponent) context.getComponent("cometds"); + component.setSslPassword(pwd); + component.setSslKeyPassword(pwd); + + CometdComponent component2 = (CometdComponent) context.getComponent("cometd"); + BayeuxAuthenticator bayeuxAuthenticator = new BayeuxAuthenticator(); + component2.setSecurityPolicy(bayeuxAuthenticator); + component2.addExtension(bayeuxAuthenticator); + + File file = new File("./src/test/resources/jsse/localhost.ks"); + URI keyStoreUrl = file.toURI(); + component.setSslKeystore(keyStoreUrl.getPath()); + + from("stream:in").to(URI).to(URIS); + } + }; + } + + /** + * Custom SecurityPolicy, see http://cometd.org/documentation/howtos/authentication for details + */ + public static final class BayeuxAuthenticator extends AbstractBayeux.DefaultPolicy implements Extension, RemoveListener { + + private String user = "changeit"; + private String pwd = "changeit"; + + @Override + public boolean canHandshake(Message message) { + Map<String, Object> ext = message.getExt(false); + if (ext == null) { + return false; + } + + // Be sure the client does not cheat us + ext.remove("authenticationData"); + + @SuppressWarnings("unchecked") + Map<String, Object> authentication = (Map<String, Object>) ext.get("authentication"); + if (authentication == null) { + return false; + } + + Object authenticationData = verify(authentication); + if (authenticationData == null) { + return false; + } + + // Store the authentication result in the message for later processing + ext.put("authenticationData", authenticationData); + + return true; + } + + private Object verify(Map<String, Object> authentication) { + if (!user.equals(authentication.get("user"))) { + return null; + } + if (!pwd.equals(authentication.get("credentials"))) { + return null; + } + return "OK"; + } + + @Override + public Message sendMeta(Client remote, Message responseMessage) { + if (Bayeux.META_HANDSHAKE.equals(responseMessage.getChannel())) { + Message requestMessage = responseMessage.getAssociated(); + + Map<String, Object> requestExt = requestMessage.getExt(false); + if (requestExt != null && requestExt.get("authenticationData") != null) { + Object authenticationData = requestExt.get("authenticationData"); + // Authentication successful + + // Link authentication data to the remote client + + // Be notified when the remote client disappears + remote.addListener(this); + } else { + // Authentication failed + + // Add extra fields to the response + Map<String, Object> responseExt = responseMessage.getExt(true); + Map<String, Object> authentication = new HashMap<String, Object>(); + responseExt.put("authentication", authentication); + authentication.put("failed", true); + + // Tell the client to stop any further attempt to handshake + Map<String, Object> advice = new HashMap<String, Object>(); + advice.put(Bayeux.RECONNECT_FIELD, Bayeux.NONE_RESPONSE); + responseMessage.put(Bayeux.ADVICE_FIELD, advice); + } + } + return responseMessage; + } + + @Override + public void removed(String clientId, boolean timeout) { + // Remove authentication data + } + + @Override + public Message rcv(Client client, Message message) { + return message; + } + + @Override + public Message rcvMeta(Client client, Message message) { + return message; + } + + @Override + public Message send(Client client, Message message) { + return message; + } + } + +} Propchange: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveAuthenticatedMain.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java?rev=1087994&view=auto ============================================================================== --- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java (added) +++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java Sat Apr 2 10:31:37 2011 @@ -0,0 +1,108 @@ +/** + * 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.cometd; + +import java.io.File; +import java.net.URI; +import java.util.Arrays; +import java.util.HashSet; + +import org.apache.camel.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.cometd.Client; +import org.cometd.Extension; +import org.cometd.Message; +import org.cometd.RemoveListener; + +public class CometdProducerConsumerInteractiveExtensionMain { + + private static final String URI = "cometd://127.0.0.1:9091/service/test?baseResource=file:./src/test/resources/webapp&" + + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; + + private static final String URIS = "cometds://127.0.0.1:9443/service/test?baseResource=file:./src/test/resources/webapp&" + + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; + + private CamelContext context; + + private String pwd = "changeit"; + + public static void main(String[] args) throws Exception { + CometdProducerConsumerInteractiveExtensionMain me = new CometdProducerConsumerInteractiveExtensionMain(); + me.testCometdProducerConsumerInteractive(); + } + + public void testCometdProducerConsumerInteractive() throws Exception { + context = new DefaultCamelContext(); + context.addRoutes(createRouteBuilder()); + context.start(); + } + + private RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + public void configure() { + CometdComponent component = (CometdComponent) context.getComponent("cometds"); + component.setSslPassword(pwd); + component.setSslKeyPassword(pwd); + + CometdComponent component2 = (CometdComponent) context.getComponent("cometd"); + Censor bayeuxAuthenticator = new Censor(); + component2.addExtension(bayeuxAuthenticator); + + File file = new File("./src/test/resources/jsse/localhost.ks"); + URI keyStoreUrl = file.toURI(); + component.setSslKeystore(keyStoreUrl.getPath()); + + from("stream:in").to(URI).to(URIS); + } + }; + } + + public static final class Censor implements Extension, RemoveListener { + + private HashSet<String> forbidden = new HashSet<String>(Arrays.asList("one", "two")); + + @Override + public void removed(String clientId, boolean timeout) { + // called on remove of client + } + + @Override + public Message rcv(Client from, Message message) { + return message; + } + + @Override + public Message rcvMeta(Client from, Message message) { + return message; + } + + @Override + public Message send(Client from, Message message) { + Object data = message.getData(); + if (forbidden.contains(data)) { + message.put("data", "***"); + } + return message; + } + + @Override + public Message sendMeta(Client from, Message message) { + return message; + } + } +} Propchange: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveExtensionMain.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveMain.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveMain.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveMain.java (original) +++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerInteractiveMain.java Sat Apr 2 10:31:37 2011 @@ -12,7 +12,8 @@ * 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. + * limitations under the License. hello + * */ package org.apache.camel.component.cometd; @@ -29,12 +30,12 @@ public class CometdProducerConsumerInter + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; private static final String URIS = "cometds://127.0.0.1:9443/service/test?baseResource=file:./src/test/resources/webapp&" - + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; + + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; private CamelContext context; private String pwd = "changeit"; - + public static void main(String[] args) throws Exception { CometdProducerConsumerInteractiveMain me = new CometdProducerConsumerInteractiveMain(); me.testCometdProducerConsumerInteractive(); @@ -52,11 +53,10 @@ public class CometdProducerConsumerInter CometdComponent component = (CometdComponent) context.getComponent("cometds"); component.setSslPassword(pwd); component.setSslKeyPassword(pwd); - URI keyStoreUrl = null; File file = new File("./src/test/resources/jsse/localhost.ks"); - keyStoreUrl = file.toURI(); + URI keyStoreUrl = file.toURI(); component.setSslKeystore(keyStoreUrl.getPath()); - + from("stream:in").to(URI).to(URIS); } }; Modified: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java (original) +++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java Sat Apr 2 10:31:37 2011 @@ -68,21 +68,24 @@ public class CometdProducerConsumerTest private String name; private String surname; - + Person(String name, String surname) { this.name = name; this.surname = surname; } - + public String getName() { return name; } + public String getSurname() { return surname; } + public void setName(String name) { this.name = name; } + public void setSurname(String surname) { this.surname = surname; } Modified: camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslCometdProducerConsumerTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslCometdProducerConsumerTest.java?rev=1087994&r1=1087993&r2=1087994&view=diff ============================================================================== --- camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslCometdProducerConsumerTest.java (original) +++ camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslCometdProducerConsumerTest.java Sat Apr 2 10:31:37 2011 @@ -35,7 +35,7 @@ public class SslCometdProducerConsumerTe + "timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"; protected String pwd = "changeit"; - + @Test public void testProducer() throws Exception { Person person = new Person("David", "Greco"); @@ -72,26 +72,29 @@ public class SslCometdProducerConsumerTe } }; } - + public static class Person { private String name; private String surname; - + Person(String name, String surname) { this.name = name; this.surname = surname; } - + public String getName() { return name; } + public String getSurname() { return surname; } + public void setName(String name) { this.name = name; } + public void setSurname(String surname) { this.surname = surname; } Added: camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html?rev=1087994&view=auto ============================================================================== --- camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html (added) +++ camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html Sat Apr 2 10:31:37 2011 @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html> + +<head> +<title>My Simple Ajax Example</title> + +<script type="text/javascript" src="dojo/dojo/dojo.js"></script> +<script type="text/javascript"> + + dojo.require("dojox.cometd"); + + function setupComet() { + dojox.cometd.addListener('/meta/handshake', function(message) { + var auth = message.ext && message.ext.authentication; + if (auth && auth.failed === true) { + // Authentication failed, tell the user + window.alert('Authentication failed!'); + } + }); + + dojox.cometd.init('/cometd', { + ext : { + authentication : { + user : 'changeit', + // change credentials to make init work: correct credentials are 'changeit' + credentials : 'wrong' + } + } + }); + + dojox.cometd.subscribe("/service/test", callback); + } + + dojo.addOnLoad(setupComet); + dojo.addOnUnload(dojox.cometd, "disconnect"); + + function callback(msg) { + dojo.byId("MSG").innerHTML += msg.data + "\n"; + } +</script> + +</head> +<body> +<h1>CAMEL AUTHENTICATED TEST PAGE</h1> +<pre id="MSG" /> +</body> +</html> Propchange: camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-cometd/src/test/resources/webapp/authenticated.html ------------------------------------------------------------------------------ svn:mime-type = text/html