private Realm kerberosChallenge( List<String> proxyAuth, Request request, ProxyServer proxyServer, FluentCaseInsensitiveStringsMap headers, Realm realm, NettyResponseFuture<?> future) throws NTLMEngineException { URI uri = request.getURI(); String host = request.getVirtualHost() == null ? AsyncHttpProviderUtils.getHost(uri) : request.getVirtualHost(); String server = proxyServer == null ? host : proxyServer.getHost(); try { String challengeHeader = SpnegoEngine.instance().generateToken(server); headers.remove(HttpHeaders.Names.AUTHORIZATION); headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader); return newRealmBuilder(realm) // .setUri(uri.getRawPath()) // .setMethodName(request.getMethod()) // .setScheme(Realm.AuthScheme.KERBEROS) // .build(); } catch (Throwable throwable) { if (isNTLM(proxyAuth)) { return ntlmChallenge(proxyAuth, request, proxyServer, headers, realm, future); } channels.abort(future, throwable); return null; } }
private URI toURI(boolean encode) { if (originalUri == null) { logger.debug("setUrl hasn't been invoked. Using http://localhost"); originalUri = DEFAULT_REQUEST_URL; } AsyncHttpProviderUtils.validateSupportedScheme(originalUri); StringBuilder builder = new StringBuilder(); builder.append(originalUri.getScheme()).append("://").append(originalUri.getAuthority()); if (isNonEmpty(originalUri.getRawPath())) { builder.append(originalUri.getRawPath()); } else { builder.append("/"); } if (isNonEmpty(queryParams)) { builder.append("?"); for (Iterator<Entry<String, List<String>>> i = queryParams.iterator(); i.hasNext(); ) { Entry<String, List<String>> param = i.next(); String name = param.getKey(); for (Iterator<String> j = param.getValue().iterator(); j.hasNext(); ) { String value = j.next(); if (encode) { UTF8UrlEncoder.appendEncoded(builder, name); } else { builder.append(name); } if (value != null) { builder.append('='); if (encode) { UTF8UrlEncoder.appendEncoded(builder, value); } else { builder.append(value); } } if (j.hasNext()) { builder.append('&'); } } if (i.hasNext()) { builder.append('&'); } } } return URI.create(builder.toString()); }
private Charset getCharset(final String charset) { String charsetLocal = charset; if (charsetLocal == null) { String contentType = getContentType(); if (contentType != null) { charsetLocal = AsyncHttpProviderUtils.parseCharset(contentType); } } if (charsetLocal == null) { charsetLocal = Charsets.DEFAULT_CHARACTER_ENCODING; } return Charsets.lookupCharset(charsetLocal); }
private void computeRequestCharset() { if (request.charset == null) { try { final String contentType = request.headers.getFirstValue("Content-Type"); if (contentType != null) { final String charset = AsyncHttpProviderUtils.parseCharset(contentType); if (charset != null) { // ensure that if charset is provided with the Content-Type header, // we propagate that down to the charset of the Request object request.charset = charset; } } } catch (Throwable e) { // NoOp -- we can't fix the Content-Type or charset from here } } }
public String getResponseBodyExcerpt(int maxLength, String charset) throws IOException { // should be fine; except that it may split multi-byte chars (last char may become '?') charset = calculateCharset(charset); byte[] b = AsyncHttpProviderUtils.contentToBytes(bodyParts, maxLength); return new String(b, charset); }