package org.argeo.cms.websocket; /** Disabled until third party issues are solved.. Customises the initialisation of a new web socket. */ public class CmsWebSocketConfigurator { //extends Configurator { // public final static String WEBSOCKET_SUBJECT = "org.argeo.cms.websocket.subject"; // // private final static CmsLog log = CmsLog.getLog(CmsWebSocketConfigurator.class); // final static String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate"; // // @Override // public boolean checkOrigin(String originHeaderValue) { // return true; // } // // @Override // public T getEndpointInstance(Class endpointClass) throws InstantiationException { // try { // return endpointClass.getDeclaredConstructor().newInstance(); // } catch (Exception e) { // throw new IllegalArgumentException("Cannot get endpoint instance", e); // } // } // // @Override // public List getNegotiatedExtensions(List installed, List requested) { // return requested; // } // // @Override // public String getNegotiatedSubprotocol(List supported, List requested) { // if ((requested == null) || (requested.size() == 0)) // return ""; // if ((supported == null) || (supported.isEmpty())) // return ""; // for (String possible : requested) { // if (possible == null) // continue; // if (supported.contains(possible)) // return possible; // } // return ""; // } // // @Override // public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { // // RemoteAuthSession httpSession = new ServletHttpSession((javax.servlet.http.HttpSession) request.getHttpSession()); // if (log.isDebugEnabled() && httpSession != null) // log.debug("Web socket HTTP session id: " + httpSession.getId()); // // if (httpSession == null) { // rejectResponse(response, null); // } // try { // LoginContext lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_USER, // new RemoteAuthCallbackHandler(httpSession)); // lc.login(); // if (log.isDebugEnabled()) // log.debug("Web socket logged-in as " + lc.getSubject()); // Subject.doAs(lc.getSubject(), new PrivilegedAction() { // // @Override // public Void run() { // sec.getUserProperties().put(ServletContextHelper.REMOTE_USER, AccessController.getContext()); // return null; // } // // }); // } catch (Exception e) { // rejectResponse(response, e); // } // } // // /** // * Behaviour when the web socket could not be authenticated. Throws an // * {@link IllegalStateException} by default. // * // * @param e can be null // */ // protected void rejectResponse(HandshakeResponse response, Exception e) { // // violent implementation, as suggested in // // https://stackoverflow.com/questions/21763829/jsr-356-how-to-abort-a-websocket-connection-during-the-handshake //// throw new IllegalStateException("Web socket cannot be authenticated"); // } }