From af4af4e581729a8852f474ff1c056d7e0261f2b8 Mon Sep 17 00:00:00 2001 From: rotembr Date: Sun, 2 Jul 2017 15:53:30 +0300 Subject: [PATCH 01/33] added support for progressive authentication with rop --- .../appid/MainActivity.java | 2 +- .../ibm/bluemix/appid/android/api/AppID.java | 21 ++++++- .../AuthorizationManager.java | 4 +- .../internal/loginwidget/LoginWidgetImpl.java | 2 +- .../internal/tokenmanager/TokenManager.java | 7 ++- .../bluemix/appid/android/api/AppID_Test.java | 62 +++++++++++++++---- .../AuthorizationManager_Test.java | 9 +-- .../tokenmanager/TokenManager_Test.java | 12 ++-- 8 files changed, 90 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java b/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java index 4b9fc94..9212211 100644 --- a/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java +++ b/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java @@ -164,7 +164,7 @@ public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identi identifiedAccessToken = accessToken; extractAndDisplayDataFromIdentityToken(identityToken); } - }); + }, anonymousAccessToken != null ? anonymousAccessToken.getRaw() : null); } } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java index 8f74678..526b9f3 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java @@ -16,9 +16,11 @@ import android.content.Context; import android.support.annotation.NonNull; +import com.ibm.bluemix.appid.android.api.tokens.AccessToken; import com.ibm.bluemix.appid.android.api.userattributes.UserAttributeManager; import com.ibm.bluemix.appid.android.internal.OAuthManager; import com.ibm.bluemix.appid.android.internal.loginwidget.LoginWidgetImpl; +import com.ibm.bluemix.appid.android.internal.tokens.AccessTokenImpl; import com.ibm.bluemix.appid.android.internal.userattributesmanager.UserAttributeManagerImpl; import org.jetbrains.annotations.NotNull; @@ -149,7 +151,24 @@ public void loginAnonymously(@NotNull Context context, String accessToken, bool * @param tokenResponseListener the token response listener */ public void obtainTokensWithROP(@NotNull Context context, @NotNull String username, @NotNull String password, @NotNull TokenResponseListener tokenResponseListener) { - oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, tokenResponseListener); + AccessToken accessToken = oAuthManager.getTokenManager().getLatestAccessToken(); + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + } + /** + * Obtain token using Resource owner Password (RoP). + * + * @param username the resource owner username + * @param password the resource owner password + * @param tokenResponseListener the token response listener + * @param accessTokenString previous access token of some anonymous user + */ + public void obtainTokensWithROP(@NotNull Context context, @NotNull String username, @NotNull String password, @NotNull TokenResponseListener tokenResponseListener, String accessTokenString) { + if(accessTokenString == null) { + obtainTokensWithROP(context, username, password, tokenResponseListener); + } else { + AccessTokenImpl accessToken = new AccessTokenImpl(accessTokenString); + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + } } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java index 9d34ac4..b582e68 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java @@ -180,7 +180,7 @@ public void setAppIDRequestFactory(AppIDRequestFactory appIDRequestFactory) { this.appIDRequestFactory = appIDRequestFactory; } - public void obtainTokensWithROP(final Context context, final String username, final String password, final TokenResponseListener tokenResponseListener) { + public void obtainTokensWithROP(final Context context, final String username, final String password, final AccessToken accessToken, final TokenResponseListener tokenResponseListener) { registrationManager.ensureRegistered(context, new RegistrationListener() { @Override public void onRegistrationFailure (RegistrationStatus error) { @@ -190,7 +190,7 @@ public void onRegistrationFailure (RegistrationStatus error) { @Override public void onRegistrationSuccess () { - oAuthManager.getTokenManager().obtainTokens(username, password, tokenResponseListener); + oAuthManager.getTokenManager().obtainTokens(username, password, accessToken, tokenResponseListener); } }); } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/loginwidget/LoginWidgetImpl.java b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/loginwidget/LoginWidgetImpl.java index 9dff770..fac7dac 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/loginwidget/LoginWidgetImpl.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/loginwidget/LoginWidgetImpl.java @@ -32,7 +32,7 @@ public LoginWidgetImpl(@NonNull OAuthManager oAuthManager){ public void launch(@NonNull Activity activity, @NonNull AuthorizationListener authorizationListener, String accessTokenString) { - if(accessTokenString == null){ + if(accessTokenString == null) { launch(activity, authorizationListener); return; } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java index cae0793..7dbd597 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java @@ -57,6 +57,7 @@ public class TokenManager { private final static String USERNAME = "username"; private final static String PASSWORD = "password"; private final static String GRANT_TYPE_PASSWORD = "password"; + private final static String APPID_ACCESS_TOKEN = "appid_access_token"; private final static String ERROR_DESCRIPTION= "error_description"; private final static String ERROR_CODE= "error"; private final static String INVALID_GRANT= "invalid_grant"; @@ -126,14 +127,16 @@ public void onSuccess (Response response) { }); } - public void obtainTokens (String username, String password, final TokenResponseListener listener) { + public void obtainTokens (String username, String password, AccessToken accessToken, final TokenResponseListener listener) { logger.debug("obtainTokens - with resource owner password"); HashMap formParams = new HashMap<>(); formParams.put(USERNAME, username); formParams.put(PASSWORD, password); formParams.put(GRANT_TYPE, GRANT_TYPE_PASSWORD); - + if (accessToken != null) { + formParams.put(APPID_ACCESS_TOKEN, accessToken.getRaw()); + } retrieveTokens(formParams, listener); } diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppID_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppID_Test.java index dcb38a0..add3349 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppID_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppID_Test.java @@ -20,6 +20,7 @@ import com.ibm.bluemix.appid.android.internal.registrationmanager.RegistrationStatus; import com.ibm.bluemix.appid.android.internal.userattributesmanager.UserAttributeManagerImpl; import com.ibm.bluemix.appid.android.testing.helpers.ClassHelper; +import com.ibm.bluemix.appid.android.testing.helpers.Consts; import com.ibm.mobilefirstplatform.appid_clientsdk_android.BuildConfig; import org.assertj.core.api.ThrowableAssert; @@ -130,22 +131,59 @@ public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identi @Test public void test03_loginUsingRoP(){ - this.appId.initialize(RuntimeEnvironment.application, testTenantId, testRegion); + this.appId.initialize(RuntimeEnvironment.application, testTenantId, testRegion); - TokenResponseListener listener = new TokenResponseListener() { - @Override - public void onAuthorizationFailure(AuthorizationException exception) { - assertThat(exception.getMessage().equals(RegistrationStatus.FAILED_TO_REGISTER.getDescription())); - } + TokenResponseListener listener = new TokenResponseListener() { + @Override + public void onAuthorizationFailure(AuthorizationException exception) { + assertThat(exception.getMessage().equals(RegistrationStatus.FAILED_TO_REGISTER.getDescription())); + } - @Override - public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identityToken) { - assert(false); - } - }; + @Override + public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identityToken) { + assert(false); + } + }; + + appId.obtainTokensWithROP(RuntimeEnvironment.application, "testUsername", "testPassword", listener); + } + + @Test + public void test04_loginUsingRoPWithNullAccessToken(){ + this.appId.initialize(RuntimeEnvironment.application, testTenantId, testRegion); - appId.obtainTokensWithROP(RuntimeEnvironment.application, "testUsername", "testPassword", listener); + TokenResponseListener listener = new TokenResponseListener() { + @Override + public void onAuthorizationFailure(AuthorizationException exception) { + assertThat(exception.getMessage().equals(RegistrationStatus.FAILED_TO_REGISTER.getDescription())); + } + + @Override + public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identityToken) { + assert(false); + } + }; + + appId.obtainTokensWithROP(RuntimeEnvironment.application, "testUsername", "testPassword", listener, null); + } + + @Test + public void test05_loginUsingRoPWithAccessToken(){ + this.appId.initialize(RuntimeEnvironment.application, testTenantId, testRegion); + + TokenResponseListener listener = new TokenResponseListener() { + @Override + public void onAuthorizationFailure(AuthorizationException exception) { + assertThat(exception.getMessage().equals(RegistrationStatus.FAILED_TO_REGISTER.getDescription())); + } + + @Override + public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identityToken) { + assert(false); + } + }; + appId.obtainTokensWithROP(RuntimeEnvironment.application, "testUsername", "testPassword", listener, Consts.ACCESS_TOKEN); } } diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java index 789b4d9..aa7979e 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java @@ -88,6 +88,7 @@ public class AuthorizationManager_Test { private String username = "testUser"; private String password = "testPassword"; private String testError = "Some Error"; + private AccessToken passedAccessToken = new AccessTokenImpl(Consts.ACCESS_TOKEN); private static final AccessToken expectedAccessToken = new AccessTokenImpl(Consts.ACCESS_TOKEN); private static final IdentityToken expectedIdToken = new IdentityTokenImpl(Consts.ID_TOKEN); @@ -128,12 +129,12 @@ public void before() { @Override public Void answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); - TokenResponseListener tokenListener = (TokenResponseListener) args[2]; + TokenResponseListener tokenListener = (TokenResponseListener) args[3]; tokenListener.onAuthorizationSuccess(expectedAccessToken, expectedIdToken); return null; } } - ).when(tokenManagerMock).obtainTokens(eq(username), eq(password), any(TokenResponseListener.class)); + ).when(tokenManagerMock).obtainTokens(eq(username), eq(password), eq(passedAccessToken), any(TokenResponseListener.class)); doAnswer(new Answer() { @Override @@ -163,7 +164,7 @@ public Void answer(InvocationOnMock invocation) { }).when(registrationManager).ensureRegistered(eq(mockContext), any(RegistrationListener.class)); - authManager.obtainTokensWithROP(mockContext, username, password, new TokenResponseListener() { + authManager.obtainTokensWithROP(mockContext, username, password, passedAccessToken, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), RegistrationStatus.NOT_REGISTRED.getDescription()); @@ -188,7 +189,7 @@ public Void answer(InvocationOnMock invocation) { } ).when(registrationManager).ensureRegistered(eq(mockContext), any(RegistrationListener.class)); - authManager.obtainTokensWithROP(mockContext, username, password, new TokenResponseListener() { + authManager.obtainTokensWithROP(mockContext, username, password, passedAccessToken, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { fail("should get to onAuthorizationSuccess"); diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java index f664a44..794d88a 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java @@ -160,7 +160,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(stubRequest).send(any(Map.class), any(ResponseListener.class)); - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, new AccessTokenImpl(Consts.ACCESS_TOKEN), new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { fail("should get to onAuthorizationSuccess"); @@ -210,7 +210,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(stubRequest).send(any(Map.class), any(ResponseListener.class)); - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, null, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), "Failed to retrieve tokens: " + testDescription); @@ -224,7 +224,7 @@ public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identi }); //test the exception parsing testReponse = null; - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, null, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), "Failed to retrieve tokens" ); @@ -252,7 +252,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(stubRequest).send(any(Map.class), any(ResponseListener.class)); - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, null, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), "Failed to parse server response"); @@ -287,7 +287,7 @@ public Map> getHeaders() { return null; } }; - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, null, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), "Failed to parse access_token"); @@ -323,7 +323,7 @@ public Map> getHeaders() { } }; - spyTokenManager.obtainTokens(username, password, new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, null, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { assertEquals(exception.getMessage(), "Failed to parse id_token"); From e3dd78bf197ef7902c88b73b59a8eca85ab4a29d Mon Sep 17 00:00:00 2001 From: rotembr Date: Mon, 3 Jul 2017 14:33:14 +0300 Subject: [PATCH 02/33] small fix --- .../main/java/com/ibm/bluemix/appid/android/api/AppID.java | 5 ++++- .../appid/android/api/AppIDAuthorizationManager_Test.java | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java index 526b9f3..3673f5c 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java @@ -152,7 +152,10 @@ public void loginAnonymously(@NotNull Context context, String accessToken, bool */ public void obtainTokensWithROP(@NotNull Context context, @NotNull String username, @NotNull String password, @NotNull TokenResponseListener tokenResponseListener) { AccessToken accessToken = oAuthManager.getTokenManager().getLatestAccessToken(); - oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + if (accessToken != null && accessToken.isAnonymous()) { + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + } + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, null, tokenResponseListener); } /** * Obtain token using Resource owner Password (RoP). diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppIDAuthorizationManager_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppIDAuthorizationManager_Test.java index f3bb71e..e1e7a05 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppIDAuthorizationManager_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/api/AppIDAuthorizationManager_Test.java @@ -214,7 +214,7 @@ public void onSuccess(Response response) { public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { fail("should get to onSuccess"); } - }, null); + }); } @Test @@ -240,7 +240,7 @@ public void onSuccess(Response response) { public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { assertEquals(t.getMessage(), "test exception"); } - }, null); + }); } @Test @@ -266,7 +266,7 @@ public void onSuccess(Response response) { public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { assertEquals(t.getMessage(), "Authorization canceled"); } - }, null); + }); } } From f80d3d6d76e8c63a21744369f1c6c4cb98e7eb23 Mon Sep 17 00:00:00 2001 From: rotembr Date: Tue, 4 Jul 2017 08:12:31 +0300 Subject: [PATCH 03/33] passing access token as string --- .../main/java/com/ibm/bluemix/appid/android/api/AppID.java | 5 ++--- .../internal/authorizationmanager/AuthorizationManager.java | 4 ++-- .../appid/android/internal/tokenmanager/TokenManager.java | 6 +++--- .../authorizationmanager/AuthorizationManager_Test.java | 2 +- .../android/internal/tokenmanager/TokenManager_Test.java | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java index 3673f5c..561de9c 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/api/AppID.java @@ -153,7 +153,7 @@ public void loginAnonymously(@NotNull Context context, String accessToken, bool public void obtainTokensWithROP(@NotNull Context context, @NotNull String username, @NotNull String password, @NotNull TokenResponseListener tokenResponseListener) { AccessToken accessToken = oAuthManager.getTokenManager().getLatestAccessToken(); if (accessToken != null && accessToken.isAnonymous()) { - oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken.getRaw(), tokenResponseListener); } oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, null, tokenResponseListener); } @@ -169,8 +169,7 @@ public void obtainTokensWithROP(@NotNull Context context, @NotNull String userna if(accessTokenString == null) { obtainTokensWithROP(context, username, password, tokenResponseListener); } else { - AccessTokenImpl accessToken = new AccessTokenImpl(accessTokenString); - oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessToken, tokenResponseListener); + oAuthManager.getAuthorizationManager().obtainTokensWithROP(context, username, password, accessTokenString, tokenResponseListener); } } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java index b582e68..8546fc4 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager.java @@ -180,7 +180,7 @@ public void setAppIDRequestFactory(AppIDRequestFactory appIDRequestFactory) { this.appIDRequestFactory = appIDRequestFactory; } - public void obtainTokensWithROP(final Context context, final String username, final String password, final AccessToken accessToken, final TokenResponseListener tokenResponseListener) { + public void obtainTokensWithROP(final Context context, final String username, final String password, final String accessTokenString, final TokenResponseListener tokenResponseListener) { registrationManager.ensureRegistered(context, new RegistrationListener() { @Override public void onRegistrationFailure (RegistrationStatus error) { @@ -190,7 +190,7 @@ public void onRegistrationFailure (RegistrationStatus error) { @Override public void onRegistrationSuccess () { - oAuthManager.getTokenManager().obtainTokens(username, password, accessToken, tokenResponseListener); + oAuthManager.getTokenManager().obtainTokens(username, password, accessTokenString, tokenResponseListener); } }); } diff --git a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java index 7dbd597..bf16f00 100644 --- a/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager.java @@ -127,15 +127,15 @@ public void onSuccess (Response response) { }); } - public void obtainTokens (String username, String password, AccessToken accessToken, final TokenResponseListener listener) { + public void obtainTokens (String username, String password, String accessTokenString, final TokenResponseListener listener) { logger.debug("obtainTokens - with resource owner password"); HashMap formParams = new HashMap<>(); formParams.put(USERNAME, username); formParams.put(PASSWORD, password); formParams.put(GRANT_TYPE, GRANT_TYPE_PASSWORD); - if (accessToken != null) { - formParams.put(APPID_ACCESS_TOKEN, accessToken.getRaw()); + if (accessTokenString != null) { + formParams.put(APPID_ACCESS_TOKEN, accessTokenString); } retrieveTokens(formParams, listener); } diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java index aa7979e..84db22b 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/authorizationmanager/AuthorizationManager_Test.java @@ -88,7 +88,7 @@ public class AuthorizationManager_Test { private String username = "testUser"; private String password = "testPassword"; private String testError = "Some Error"; - private AccessToken passedAccessToken = new AccessTokenImpl(Consts.ACCESS_TOKEN); + private String passedAccessToken = Consts.ACCESS_TOKEN; private static final AccessToken expectedAccessToken = new AccessTokenImpl(Consts.ACCESS_TOKEN); private static final IdentityToken expectedIdToken = new IdentityTokenImpl(Consts.ID_TOKEN); diff --git a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java index 794d88a..bc0d2f2 100644 --- a/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java +++ b/lib/src/test/java/com/ibm/bluemix/appid/android/internal/tokenmanager/TokenManager_Test.java @@ -160,7 +160,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(stubRequest).send(any(Map.class), any(ResponseListener.class)); - spyTokenManager.obtainTokens(username, password, new AccessTokenImpl(Consts.ACCESS_TOKEN), new TokenResponseListener() { + spyTokenManager.obtainTokens(username, password, Consts.ACCESS_TOKEN, new TokenResponseListener() { @Override public void onAuthorizationFailure(AuthorizationException exception) { fail("should get to onAuthorizationSuccess"); From 45c9be7951d2136ab220714e20176892b2cf7ba9 Mon Sep 17 00:00:00 2001 From: rotembr Date: Wed, 5 Jul 2017 11:47:53 +0300 Subject: [PATCH 04/33] fix some labeling in ReadMe --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a8a428d..6ca8dff 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Android SDK for the Bluemix App ID service [![Bluemix powered][img-bluemix-powered]][url-bluemix] [![Travis][img-travis-master]][url-travis-master] -[![Coveralls][img-coveralls-master]][url-coveralls-master] +[![Coverage Status][img-coveralls-master]][url-coveralls-master] [![Codacy][img-codacy]][url-codacy] [![Release](https://jitpack.io/v/ibm-cloud-security/appid-clientsdk-android.svg)](https://jitpack.io/#ibm-cloud-security/appid-clientsdk-android) [![License][img-license]][url-bintray] @@ -218,8 +218,8 @@ This package contains code licensed under the Apache License, Version 2.0 (the " [img-travis-master]: https://travis-ci.org/ibm-cloud-security/appid-clientsdk-android.svg [url-travis-master]: https://travis-ci.org/ibm-cloud-security/appid-clientsdk-android -[img-coveralls-master]: https://coveralls.io/repos/github/ibm-cloud-security/appid-clientsdk-android/badge.svg -[url-coveralls-master]: https://coveralls.io/github/ibm-cloud-security/appid-clientsdk-android +[img-coveralls-master]: https://coveralls.io/repos/github/ibm-cloud-security/appid-clientsdk-android/badge.svg?branch=master +[url-coveralls-master]: https://coveralls.io/github/ibm-cloud-security/appid-clientsdk-android?branch=master -[img-codacy]: https://api.codacy.com/project/badge/Grade/d41f8f069dd343769fcbdb55089561fc?branch=master +[img-codacy]: https://api.codacy.com/project/badge/Grade/d41f8f069dd343769fcbdb55089561fc [url-codacy]: https://www.codacy.com/app/ibm-cloud-security/appid-clientsdk-android From 3cbdca81e4d4a72de6d18c30ec948643285e2757 Mon Sep 17 00:00:00 2001 From: rotembr Date: Mon, 10 Jul 2017 00:28:35 +0300 Subject: [PATCH 05/33] added API for opening sign up screen --- .../appid/MainActivity.java | 33 ++++++++ app/src/main/res/layout/activity_main.xml | 16 +++- .../ibm/bluemix/appid/android/api/AppID.java | 3 +- .../appid/android/api/LoginWidget.java | 6 ++ .../AuthorizationManager.java | 51 +++++++----- .../internal/loginwidget/LoginWidgetImpl.java | 8 ++ .../AuthorizationManager_Test.java | 81 ++++++++++++++++++- .../loginwidget/LoginWidgetImpl_Test.java | 33 ++++++++ 8 files changed, 209 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java b/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java index 9212211..4118e00 100644 --- a/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java +++ b/app/src/main/java/com/ibm/mobilefirstplatform/appid/MainActivity.java @@ -127,6 +127,37 @@ public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identi }, anonymousAccessToken != null ? anonymousAccessToken.getRaw() : null); } + public void onSignUpClick(View v) { + logger.debug("onSignUpClick"); + showProgress(); + LoginWidget loginWidget = appId.getLoginWidget(); + loginWidget.launchSignUp(this, new AuthorizationListener() { + @Override + public void onAuthorizationFailure(AuthorizationException exception) { + logger.info("onAuthorizationFailure: " + exception.getMessage()); + showResponse(exception.getMessage()); + hideProgress(); + } + + @Override + public void onAuthorizationCanceled() { + logger.info("onAuthorizationCanceled"); + hideProgress(); + } + + @Override + public void onAuthorizationSuccess(AccessToken accessToken, IdentityToken identityToken) { + logger.info("onAuthorizationSuccess"); + logger.info("access_token: " + accessToken.getRaw()); + logger.info("id_token: " + identityToken.getRaw()); + logger.info("access_token isExpired: " + accessToken.isExpired()); + logger.info("id_token isExpired: " + identityToken.isExpired()); + identifiedAccessToken = accessToken; + extractAndDisplayDataFromIdentityToken(identityToken); + } + }); + } + public void onGetTokenUsingRoP(View v) { logger.debug("onGetTokenUsingRoP"); showResponse(""); @@ -349,6 +380,7 @@ public void run() { findViewById(R.id.loginButton).setEnabled(false); findViewById(R.id.ropButton).setEnabled(false); findViewById(R.id.protectedRequestButton).setEnabled(false); + findViewById(R.id.signUpButton).setEnabled(false); findViewById(R.id.deleteAttribute).setEnabled(false); findViewById(R.id.anonloginButton).setEnabled(false); findViewById(R.id.getAllAttributes).setEnabled(false); @@ -369,6 +401,7 @@ public void run() { findViewById(R.id.loginButton).setEnabled(true); findViewById(R.id.ropButton).setEnabled(true); findViewById(R.id.protectedRequestButton).setEnabled(true); + findViewById(R.id.signUpButton).setEnabled(true); findViewById(R.id.deleteAttribute).setEnabled(true); findViewById(R.id.anonloginButton).setEnabled(true); findViewById(R.id.getAllAttributes).setEnabled(true); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 984e70a..2acf963 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -53,7 +53,18 @@ android:layout_below="@+id/profilePic" android:layout_weight="1" android:onClick="onAnonLoginClick" - android:text="Use Anonymously" + android:text="use anonymously" + android:textSize="12sp" /> + +