package glaze.oauth;
import glaze.oauth.creds.OAuthCredentials;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.annotation.NotThreadSafe;
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.impl.client.RequestWrapper;
import org.apache.http.protocol.HttpContext;
@NotThreadSafe
class OAuthScheme extends RFC2617Scheme
{
private final String defaultRealm;
// Whether the authentication process is complete (for the current context)
private boolean complete;
OAuthScheme(String defaultRealm)
{
this.defaultRealm = defaultRealm;
}
@Override
@Deprecated
public Header authenticate(Credentials paramCredentials, HttpRequest paramHttpRequest)
throws AuthenticationException
{
throw new UnsupportedOperationException();
}
@Override
public Header authenticate(Credentials credentials, HttpRequest request, HttpContext context)
throws AuthenticationException
{
try {
HttpRequest original = ((RequestWrapper) request).getOriginal();
((OAuthCredentials) credentials).sign(original);
return original.getFirstHeader("Authorization");
} catch (Exception e) {
throw new AuthenticationException(e.getMessage(), e);
}
}
@Override
public String getRealm()
{
String realm = super.getRealm();
if (realm == null) {
realm = defaultRealm;
}
return realm;
}
@Override
public String getSchemeName()
{
return OAuthSchemeFactory.SCHEME_NAME;
}
@Override
public boolean isComplete()
{
return complete;
}
@Override
public boolean isConnectionBased()
{
return false;
}
@Override
public void processChallenge(Header challenge) throws MalformedChallengeException
{
super.processChallenge(challenge);
complete = true;
}
}