Start working again on hardening.
[lgpl/argeo-commons.git] / org.argeo.ext.equinox.jetty / src / org / argeo / equinox / jetty / WebSocketJettyCustomizer.java
index e59bbc0121e7833441864a2db840e1722d034452..f582a43bc404810c6a64ba4e7e60edc03a6f52a7 100644 (file)
@@ -1,17 +1,11 @@
 package org.argeo.equinox.jetty;
 
-import java.net.HttpCookie;
 import java.util.Dictionary;
-import java.util.List;
 
 import javax.servlet.ServletException;
-import javax.servlet.http.HttpSession;
 
 import org.eclipse.equinox.http.jetty.JettyCustomizer;
 import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.websocket.api.UpgradeRequest;
-import org.eclipse.jetty.websocket.common.WebSocketSession;
-import org.eclipse.jetty.websocket.common.WebSocketSessionListener;
 import org.eclipse.jetty.websocket.jsr356.server.ServerContainer;
 import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer;
 import org.osgi.framework.BundleContext;
@@ -46,43 +40,56 @@ public class WebSocketJettyCustomizer extends JettyCustomizer {
 //                                     @Override
 //                                     public void onSessionOpened(WebSocketSession session) {
 //                                             UpgradeRequest upgradeRequest = session.getUpgradeRequest();
+//                                             UpgradeResponse upgradeResponse = session.getUpgradeResponse();
+//                                             List<String> acceptHeader = upgradeResponse.getHeaders("Sec-WebSocket-Accept");
+//                                             if (acceptHeader.contains("no"))
+//                                                     try {
+//                                                             upgradeResponse.sendForbidden("FORBIDDEN");
+//                                                             return;
+//                                                     } catch (IOException e) {
+//                                                             // TODO Auto-generated catch block
+//                                                             e.printStackTrace();
+//                                                     }
 //                                             List<HttpCookie> cookies = upgradeRequest.getCookies();
+//
 //                                             System.out.println("Upgrade request cookies : " + cookies);
-//                                             HttpSession httpSession = (HttpSession) upgradeRequest.getSession();
-//                                             System.out.println("Upgrade request session ID : " + httpSession.getId());
+//                                             String httpSessionId = null;
+//                                             if (cookies != null) {
+//                                                     for (HttpCookie cookie : cookies) {
+//                                                             if (cookie.getName().equals("JSESSIONID")) {
+//                                                                     httpSessionId = cookie.getValue();
+//                                                             }
+//                                                     }
+//                                             }
+//
+//                                             if (httpSessionId == null) {
+//                                                     HttpSession httpSession = (HttpSession) upgradeRequest.getSession();
+//                                                     if (httpSession == null) {
+////                                                   session.disconnect();
+////                                                   return;
+//                                                     } else {
+//                                                             httpSessionId = httpSession.getId();
+//                                                             System.out.println("Upgrade request session ID : " + httpSession.getId());
+//                                                     }
+//                                             }
+//
+//                                             if (httpSessionId != null) {
+//                                                     int dotIdx = httpSessionId.lastIndexOf('.');
+//                                                     if (dotIdx > 0) {
+//                                                             httpSessionId = httpSessionId.substring(0, dotIdx);
+//                                                     }
+//                                             }
 //                                     }
 //
 //                                     @Override
 //                                     public void onSessionClosed(WebSocketSession session) {
-//                                             // TODO Auto-generated method stub
-//
 //                                     }
 //                             });
                        } catch (ServletException e) {
                                throw new IllegalStateException("Cannot configure web sockets", e);
                        }
                        bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null);
-//                     ServiceTracker<ServerEndpointConfig.Builder, ServerEndpointConfig.Builder> endpointsTracker = new ServiceTracker<ServerEndpointConfig.Builder, ServerEndpointConfig.Builder>(
-//                                     bc, ServerEndpointConfig.Builder.class, null) {
-//
-//                             @Override
-//                             public ServerEndpointConfig.Builder addingService(
-//                                             ServiceReference<ServerEndpointConfig.Builder> reference) {
-//
-//                                     ServerEndpointConfig.Builder serverEndpointConfig = super.addingService(reference);
-//                                     try {
-//                                             serverContainer.addEndpoint(serverEndpointConfig.build());
-//                                     } catch (DeploymentException e) {
-//                                             throw new IllegalArgumentException("Cannot add end point " + reference, e);
-//                                     }
-//                                     return serverEndpointConfig;
-//                             }
-//                     };
-//                     endpointsTracker.open();
-                       // TODO log it properly
-                       // TODO close itproperly
                }
 
        }
-
 }