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..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 @@ -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(); 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..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 @@ -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 EVENT_NAME_KEY = "eventName"; + private static final String ID_TOKEN_KEY = "id_token"; + private static final String LOGOUT_ACTIVITY = "logout"; + protected enum TOKENS { ACCESS_TOKEN("access_token"), ID_TOKEN("id_token"), @@ -352,6 +360,46 @@ 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(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 + 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) { + logger.debug("logging request submitted OK"); + } + @Override + public void onFailure(Response response, Throwable t, JSONObject extendedInfo) { + logger.error("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; }