From 41608fc135faeaed70ce2598eaad46d30cbe0be5 Mon Sep 17 00:00:00 2001 From: yigald Date: Thu, 8 Nov 2018 15:53:46 +0200 Subject: [PATCH 1/9] notify oauth server on logout --- build.gradle | 4 +- .../api/AppIDAuthorizationManager.java | 3 +- .../internal/tokenmanager/TokenManager.java | 47 +++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 7e67858..0c04b5a 100644 --- a/build.gradle +++ b/build.gradle @@ -3,13 +3,15 @@ buildscript { repositories { jcenter() +// google() maven { url 'https://maven.google.com/' name 'Google' } } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath "com.android.tools.build:gradle:3.1.1" + // classpath 'com.android.tools.build:gradle:3.1.2' classpath "org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.7.1" // classpath 'org.robolectric:robolectric-gradle-plugin:1.1.0' // classpath 'org.jacoco:org.jacoco.core:0.7.8' diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java index 3d5676a..7d98019 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java @@ -189,13 +189,12 @@ public AppIdentity getAppIdentity () { * log out * @param context * @param listener - * currently just call to clearAuthorizationData() */ @Override public void logout (Context context, ResponseListener listener) { logger.debug("logout"); + oAuthManager.getTokenManager().notifyLogout(/*listener*/); clearAuthorizationData(); - // TODO: implement logout } public AccessToken getAccessToken () { diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java index 3bb5cab..e97c3cb 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java @@ -50,6 +50,8 @@ import io.jsonwebtoken.IncorrectClaimException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureException; +import okhttp3.MediaType; +import okhttp3.RequestBody; public class TokenManager { @@ -75,6 +77,12 @@ public class TokenManager { private final static String ERROR_DESCRIPTION = "error_description"; private final static String ERROR = "error"; private final static String INVALID_GRANT = "invalid_grant"; + + private static final String OAUTH_ACTIVITY_LOGGING_PATH = "/activity_logging"; + private static final String ID_KEY = "id_token"; + private static final String ACTIVITY_KEY = "eventName"; + private static final String LOGOUT_ACTIVITY = "logout"; + protected enum TOKENS { ACCESS_TOKEN("access_token"), ID_TOKEN("id_token"), @@ -352,6 +360,45 @@ protected boolean verifyToken(Key rsaPublicKey, String token, String issuer, Str } } + private void sendLoggingRequest(AccessToken accessToken, IdentityToken idToken, String activity) + { + if (accessToken == null || idToken == null) { + logger.debug("No tokens found for sending logging request"); + return; + } + + RequestBody requestBody; + try { + JSONObject json = new JSONObject(); + json.put(ACTIVITY_KEY, activity); + json.put(ID_KEY, idToken.getRaw()); + requestBody = RequestBody.create(MediaType.parse("application/json"), json.toString()); + } + catch (JSONException err) { // shouldn't happen + logger.debug("Failed to create logging request"); + return; + } + + String url = Config.getOAuthServerUrl(appId) + OAUTH_ACTIVITY_LOGGING_PATH; + + AppIDRequest request = new AppIDRequest(url, "POST"); + + ResponseListener resListener = new ResponseListener() { + @Override + public void onSuccess(Response response) { + } + @Override + public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { + logger.debug("Failed to submit logging request"); + } + }; + request.send (resListener, requestBody, accessToken); + } + + public void notifyLogout(/*ResponseListener listener*/) { + sendLoggingRequest(latestAccessToken, latestIdentityToken, LOGOUT_ACTIVITY); + } + public AccessToken getLatestAccessToken () { return latestAccessToken; } From 725a905d1cb3535b3218a3d9892d81a1510f86b2 Mon Sep 17 00:00:00 2001 From: yigald Date: Sun, 11 Nov 2018 09:53:15 +0200 Subject: [PATCH 2/9] temporary server path --- .../com/ibm/cloud/appid/android/internal/config/Config.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java index 1d5a9a7..ce85615 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java @@ -25,7 +25,8 @@ public class Config { private Config(){} public static String getOAuthServerUrl (AppID appId) { - String serverUrl = serverUrlPrefix + appId.getBluemixRegionSuffix() + OAUTH_ENDPOINT; +// String serverUrl = serverUrlPrefix + appId.getBluemixRegionSuffix() + OAUTH_ENDPOINT; + String serverUrl = "http://localhost:6002"; if (null != appId.overrideOAuthServerHost) { serverUrl = appId.overrideOAuthServerHost; } From 0016784b559bd6e4eda862156af56cc205460bdb Mon Sep 17 00:00:00 2001 From: yigald Date: Sun, 11 Nov 2018 09:56:07 +0200 Subject: [PATCH 3/9] temporary server path --- .../com/ibm/cloud/appid/android/internal/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java index ce85615..382176e 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java @@ -26,7 +26,7 @@ private Config(){} public static String getOAuthServerUrl (AppID appId) { // String serverUrl = serverUrlPrefix + appId.getBluemixRegionSuffix() + OAUTH_ENDPOINT; - String serverUrl = "http://localhost:6002"; + String serverUrl = "http://localhost:6002" + OAUTH_ENDPOINT; if (null != appId.overrideOAuthServerHost) { serverUrl = appId.overrideOAuthServerHost; } From abd23c1ac04e17e87f3b8e502d8ac72763ae4f4e Mon Sep 17 00:00:00 2001 From: yigald Date: Sun, 11 Nov 2018 11:10:32 +0200 Subject: [PATCH 4/9] temporary server path --- .../test/java/com/ibm/cloud/appid/android/api/Config_Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java index 40ef98d..02d04b0 100644 --- a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java +++ b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java @@ -44,7 +44,7 @@ public void before() { @Test public void testConfig(){ String url = com.ibm.cloud.appid.android.internal.config.Config.getOAuthServerUrl(appId); - assertThat(url).isEqualTo("https://appid-oauth.region.com/oauth/v3/tenant-id"); + assertThat(url).isEqualTo("http://localhost:6002/oauth/v3/tenant-id"); url = com.ibm.cloud.appid.android.internal.config.Config.getUserProfilesServerUrl(appId); assertThat(url).isEqualTo("https://appid-profiles.region.com/api/v1/"); From 967b3de55da535abcb91a999387a1e00886d09bc Mon Sep 17 00:00:00 2001 From: yigald Date: Sun, 11 Nov 2018 11:19:00 +0200 Subject: [PATCH 5/9] restore server path --- .../com/ibm/cloud/appid/android/internal/config/Config.java | 3 +-- .../test/java/com/ibm/cloud/appid/android/api/Config_Test.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java index 382176e..1d5a9a7 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/config/Config.java @@ -25,8 +25,7 @@ public class Config { private Config(){} public static String getOAuthServerUrl (AppID appId) { -// String serverUrl = serverUrlPrefix + appId.getBluemixRegionSuffix() + OAUTH_ENDPOINT; - String serverUrl = "http://localhost:6002" + OAUTH_ENDPOINT; + String serverUrl = serverUrlPrefix + appId.getBluemixRegionSuffix() + OAUTH_ENDPOINT; if (null != appId.overrideOAuthServerHost) { serverUrl = appId.overrideOAuthServerHost; } diff --git a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java index 02d04b0..8ec7d08 100644 --- a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java +++ b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java @@ -44,7 +44,7 @@ public void before() { @Test public void testConfig(){ String url = com.ibm.cloud.appid.android.internal.config.Config.getOAuthServerUrl(appId); - assertThat(url).isEqualTo("http://localhost:6002/oauth/v3/tenant-id"); + assertThat(url).isEqualTo("http://appid-oauth.region.com/oauth/v3/tenant-id"); url = com.ibm.cloud.appid.android.internal.config.Config.getUserProfilesServerUrl(appId); assertThat(url).isEqualTo("https://appid-profiles.region.com/api/v1/"); From 849225be58ffdd1a493f14157076badcc3817bd3 Mon Sep 17 00:00:00 2001 From: yigald Date: Sun, 11 Nov 2018 11:29:21 +0200 Subject: [PATCH 6/9] restore server path --- .../test/java/com/ibm/cloud/appid/android/api/Config_Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java index 8ec7d08..40ef98d 100644 --- a/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java +++ b/lib/src/test/java/com/ibm/cloud/appid/android/api/Config_Test.java @@ -44,7 +44,7 @@ public void before() { @Test public void testConfig(){ String url = com.ibm.cloud.appid.android.internal.config.Config.getOAuthServerUrl(appId); - assertThat(url).isEqualTo("http://appid-oauth.region.com/oauth/v3/tenant-id"); + assertThat(url).isEqualTo("https://appid-oauth.region.com/oauth/v3/tenant-id"); url = com.ibm.cloud.appid.android.internal.config.Config.getUserProfilesServerUrl(appId); assertThat(url).isEqualTo("https://appid-profiles.region.com/api/v1/"); From b94bfa8b23f4f6a133ae4feabeee4de151136799 Mon Sep 17 00:00:00 2001 From: yigald Date: Wed, 14 Nov 2018 13:22:52 +0200 Subject: [PATCH 7/9] add log messge --- .../ibm/cloud/appid/android/api/AppIDAuthorizationManager.java | 2 +- .../cloud/appid/android/internal/tokenmanager/TokenManager.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java index 7d98019..447f935 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/api/AppIDAuthorizationManager.java @@ -193,7 +193,7 @@ public AppIdentity getAppIdentity () { @Override public void logout (Context context, ResponseListener listener) { logger.debug("logout"); - oAuthManager.getTokenManager().notifyLogout(/*listener*/); + oAuthManager.getTokenManager().notifyLogout(); clearAuthorizationData(); } diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java index e97c3cb..dc01e6b 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java @@ -386,6 +386,7 @@ private void sendLoggingRequest(AccessToken accessToken, IdentityToken idToken, ResponseListener resListener = new ResponseListener() { @Override public void onSuccess(Response response) { + logger.debug("logging request submitted OK"); } @Override public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { From 5be02683964703c417cb88e2194cadaac96f20c8 Mon Sep 17 00:00:00 2001 From: yigald Date: Wed, 14 Nov 2018 13:52:54 +0200 Subject: [PATCH 8/9] change var names --- .../appid/android/internal/tokenmanager/TokenManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java index dc01e6b..8199a7f 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java @@ -79,8 +79,8 @@ public class TokenManager { private final static String INVALID_GRANT = "invalid_grant"; private static final String OAUTH_ACTIVITY_LOGGING_PATH = "/activity_logging"; - private static final String ID_KEY = "id_token"; - private static final String ACTIVITY_KEY = "eventName"; + private static final String EVENT_NAME_KEY = "eventName"; + private static final String ID_TOKEN_KEY = "id_token"; private static final String LOGOUT_ACTIVITY = "logout"; protected enum TOKENS { @@ -370,8 +370,8 @@ private void sendLoggingRequest(AccessToken accessToken, IdentityToken idToken, RequestBody requestBody; try { JSONObject json = new JSONObject(); - json.put(ACTIVITY_KEY, activity); - json.put(ID_KEY, idToken.getRaw()); + json.put(EVENT_NAME_KEY, activity); + json.put(ID_TOKEN_KEY, idToken.getRaw()); requestBody = RequestBody.create(MediaType.parse("application/json"), json.toString()); } catch (JSONException err) { // shouldn't happen From 501d43c84f8148f46d12c31b89afc2bac35e30b0 Mon Sep 17 00:00:00 2001 From: yigald Date: Wed, 14 Nov 2018 14:02:07 +0200 Subject: [PATCH 9/9] change message severity --- .../cloud/appid/android/internal/tokenmanager/TokenManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java index 8199a7f..6045013 100644 --- a/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java +++ b/lib/src/main/java/com/ibm/cloud/appid/android/internal/tokenmanager/TokenManager.java @@ -390,7 +390,7 @@ public void onSuccess(Response response) { } @Override public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { - logger.debug("Failed to submit logging request"); + logger.error("Failed to submit logging request"); } }; request.send (resListener, requestBody, accessToken);