package org.esxx.oauth;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpRequest;
import org.apache.http.auth.AuthenticationException;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.MalformedChallengeException;
import org.apache.http.impl.auth.RFC2617Scheme;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHeaderValueParser;
import org.apache.http.message.HeaderValueParser;
import org.apache.http.message.ParserCursor;
import org.apache.http.util.CharArrayBuffer;
public class WRAPScheme
extends RFC2617Scheme {
private boolean complete = false;
public WRAPScheme() {
super();
}
@Override public void processChallenge(Header header)
throws MalformedChallengeException {
super.processChallenge(header);
complete = true;
}
@Override public String getSchemeName() {
return WRAPSchemeFactory.SCHEME_NAME;
}
@Override public String getRealm() {
return null;
}
@Override public boolean isConnectionBased() {
return false;
}
@Override public boolean isComplete() {
return complete;
}
@Override protected void parseChallenge(CharArrayBuffer buffer, int pos, int len)
throws MalformedChallengeException {
HeaderValueParser parser = BasicHeaderValueParser.DEFAULT;
ParserCursor cursor = new ParserCursor(pos, buffer.length());
HeaderElement[] elements = parser.parseElements(buffer, cursor);
if (elements.length != 0) {
throw new MalformedChallengeException("Authentication challenge contains parameters");
}
}
@Override public Header authenticate(Credentials credentials, HttpRequest request)
throws AuthenticationException {
if (credentials == null) {
throw new IllegalArgumentException("No credentials");
}
return new BasicHeader("Authorization",
getSchemeName() +
" access_token=\"" + credentials.getPassword() + "\"");
}
}