private long parseStartLine(UpgradeRequest request) { Optional<NameValuePair> startLine = URLEncodedUtils.parse(request.getRequestURI(), "UTF-8"). stream(). filter(pair -> "startLine".equals(pair.getName())).findFirst(); return startLine.isPresent() ? Long.valueOf(startLine.get().getValue()) : 0L; }
@Override public AuthenticationResult<Account> authenticate(UpgradeRequest request) throws AuthenticationException { try { Map<String, List<String>> parameters = request.getParameterMap(); List<String> usernames = parameters.get("login"); List<String> passwords = parameters.get("password"); if (usernames == null || usernames.size() == 0 || passwords == null || passwords.size() == 0) { return new AuthenticationResult<>(Optional.empty(), false); } BasicCredentials credentials = new BasicCredentials(usernames.get(0).replace(" ", "+"), passwords.get(0).replace(" ", "+")); return new AuthenticationResult<>(accountAuthenticator.authenticate(credentials), true); } catch (io.dropwizard.auth.AuthenticationException e) { throw new AuthenticationException(e); } }
@Override public void initializeNativeSession(Session session) { super.initializeNativeSession(session); this.uri = session.getUpgradeRequest().getRequestURI(); HttpHeaders headers = new HttpHeaders(); headers.putAll(session.getUpgradeRequest().getHeaders()); this.headers = HttpHeaders.readOnlyHttpHeaders(headers); this.acceptedProtocol = session.getUpgradeResponse().getAcceptedSubProtocol(); List<ExtensionConfig> jettyExtensions = session.getUpgradeResponse().getExtensions(); if (!CollectionUtils.isEmpty(jettyExtensions)) { List<WebSocketExtension> extensions = new ArrayList<>(jettyExtensions.size()); for (ExtensionConfig jettyExtension : jettyExtensions) { extensions.add(new WebSocketExtension(jettyExtension.getName(), jettyExtension.getParameters())); } this.extensions = Collections.unmodifiableList(extensions); } else { this.extensions = Collections.emptyList(); } if (this.user == null) { this.user = session.getUpgradeRequest().getUserPrincipal(); } }
connector,configuration,endPoint,transport,input); HttpMethod method = HttpMethod.fromString(request.getMethod()); HttpVersion version = HttpVersion.fromString(request.getHttpVersion()); httpChannel.startRequest(method,request.getMethod(),BufferUtil.toBuffer(request.getRequestURI().toASCIIString()),version); for (String headerName : request.getHeaders().keySet()) for (String value : request.getHeaders().get(headerName))
@Override public void onWebSocketConnect(final Session sess) { super.onWebSocketConnect(sess); id = WsPool.add(this); run("[WS-OPEN] " + req.getRequestURL(), null, () -> { // add headers (for binding them to the XQuery parameters in the corresponding bind method) final UpgradeRequest ur = sess.getUpgradeRequest(); final BiConsumer<String, String> addHeader = (k, v) -> { if(v != null) headers.put(k, new Atm(v)); }; addHeader.accept("http-version", ur.getHttpVersion()); addHeader.accept("origin", ur.getOrigin()); addHeader.accept("protocol-version", ur.getProtocolVersion()); addHeader.accept("query-string", ur.getQueryString()); addHeader.accept("is-secure", String.valueOf(ur.isSecure())); addHeader.accept("request-uri", ur.getRequestURI().toString()); addHeader.accept("host", ur.getHost()); final TokenList protocols = new TokenList(); for(final String protocol : ur.getSubProtocols()) protocols.add(protocol); headers.put("sub-protocols", StrSeq.get(protocols)); findAndProcess(Annotation._WS_CONNECT, null); }); }
public ValidateUpgradeRequest invoke() { UpgradeRequest request = session.getUpgradeRequest(); URI uri = request.getRequestURI(); path = uri.getPath(); Map<String, List<String>> params = request.getParameterMap(); List<String> watch = params.get("watch"); LOG.debug("path: {}", path); if (watch == null || watch.size() != 1) { session.close(0, " must specify watch parameter when connecting via websocket"); myResult = true; return this; } if (!watch.get(0).equalsIgnoreCase("true")) { session.close(0, " must specify watch parameter equal to 'true' when connecting via websocket"); myResult = true; return this; } myResult = false; return this; } }
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]); } } } }
public WebSocketVirtualServletRequest(WebSocketServletHolder websocket, InputStream in, Session session) throws IOException { this.webSocketHolder = websocket; this.in = in; Map<String, List<String>> ugHeaders = session.getUpgradeRequest().getHeaders(); this.requestHeaders = WebSocketUtils.readHeaders(in); for (Map.Entry<String, List<String>> ent : ugHeaders.entrySet()) { if (!requestHeaders.containsKey(ent.getKey())) { requestHeaders.put(ent.getKey(), ent.getValue().get(0)); } } String path = requestHeaders.get(WebSocketUtils.URI_KEY); String origin = websocket.getRequestURI(); if (!path.startsWith(origin)) { LOG.log(Level.WARNING, "invalid path: {0} not within {1}", new Object[]{path, origin}); throw new InvalidPathException(); } this.attributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); Object v = websocket.getAttribute("org.apache.cxf.transport.endpoint.address"); if (v != null) { attributes.put("org.apache.cxf.transport.endpoint.address", v); } }
@Test @SuppressWarnings("resource") public void getPrincipalNotAvailable() { UpgradeRequest request = Mockito.mock(UpgradeRequest.class); given(request.getUserPrincipal()).willReturn(null); UpgradeResponse response = Mockito.mock(UpgradeResponse.class); given(response.getAcceptedSubProtocol()).willReturn(null); Session nativeSession = Mockito.mock(Session.class); given(nativeSession.getUpgradeRequest()).willReturn(request); given(nativeSession.getUpgradeResponse()).willReturn(response); JettyWebSocketSession session = new JettyWebSocketSession(attributes); session.initializeNativeSession(nativeSession); reset(nativeSession); assertNull(session.getPrincipal()); verifyNoMoreInteractions(nativeSession); }
public boolean isOrigin(String test) { return test.equalsIgnoreCase(getOrigin()); }
connector,configuration,endPoint,transport,input); HttpMethod method = HttpMethod.fromString(request.getMethod()); HttpVersion version = HttpVersion.fromString(request.getHttpVersion()); httpChannel.startRequest(method,request.getMethod(),BufferUtil.toBuffer(request.getRequestURI().toASCIIString()),version); for (String headerName : request.getHeaders().keySet()) for (String value : request.getHeaders().get(headerName))
public WebSocketVirtualServletRequest(WebSocketServletHolder websocket, InputStream in, Session session) throws IOException { this.webSocketHolder = websocket; this.in = in; Map<String, List<String>> ugHeaders = session.getUpgradeRequest().getHeaders(); this.requestHeaders = WebSocketUtils.readHeaders(in); for (Map.Entry<String, List<String>> ent : ugHeaders.entrySet()) { if (!requestHeaders.containsKey(ent.getKey())) { requestHeaders.put(ent.getKey(), ent.getValue().get(0)); } } String path = requestHeaders.get(WebSocketUtils.URI_KEY); String origin = websocket.getRequestURI(); if (!path.startsWith(origin)) { LOG.log(Level.WARNING, "invalid path: {0} not within {1}", new Object[]{path, origin}); throw new InvalidPathException(); } this.attributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); Object v = websocket.getAttribute("org.apache.cxf.transport.endpoint.address"); if (v != null) { attributes.put("org.apache.cxf.transport.endpoint.address", v); } }
@Test @SuppressWarnings("resource") public void getAcceptedProtocol() { String protocol = "foo"; UpgradeRequest request = Mockito.mock(UpgradeRequest.class); given(request.getUserPrincipal()).willReturn(null); UpgradeResponse response = Mockito.mock(UpgradeResponse.class); given(response.getAcceptedSubProtocol()).willReturn(protocol); Session nativeSession = Mockito.mock(Session.class); given(nativeSession.getUpgradeRequest()).willReturn(request); given(nativeSession.getUpgradeResponse()).willReturn(response); JettyWebSocketSession session = new JettyWebSocketSession(attributes); session.initializeNativeSession(nativeSession); reset(nativeSession); assertSame(protocol, session.getAcceptedProtocol()); verifyNoMoreInteractions(nativeSession); }
public boolean isOrigin(String test) { return test.equalsIgnoreCase(getOrigin()); }
@Override public boolean isSecure() { if (upgradeRequest == null) { throw new IllegalStateException("No valid UpgradeRequest yet"); } URI requestURI = upgradeRequest.getRequestURI(); return "wss".equalsIgnoreCase(requestURI.getScheme()); }
@Override public void initializeNativeSession(Session session) { super.initializeNativeSession(session); this.uri = session.getUpgradeRequest().getRequestURI(); HttpHeaders headers = new HttpHeaders(); headers.putAll(session.getUpgradeRequest().getHeaders()); this.headers = HttpHeaders.readOnlyHttpHeaders(headers); this.acceptedProtocol = session.getUpgradeResponse().getAcceptedSubProtocol(); List<ExtensionConfig> jettyExtensions = session.getUpgradeResponse().getExtensions(); if (!CollectionUtils.isEmpty(jettyExtensions)) { List<WebSocketExtension> extensions = new ArrayList<>(jettyExtensions.size()); for (ExtensionConfig jettyExtension : jettyExtensions) { extensions.add(new WebSocketExtension(jettyExtension.getName(), jettyExtension.getParameters())); } this.extensions = Collections.unmodifiableList(extensions); } else { this.extensions = Collections.emptyList(); } if (this.user == null) { this.user = session.getUpgradeRequest().getUserPrincipal(); } }
/** * Get parameters from query. * * @param request the request. * @return map of query parameters. */ private Map<String, String> getQueryParameters(UpgradeRequest request) { Map<String, String> queryParameters = new HashMap<>(); for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) { queryParameters.put(entry.getKey(), entry.getValue()[0]); } return queryParameters; }
@Test @SuppressWarnings("resource") public void getPrincipalFromNativeSession() { TestPrincipal user = new TestPrincipal("joe"); UpgradeRequest request = Mockito.mock(UpgradeRequest.class); given(request.getUserPrincipal()).willReturn(user); UpgradeResponse response = Mockito.mock(UpgradeResponse.class); given(response.getAcceptedSubProtocol()).willReturn(null); Session nativeSession = Mockito.mock(Session.class); given(nativeSession.getUpgradeRequest()).willReturn(request); given(nativeSession.getUpgradeResponse()).willReturn(response); JettyWebSocketSession session = new JettyWebSocketSession(attributes); session.initializeNativeSession(nativeSession); reset(nativeSession); assertSame(user, session.getPrincipal()); verifyNoMoreInteractions(nativeSession); }
@Override public boolean isSecure() { if (upgradeRequest == null) { throw new IllegalStateException("No valid UpgradeRequest yet"); } URI requestURI = upgradeRequest.getRequestURI(); return "wss".equalsIgnoreCase(requestURI.getScheme()); }
@Override public void initializeNativeSession(Session session) { super.initializeNativeSession(session); this.uri = session.getUpgradeRequest().getRequestURI(); HttpHeaders headers = new HttpHeaders(); headers.putAll(session.getUpgradeRequest().getHeaders()); this.headers = HttpHeaders.readOnlyHttpHeaders(headers); this.acceptedProtocol = session.getUpgradeResponse().getAcceptedSubProtocol(); List<ExtensionConfig> jettyExtensions = session.getUpgradeResponse().getExtensions(); if (!CollectionUtils.isEmpty(jettyExtensions)) { List<WebSocketExtension> extensions = new ArrayList<>(jettyExtensions.size()); for (ExtensionConfig jettyExtension : jettyExtensions) { extensions.add(new WebSocketExtension(jettyExtension.getName(), jettyExtension.getParameters())); } this.extensions = Collections.unmodifiableList(extensions); } else { this.extensions = Collections.emptyList(); } if (this.user == null) { this.user = session.getUpgradeRequest().getUserPrincipal(); } }