package com.gertherb.api;
import org.scribe.services.Base64Encoder;
import retrofit.Endpoint;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import static retrofit.RestAdapter.LogLevel.FULL;
public class GithubApiFactory {
private static final String X_OAUTH_BASIC = "x-oauth-basic";
private static final String GITHUB_API_URL = "https://api.github.com";
private static final String APPLICATION_VND_GITHUB_V3_JSON = "application/vnd.github.v3+json";
private static final String ACCEPT = "Accept";
private static final String AUTHORIZATION = "Authorization";
private static final String BASIC = "Basic ";
public GithubApi createAuthorizationApi(String username, String password) {
Endpoint endpoint = new Endpoint() {
@Override
public String getUrl() {
return GITHUB_API_URL;
}
@Override
public String getName() {
return "Live";
}
};
RequestInterceptor interceptor = createAuthorizationRequestInterceptor(username, password);
RestAdapter restAdapter = createRestAdapter(endpoint, interceptor);
return restAdapter.create(GithubApi.class);
}
public GithubApi createLoggedInApi(String token) {
return createAuthorizationApi(token, X_OAUTH_BASIC);
}
private RequestInterceptor createAuthorizationRequestInterceptor(final String username, final String password) {
return new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader(ACCEPT, APPLICATION_VND_GITHUB_V3_JSON);
request.addHeader(AUTHORIZATION, BASIC + Base64Encoder.getInstance().encode((username + ":" + password).getBytes()));
}
};
}
private RestAdapter createRestAdapter(Endpoint endpoint, RequestInterceptor interceptor) {
return new RestAdapter.Builder()
.setEndpoint(endpoint)
.setRequestInterceptor(interceptor)
.setLogLevel(FULL)
.build();
}
}