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


Reply via email to