From e67785f3e84c17a6995fb35a6463f49e2535d268 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 18 Nov 2020 09:22:28 -0600 Subject: [PATCH] Add IdToken --- app/src/main/java/org/tasks/auth/IdToken.kt | 15 +++++++++++++++ .../main/java/org/tasks/auth/SignInViewModel.kt | 17 ++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/org/tasks/auth/IdToken.kt diff --git a/app/src/main/java/org/tasks/auth/IdToken.kt b/app/src/main/java/org/tasks/auth/IdToken.kt new file mode 100644 index 000000000..26f7b85c9 --- /dev/null +++ b/app/src/main/java/org/tasks/auth/IdToken.kt @@ -0,0 +1,15 @@ +package org.tasks.auth + +import android.util.Base64 +import org.json.JSONObject + +class IdToken(idToken: String) { + private val parts: List = idToken.split(".") + val json = JSONObject(String(Base64.decode(parts[1], Base64.DEFAULT))) + + val email: String + get() = json.getString("email") + + val sub: String + get() = json.getString("sub") +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/auth/SignInViewModel.kt b/app/src/main/java/org/tasks/auth/SignInViewModel.kt index ff5ccb42c..80fc73644 100644 --- a/app/src/main/java/org/tasks/auth/SignInViewModel.kt +++ b/app/src/main/java/org/tasks/auth/SignInViewModel.kt @@ -2,7 +2,6 @@ package org.tasks.auth import android.content.Context import android.content.Intent -import android.util.Base64 import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.ViewModel import com.todoroo.astrid.helper.UUIDHelper @@ -10,7 +9,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext import net.openid.appauth.AuthorizationException import net.openid.appauth.AuthorizationResponse import net.openid.appauth.ClientAuthentication.UnsupportedAuthenticationMethod -import org.json.JSONObject import org.tasks.R import org.tasks.caldav.CaldavClientProvider import org.tasks.data.CaldavAccount @@ -40,19 +38,16 @@ class SignInViewModel @ViewModelInject constructor( if (!auth.isAuthorized) { return null } - val idToken = auth.idToken - val parts: List = idToken!!.split(".") - val payloadJson = JSONObject(String(Base64.decode(parts[1], Base64.DEFAULT))) - val sub = payloadJson.getString("sub") - val username = "google_$sub" - val email = payloadJson.getString("email") + val tokenString = auth.idToken ?: return null + val idToken = IdToken(tokenString) + val username = "google_${idToken.sub}" val homeSet = provider .forUrl( "${context.getString(R.string.tasks_caldav_url)}/google_login", - token = idToken + token = tokenString ) .setForeground() - .homeSet(token = idToken) + .homeSet(token = tokenString) return caldavDao.getAccount(CaldavAccount.TYPE_TASKS, username) ?.apply { error = null @@ -63,7 +58,7 @@ class SignInViewModel @ViewModelInject constructor( uuid = UUIDHelper.newUUID() url = homeSet this.username = username - name = email + name = idToken.email caldavDao.insert(this) } }