Add IdToken

pull/1227/head
Alex Baker 5 years ago
parent db71150969
commit e67785f3e8

@ -0,0 +1,15 @@
package org.tasks.auth
import android.util.Base64
import org.json.JSONObject
class IdToken(idToken: String) {
private val parts: List<String> = 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")
}

@ -2,7 +2,6 @@ package org.tasks.auth
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.util.Base64
import androidx.hilt.lifecycle.ViewModelInject import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.todoroo.astrid.helper.UUIDHelper 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.AuthorizationException
import net.openid.appauth.AuthorizationResponse import net.openid.appauth.AuthorizationResponse
import net.openid.appauth.ClientAuthentication.UnsupportedAuthenticationMethod import net.openid.appauth.ClientAuthentication.UnsupportedAuthenticationMethod
import org.json.JSONObject
import org.tasks.R import org.tasks.R
import org.tasks.caldav.CaldavClientProvider import org.tasks.caldav.CaldavClientProvider
import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount
@ -40,19 +38,16 @@ class SignInViewModel @ViewModelInject constructor(
if (!auth.isAuthorized) { if (!auth.isAuthorized) {
return null return null
} }
val idToken = auth.idToken val tokenString = auth.idToken ?: return null
val parts: List<String> = idToken!!.split(".") val idToken = IdToken(tokenString)
val payloadJson = JSONObject(String(Base64.decode(parts[1], Base64.DEFAULT))) val username = "google_${idToken.sub}"
val sub = payloadJson.getString("sub")
val username = "google_$sub"
val email = payloadJson.getString("email")
val homeSet = provider val homeSet = provider
.forUrl( .forUrl(
"${context.getString(R.string.tasks_caldav_url)}/google_login", "${context.getString(R.string.tasks_caldav_url)}/google_login",
token = idToken token = tokenString
) )
.setForeground() .setForeground()
.homeSet(token = idToken) .homeSet(token = tokenString)
return caldavDao.getAccount(CaldavAccount.TYPE_TASKS, username) return caldavDao.getAccount(CaldavAccount.TYPE_TASKS, username)
?.apply { ?.apply {
error = null error = null
@ -63,7 +58,7 @@ class SignInViewModel @ViewModelInject constructor(
uuid = UUIDHelper.newUUID() uuid = UUIDHelper.newUUID()
url = homeSet url = homeSet
this.username = username this.username = username
name = email name = idToken.email
caldavDao.insert(this) caldavDao.insert(this)
} }
} }

Loading…
Cancel
Save