From e4f87edccbebf4d193868d3d2d52f278131df4e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernat=20Borr=C3=A1s-Paronella=20Petit?= Date: Sun, 12 Mar 2017 14:26:47 +0100 Subject: [PATCH] Fix Authorization with fingerprint --- .../com/fastaccess/data/LoginRestService.java | 37 +++++++++++++++++++ .../data/service/UserRestService.java | 16 -------- .../provider/rest/LoginProvider.java | 5 ++- .../provider/rest/RestProvider.java | 8 ++-- .../ui/modules/login/LoginPresenter.java | 7 +++- 5 files changed, 48 insertions(+), 25 deletions(-) create mode 100644 app/src/main/java/com/fastaccess/data/LoginRestService.java diff --git a/app/src/main/java/com/fastaccess/data/LoginRestService.java b/app/src/main/java/com/fastaccess/data/LoginRestService.java new file mode 100644 index 00000000..682ef06c --- /dev/null +++ b/app/src/main/java/com/fastaccess/data/LoginRestService.java @@ -0,0 +1,37 @@ +package com.fastaccess.data; + +import android.support.annotation.NonNull; +import com.fastaccess.data.dao.AccessTokenModel; +import com.fastaccess.data.dao.AuthModel; +import retrofit2.Response; +import retrofit2.http.Body; +import retrofit2.http.DELETE; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.Header; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Path; +import rx.Observable; + +public interface LoginRestService { + + @FormUrlEncoded + @POST("access_token") + Observable getAccessToken(@NonNull @Field("code") String code, + @NonNull @Field("client_id") String clientId, + @NonNull @Field("client_secret") String clientSecret, + @NonNull @Field("state") String state, + @NonNull @Field("redirect_uri") String redirectUrl); + + @PUT("authorizations/clients/{clientId}/{fingerprint}") Observable login(@NonNull @Path("clientId") String clientId, + @NonNull @Path("clientId") String fingerprint, + @NonNull @Body AuthModel authModel); + + @PUT("authorizations/clients/{clientId}/{fingerprint}") Observable login(@NonNull @Path("clientId") String clientId, + @NonNull @Path("clientId") String fingerprint, + @NonNull @Body AuthModel authModel, + @NonNull @Header("X-GitHub-OTP") String otpCode); + + @DELETE("authorizations/{id}") Observable> deleteToken(@Path("id") long id); +} diff --git a/app/src/main/java/com/fastaccess/data/service/UserRestService.java b/app/src/main/java/com/fastaccess/data/service/UserRestService.java index 03edd830..41287c5b 100644 --- a/app/src/main/java/com/fastaccess/data/service/UserRestService.java +++ b/app/src/main/java/com/fastaccess/data/service/UserRestService.java @@ -29,22 +29,6 @@ import rx.Observable; public interface UserRestService { - @FormUrlEncoded @POST("access_token") - Observable getAccessToken(@NonNull @Field("code") String code, - @NonNull @Field("client_id") String clientId, - @NonNull @Field("client_secret") String clientSecret, - @NonNull @Field("state") String state, - @NonNull @Field("redirect_uri") String redirectUrl); - - @PUT("authorizations/clients/{clientId}") Observable login(@NonNull @Path("clientId") String clientId, - @NonNull @Body AuthModel authModel); - - @PUT("authorizations/clients/{clientId}") Observable login(@NonNull @Path("clientId") String clientId, - @NonNull @Body AuthModel authModel, - @NonNull @Header("X-GitHub-OTP") String otpCode); - - @DELETE("authorizations/{id}") Observable> deleteToken(@Path("id") long id); - @GET("user") Observable getUser(); @GET("users/{username}") Observable getUser(@Path("username") @NonNull String username); diff --git a/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java b/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java index 4a905e45..67d2f3cf 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/LoginProvider.java @@ -3,6 +3,7 @@ package com.fastaccess.provider.rest; import android.support.annotation.NonNull; import com.fastaccess.BuildConfig; +import com.fastaccess.data.LoginRestService; import com.fastaccess.data.service.UserRestService; import com.fastaccess.provider.rest.converters.GithubResponseConverter; import com.fastaccess.provider.rest.interceptors.AuthenticationInterceptor; @@ -49,7 +50,7 @@ public class LoginProvider { .build(); } - @NonNull public static UserRestService getLoginRestService(@NonNull String authToken) { - return provideRetrofit(authToken).create(UserRestService.class); + @NonNull public static LoginRestService getLoginRestService(@NonNull String authToken) { + return provideRetrofit(authToken).create(LoginRestService.class); } } diff --git a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java index 063c28ca..2360e9a5 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java @@ -5,10 +5,10 @@ import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; - import com.fastaccess.App; import com.fastaccess.BuildConfig; import com.fastaccess.R; +import com.fastaccess.data.LoginRestService; import com.fastaccess.data.dao.GitHubErrorResponse; import com.fastaccess.data.service.GistService; import com.fastaccess.data.service.IssueService; @@ -25,9 +25,7 @@ import com.fastaccess.provider.rest.interceptors.PaginationInterceptor; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; - import java.lang.reflect.Modifier; - import okhttp3.Cache; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -117,14 +115,14 @@ public class RestProvider { return -1; } - @NonNull public static UserRestService getLoginRestService() { + @NonNull public static LoginRestService getLoginRestService() { return new Retrofit.Builder() .client(provideOkHttpClient(true)) .baseUrl("https://github.com/login/oauth/") .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build() - .create(UserRestService.class); + .create(LoginRestService.class); } @NonNull public static UserRestService getUserService() { diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java index c0bd6cc2..4b7c05e2 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginPresenter.java @@ -17,6 +17,7 @@ import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import java.util.Arrays; +import java.util.UUID; import okhttp3.Credentials; import retrofit2.adapter.rxjava.HttpException; import rx.Observable; @@ -69,11 +70,13 @@ class LoginPresenter extends BasePresenter implements LoginMvp.Pr authModel.setNote(BuildConfig.APPLICATION_ID + "-" + authToken);//make it unique to FastHub. authModel.setClientSecret(BuildConfig.GITHUB_SECRET); + UUID uuid = UUID.randomUUID(); + Observable loginCall = - LoginProvider.getLoginRestService(authToken).login(BuildConfig.GITHUB_CLIENT_ID, authModel); + LoginProvider.getLoginRestService(authToken).login(BuildConfig.GITHUB_CLIENT_ID, uuid.toString(), authModel); if (twoFactorCode != null && !twoFactorCode.isEmpty()) { - loginCall = LoginProvider.getLoginRestService(authToken).login(BuildConfig.GITHUB_CLIENT_ID, authModel, + loginCall = LoginProvider.getLoginRestService(authToken).login(BuildConfig.GITHUB_CLIENT_ID, uuid.toString(), authModel, twoFactorCode); }