@Override public void onHandshakeRequest(UpgradeRequest request) { if (configurator == null) { return; } Map<String, List<String>> headers = request.getHeaders(); configurator.beforeRequest(headers); request.setHeaders(headers); }
@Test public void testCredentials() throws Exception { MessagesManager storedMessages = mock(MessagesManager.class); WebSocketAccountAuthenticator webSocketAuthenticator = new WebSocketAccountAuthenticator(accountAuthenticator); AuthenticatedConnectListener connectListener = new AuthenticatedConnectListener( accountsManager, pushSender, receiptSender, storedMessages, pubSubManager, apnFallbackManager); WebSocketSessionContext sessionContext = mock(WebSocketSessionContext.class); when(accountAuthenticator.authenticate(eq(new BasicCredentials(VALID_USER, VALID_PASSWORD)))) .thenReturn(Optional.of(account)); when(accountAuthenticator.authenticate( eq(new BasicCredentials(INVALID_USER, INVALID_PASSWORD)))) .thenReturn(Optional.<Account>absent()); when(account.getAuthenticatedDevice()).thenReturn(Optional.of(device)); when(upgradeRequest.getParameterMap()) .thenReturn( new HashMap<String, String[]>() { { put("login", new String[] {VALID_USER}); put("password", new String[] {VALID_PASSWORD}); } }); Optional<Account> account = webSocketAuthenticator.authenticate(upgradeRequest); when(sessionContext.getAuthenticated(Account.class)).thenReturn(account); connectListener.onWebSocketConnect(sessionContext); verify(sessionContext).addListener(any(WebSocketSessionContext.WebSocketEventListener.class)); when(upgradeRequest.getParameterMap()) .thenReturn( new HashMap<String, String[]>() { { put("login", new String[] {INVALID_USER}); put("password", new String[] {INVALID_PASSWORD}); } }); account = webSocketAuthenticator.authenticate(upgradeRequest); assertFalse(account.isPresent()); }
public void setUpgradeRequest(UpgradeRequest request) { this.upgradeRequest = request; this.protocolVersion = request.getProtocolVersion(); this.parameterMap.clear(); if (request.getParameterMap() != null) { for (Map.Entry<String, List<String>> entry : request.getParameterMap().entrySet()) { List<String> values = entry.getValue(); if (values != null) { this.parameterMap.put(entry.getKey(), values.toArray(new String[values.size()])); } else { this.parameterMap.put(entry.getKey(), new String[0]); } } } }
@Override public void handshake(Muxer muxer, MuxChannel channel, UpgradeRequest request) throws MuxException, IOException { StringBuilder response = new StringBuilder(); response.append("HTTP/1.1 101 Switching Protocols\r\n"); response.append("Connection: upgrade\r\n"); // not meaningful (per Draft 08) hresp.append("Upgrade: websocket\r\n"); // not meaningful (per Draft 08) hresp.append("Sec-WebSocket-Accept: // Kgo85/8KVE8YPONSeyhgL3GwqhI=\r\n"); response.append("\r\n"); EventDriver websocket = this.eventDriverFactory.wrap(echo); WebSocketSession session = new WebSocketSession(request.getRequestURI(), websocket, channel); session.setNegotiatedSubprotocol("echo"); channel.setSession(session); channel.setSubProtocol("echo"); channel.onOpen(); session.open(); MuxAddChannelResponse addChannelResponse = new MuxAddChannelResponse(); addChannelResponse.setChannelId(channel.getChannelId()); addChannelResponse.setEncoding(MuxAddChannelResponse.IDENTITY_ENCODING); addChannelResponse.setFailed(false); addChannelResponse.setHandshake(response.toString()); muxer.output(addChannelResponse); }
@Override public boolean isSecure() { if (upgradeRequest == null) { throw new IllegalStateException("No valid UpgradeRequest yet"); } URI requestURI = upgradeRequest.getRequestURI(); return "wss".equalsIgnoreCase(requestURI.getScheme()); }