/**
*
*/
package org.uli.forwardproxy;
import java.net.URI;
import org.eclipse.jetty.client.api.Authentication;
import org.eclipse.jetty.client.api.ContentResponse;
import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.util.Attributes;
import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author uli
*
*/
public class BasicProxyAuthentication implements Authentication {
Logger myLogger = LoggerFactory.getLogger(getClass());
String user;
String password;
BasicProxyAuthentication(String user, String password) {
this.user = user;
this.password = password;
}
/* (non-Javadoc)
* @see org.eclipse.jetty.client.api.Authentication#matches(java.lang.String, java.net.URI, java.lang.String)
*/
@Override
public boolean matches(String type, URI uri, String realm) {
return true;
}
@Override
public Result authenticate(Request request, ContentResponse response, HeaderInfo headerInfo, Attributes context)
{
myLogger.debug("-> request={}, response={}, headerInfo={}", request, response, headerInfo);
String value = getValue(user, password);
Result result = new BasicProxyResult(headerInfo.getHeader(), request.getURI(), value);
myLogger.debug("<- {}", result);
return result;
}
private final String getValue(String user, String password) {
String encoding = StringUtil.__ISO_8859_1;
String value = "Basic " + B64Code.encode(user + ":" + password, encoding);
return value;
}
public void apply(Request request) {
String value = getValue(user, password);
request.header(HttpHeader.PROXY_AUTHORIZATION/*"Proxy-Authorization"*/, value);
}
private static class BasicProxyResult implements Result
{
Logger myLogger = LoggerFactory.getLogger(getClass());
private final HttpHeader header;
private final URI uri;
private final String value;
public BasicProxyResult(HttpHeader header, URI uri, String value)
{
this.header = header;
this.uri = uri;
this.value = value;
}
@Override
public URI getURI()
{
return uri;
}
@Override
public void apply(Request request)
{
myLogger.debug("-> header={}, value={}", header, value);
request.header(header, value);
myLogger.debug("<-");
}
@Override
public String toString()
{
return String.format("Basic proxy authentication result for %s", uri);
}
}
}