package glaze.oauth.util; import glaze.client.Client; import glaze.oauth.OAuthSchemeFactory; import glaze.oauth.PreemptiveAuthorizer; import glaze.oauth.creds.OAuthCredentials; import glaze.oauth.spi.OAuthCredentialsProvider; import glaze.spi.Registry; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.HttpRequest; import org.apache.http.auth.AuthenticationException; import com.google.common.base.Preconditions; public class OAuthClientHelper { public static void enablePreemptiveAuth(final Client client) { enablePreemptiveAuth(client, Registry.lookup(OAuthCredentialsProvider.class)); } public static void enablePreemptiveAuth(final Client client, final OAuthCredentialsProvider credentialsProvider) { client.registerAuthScheme(OAuthSchemeFactory.SCHEME_NAME, new OAuthSchemeFactory()); credentialsProvider.visit(client); client.proxyAuthPref("oauth", "basic", "digest"); client.interceptRequest(new PreemptiveAuthorizer(), 0); } public static Header signRequest(final HttpRequest request) throws AuthenticationException { return signRequest(null, request); } public static Header signRequest(OAuthCredentialsProvider provider, final HttpRequest request) throws AuthenticationException { return signRequest(provider, null, request); } /** * Convenience method for per-request based authorization. * * @param provider * @param context * @param request * @return * @throws AuthenticationException */ public static Header signRequest(final OAuthCredentialsProvider provider, final Object context, final HttpRequest request) throws AuthenticationException { Preconditions.checkNotNull(request); OAuthCredentialsProvider oprov = provider == null ? Registry.lookup(OAuthCredentialsProvider.class) : provider; try { OAuthCredentials credentials = oprov.getOAuthCredentials(context); credentials.sign(request); return request.getFirstHeader(HttpHeaders.AUTHORIZATION); } catch (Exception e) { throw new AuthenticationException(e.getMessage(), e); } } }