private void validateWebSocketRequest(Request request, Uri uri, AsyncHandler<?> asyncHandler) { if (asyncHandler instanceof WebSocketUpgradeHandler) { if (!uri.getScheme().startsWith(WEBSOCKET)) throw new IllegalArgumentException("WebSocketUpgradeHandler but scheme isn't ws or wss: " + uri.getScheme()); else if (!request.getMethod().equals(HttpMethod.GET.getName())) throw new IllegalArgumentException("WebSocketUpgradeHandler but method isn't GET: " + request.getMethod()); } else if (uri.getScheme().startsWith(WEBSOCKET)) { throw new IllegalArgumentException("No WebSocketUpgradeHandler but scheme is " + uri.getScheme()); } }
private SingularityLoadBalancerUpdate sendRequestWrapper(LoadBalancerRequestId loadBalancerRequestId, LoadBalancerMethod method, Request request, BaragonRequestState onFailure) { final long start = System.currentTimeMillis(); final LoadBalancerUpdateHolder result = sendRequest(loadBalancerRequestId, request, onFailure); LOG.debug("LB {} request {} had result {} after {}", request.getMethod(), loadBalancerRequestId, result, JavaUtils.duration(start)); return new SingularityLoadBalancerUpdate(result.state, loadBalancerRequestId, result.message, start, method, Optional.of(request.getUrl())); }
private LoadBalancerUpdateHolder sendRequest(LoadBalancerRequestId loadBalancerRequestId, Request request, BaragonRequestState onFailure) { try { LOG.trace("Sending LB {} request for {} to {}", request.getMethod(), loadBalancerRequestId, request.getUrl()); ListenableFuture<Response> future = httpClient.executeRequest(request); Response response = future.get(loadBalancerTimeoutMillis, TimeUnit.MILLISECONDS); LOG.trace("LB {} request {} returned with code {}", request.getMethod(), loadBalancerRequestId, response.getStatusCode()); if (response.getStatusCode() == 504) { return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("LB %s request %s timed out", request.getMethod(), loadBalancerRequestId))); } else if (!JavaUtils.isHttpSuccess(response.getStatusCode())) { return new LoadBalancerUpdateHolder(onFailure, Optional.of(String.format("Response status code %s", response.getStatusCode()))); } BaragonResponse lbResponse = readResponse(response); return new LoadBalancerUpdateHolder(lbResponse.getLoadBalancerState(), lbResponse.getMessage()); } catch (TimeoutException te) { LOG.trace("LB {} request {} timed out after waiting {}", request.getMethod(), loadBalancerRequestId, JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Timed out after %s", JavaUtils.durationFromMillis(loadBalancerTimeoutMillis)))); } catch (Throwable t) { LOG.error("LB {} request {} to {} threw error", request.getMethod(), loadBalancerRequestId, request.getUrl(), t); return new LoadBalancerUpdateHolder(BaragonRequestState.UNKNOWN, Optional.of(String.format("Exception %s - %s", t.getClass().getSimpleName(), t.getMessage()))); } }
private Future<Response> execute(RequestBuilder rb, BodyConsumer bodyConsumer, ThrowableHandler throwableHandler) throws IOException { if (throwableHandler == null) { throwableHandler = defaultThrowableHandler; } Request request = rb.build(); ProgressAsyncHandler<Response> handler = new BodyConsumerAsyncHandler(bodyConsumer, throwableHandler, errorDocumentBehaviour, request.getUri(), listener); if (resumeEnabled && request.getMethod().equals("GET") && bodyConsumer != null && bodyConsumer instanceof ResumableBodyConsumer) { ResumableBodyConsumer fileBodyConsumer = (ResumableBodyConsumer) bodyConsumer; long length = fileBodyConsumer.getTransferredBytes(); fileBodyConsumer.resume(); handler = new ResumableBodyConsumerAsyncHandler(length, handler); } return asyncHttpClient().executeRequest(request, handler); }
@Override public void calculateAndAddSignature(Request request, RequestBuilderBase<?> requestBuilder) { String nonce = generateNonce(); long timestamp = generateTimestamp(); String signature = calculateSignature(request.getMethod(), request.getUri(), timestamp, nonce, request.getFormParams(), request.getQueryParams()); String headerValue = constructAuthHeader(signature, nonce, timestamp); requestBuilder.setHeader(HEADER_AUTHORIZATION, headerValue); }
private Realm ntlmChallenge(String wwwAuth, Request request, FluentCaseInsensitiveStringsMap headers, Realm realm, NettyResponseFuture<?> future) throws NTLMEngineException { Uri uri = request.getUri(); if (wwwAuth.equals("NTLM")) { // server replied bare NTLM => we didn't preemptively sent Type1Msg String challengeHeader = NTLMEngine.INSTANCE.generateType1Msg(); addNTLMAuthorizationHeader(headers, challengeHeader, false); future.getAndSetAuth(false); } else { // probably receiving Type2Msg, so we issue Type3Msg addType3NTLMAuthorizationHeader(wwwAuth, headers, realm, false); } return new Realm.RealmBuilder().clone(realm)// .setUri(uri)// .setMethodName(request.getMethod())// .build(); }
private Realm ntlmProxyChallenge(String wwwAuth, Request request, ProxyServer proxyServer, FluentCaseInsensitiveStringsMap headers, NettyResponseFuture<?> future) throws NTLMEngineException { future.getAndSetAuth(false); headers.remove(HttpHeaders.Names.PROXY_AUTHORIZATION); Realm realm = proxyServer.realmBuilder()// .setScheme(AuthScheme.NTLM)// .setUri(request.getUri())// .setMethodName(request.getMethod()).build(); addType3NTLMAuthorizationHeader(wwwAuth, headers, realm, true); return realm; }
private static Realm ntlmChallenge(final Connection c, final String wwwAuth, final Request request, final Realm realm, final boolean proxyInd) throws NTLMEngineException { final FluentCaseInsensitiveStringsMap headers = request.getHeaders(); if (wwwAuth.equals("NTLM")) { // server replied bare NTLM => we didn't preemptively sent Type1Msg String challengeHeader = NTLMEngine.INSTANCE.generateType1Msg(); addNTLMAuthorizationHeader(headers, challengeHeader, proxyInd); } else { // probably receiving Type2Msg, so we issue Type3Msg addType3NTLMAuthorizationHeader(wwwAuth, headers, realm, proxyInd); // we mark NTLM as established for the Connection to // avoid preemptive NTLM Utils.setNtlmEstablished(c); } return new Realm.RealmBuilder().clone(realm)// .setUri(request.getUri())// .setMethodName(request.getMethod())// .build(); }
private static Realm ntlmProxyChallenge(final Connection c, final String wwwAuth, final Request request, final ProxyServer proxyServer) throws NTLMEngineException { final FluentCaseInsensitiveStringsMap headers = request.getHeaders(); headers.remove(Header.ProxyAuthorization.toString()); Realm realm = proxyServer.realmBuilder()// .setScheme(AuthScheme.NTLM)// .setUri(request.getUri())// .setMethodName(request.getMethod()).build(); addType3NTLMAuthorizationHeader(wwwAuth, headers, realm, true); // we mark NTLM as established for the Connection to // avoid preemptive NTLM Utils.setNtlmEstablished(c); return realm; }
.setMethodName(request.getMethod())// .setUsePreemptiveAuth(true)// .parseProxyAuthenticateHeader(proxyAuthHeaders.get(0))//
public RequestImpl(Request prototype) { if (prototype != null) { this.method = prototype.getMethod(); this.uri = prototype.getUri(); this.address = prototype.getInetAddress(); this.localAddress = prototype.getLocalAddress(); this.headers = new FluentCaseInsensitiveStringsMap(prototype.getHeaders()); this.cookies = new ArrayList<>(prototype.getCookies()); this.byteData = prototype.getByteData(); this.compositeByteData = prototype.getCompositeByteData(); this.stringData = prototype.getStringData(); this.streamData = prototype.getStreamData(); this.bodyGenerator = prototype.getBodyGenerator(); this.formParams = prototype.getFormParams() == null ? null : new ArrayList<>(prototype.getFormParams()); this.parts = prototype.getParts() == null ? null : new ArrayList<>(prototype.getParts()); this.virtualHost = prototype.getVirtualHost(); this.length = prototype.getContentLength(); this.proxyServer = prototype.getProxyServer(); this.realm = prototype.getRealm(); this.file = prototype.getFile(); this.followRedirects = prototype.getFollowRedirect(); this.requestTimeout = prototype.getRequestTimeout(); this.rangeOffset = prototype.getRangeOffset(); this.charset = prototype.getBodyEncoding(); this.connectionPoolPartitioning = prototype.getConnectionPoolPartitioning(); this.nameResolver = prototype.getNameResolver(); } }
.setMethodName(request.getMethod())// .setUsePreemptiveAuth(true)// .parseWWWAuthenticateHeader(authHeaders.get(0))//
private Realm kerberosProxyChallenge(Channel channel,// List<String> proxyAuth,// Request request,// ProxyServer proxyServer,// FluentCaseInsensitiveStringsMap headers,// NettyResponseFuture<?> future) throws NTLMEngineException { Uri uri = request.getUri(); try { String challengeHeader = SpnegoEngine.INSTANCE.generateToken(proxyServer.getHost()); headers.remove(HttpHeaders.Names.AUTHORIZATION); headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader); return proxyServer.realmBuilder()// .setUri(uri)// .setMethodName(request.getMethod())// .setScheme(Realm.AuthScheme.KERBEROS)// .build(); } catch (Throwable throwable) { String ntlmAuthenticate = getNTLM(proxyAuth); if (ntlmAuthenticate != null) { return ntlmProxyChallenge(ntlmAuthenticate, request, proxyServer, headers, future); } requestSender.abort(channel, future, throwable); return null; } }
private Realm kerberosChallenge(Channel channel,// List<String> authHeaders,// Request request,// FluentCaseInsensitiveStringsMap headers,// Realm realm,// NettyResponseFuture<?> future) throws NTLMEngineException { Uri uri = request.getUri(); String host = request.getVirtualHost() == null ? uri.getHost() : request.getVirtualHost(); try { String challengeHeader = SpnegoEngine.INSTANCE.generateToken(host); headers.remove(HttpHeaders.Names.AUTHORIZATION); headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader); return new Realm.RealmBuilder().clone(realm)// .setUri(uri)// .setMethodName(request.getMethod())// .setScheme(Realm.AuthScheme.KERBEROS)// .build(); } catch (Throwable throwable) { String ntlmAuthenticate = getNTLM(authHeaders); if (ntlmAuthenticate != null) { return ntlmChallenge(ntlmAuthenticate, request, headers, realm, future); } requestSender.abort(channel, future, throwable); return null; } }
.clone(realm) .setUri(req.getUri()) .setMethodName(req.getMethod()) .setUsePreemptiveAuth(true) .parseWWWAuthenticateHeader(firstAuthHeader)
.setMethodName(req.getMethod())// .setUsePreemptiveAuth(true)//
final Method method = Method.valueOf(ahcRequest.getMethod()); final Uri uri = req.getUri(); boolean secure = "https".equals(uri.getScheme());
String originalMethod = request.getMethod(); boolean switchToGet = !originalMethod.equals("GET") && (statusCode == 303 || (statusCode == 302 && !config.isStrict302Handling())); boolean keepBody = statusCode == 307 || (statusCode == 302 && config.isStrict302Handling());
public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConnect, ProxyServer proxyServer) throws IOException { HttpMethod method = forceConnect ? HttpMethod.CONNECT : HttpMethod.valueOf(request.getMethod()); boolean connect = method == HttpMethod.CONNECT;