Github Базовая аутентификация с именем пользователя паролем кодом с использованием модифицированного Android

#android #retrofit #retrofit2 #github-api

Вопрос:

Я пытаюсь создать приложение, в котором будут перечислены все публичные/частные репозитории github для пользователя через API REST github.

Вот GithubService для модернизации.

 public interface GithubService {
@GET("user")
Call<User> getUser(@Header("Authorization") String authHeader);

@GET("users/{user}/repos")
Call<List<GitHubRepo>> userRepos(@Header("Authorization") String authHeader, @Path("user") String userId);}
 

У меня есть форма входа в систему, которая принимает имя пользователя и личный токен доступа пользователя в качестве пароля, и вот код, который я использую для запроса информации о пользователе, это возвращает действительную информацию о пользователе:

 OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("https://api.github.com")
            .client(clientBuilder.build())
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();
    GithubService service = retrofit.create(GithubService.class);
    String cred = Credentials.basic(username, password);

    service.getUser(cred).enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            Log.d(TAG, "onResponse: "   response.isSuccessful());
            fetchRepos(password, response.body());
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            Log.d(TAG, "onFailure: "   t.getMessage());
        }
    });
 

в fetchRepos я пытаюсь использовать маркер личного доступа в качестве заголовка аутентификации для запроса пользовательских репозиториев, но он возвращает значение null, вот код:

 private void fetchRepos(String pat, User user) {
    OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("https://api.github.com")
            .client(clientBuilder.build())
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();
    GithubService service = retrofit.create(GithubService.class);

    service.userRepos(pat, user.getLogin()).enqueue(new Callback<List<GitHubRepo>>() {
        @Override
        public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
            Log.d(TAG, "onResponse: "   response.isSuccessful());
        }

        @Override
        public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {

        }
    });
}
 

Где я здесь ошибаюсь? Как продолжить авторизацию для запроса пользовательских репозиториев и как Двухфакторный код интегрирован в авторизацию?