package com.alorma.github.sdk.services.user;
import android.util.Log;
import com.alorma.github.sdk.services.client.GithubClient;
import com.alorma.gitskarios.core.Pair;
import core.User;
import java.util.List;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Header;
import retrofit.client.Response;
import rx.Observable;
public class GetAuthUserClient extends GithubClient<Pair<User, String>> {
private String accessToken;
public GetAuthUserClient() {
super();
}
public GetAuthUserClient(String accessToken) {
super();
this.accessToken = accessToken;
}
@Override
protected Observable<Pair<User, String>> getApiObservable(RestAdapter restAdapter) {
return restAdapter.create(UsersService.class).me().onErrorResumeNext(throwable -> {
if (throwable instanceof RetrofitError) {
Response response = ((RetrofitError) throwable).getResponse();
if (response != null && response.getStatus() == 401) {
List<Header> headers = response.getHeaders();
if (headers != null) {
for (Header header : headers) {
if (header.getName().equals("X-GitHub-OTP") && header.getValue()
.contains("required")) {
return Observable.error(new TwoFactorAuthException());
}
}
return Observable.error(new UnauthorizedException());
}
}
}
return Observable.error(throwable);
}).map(user -> new Pair<>(user, getToken()));
}
@Override
public void intercept(RequestFacade request) {
super.intercept(request);
/*
if (orgName != null && password != null) {
String userCredentials = orgName + ":" + password;
String basicAuth =
"Basic " + new String(Base64.encode(userCredentials.getBytes(), Base64.DEFAULT));
request.addHeader("Authorization", basicAuth.trim());
}
*/
}
@Override
public void log(String message) {
Log.i("RETROFIIT", message);
}
@Override
protected String getToken() {
/*if (orgName != null && password != null) {
return null;
} else {
*/
if (accessToken != null) {
return accessToken;
} else {
return super.getToken();
}
/*}*/
}
}