diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt index dd7044d1dc..5a3e28eb8d 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/AuthSignInActivity.kt @@ -179,15 +179,15 @@ class AuthSignInActivity : AppCompatActivity() { } private suspend fun signIn(account: Account) { - val (_, googleSignInAccount) = performSignIn(this, config?.packageName!!, config?.options, account, true, idNonce) + val (accessToken, googleSignInAccount) = performSignIn(this, config?.packageName!!, config?.options, account, true, idNonce) if (googleSignInAccount != null) { - finishResult(CommonStatusCodes.SUCCESS, account = account, googleSignInAccount = googleSignInAccount) + finishResult(CommonStatusCodes.SUCCESS, account = account, googleSignInAccount = googleSignInAccount, accessToken = accessToken) } else { finishResult(CommonStatusCodes.INTERNAL_ERROR, "Sign in failed") } } - private fun finishResult(statusCode: Int, message: String? = null, account: Account? = null, googleSignInAccount: GoogleSignInAccount? = null) { + private fun finishResult(statusCode: Int, message: String? = null, account: Account? = null, googleSignInAccount: GoogleSignInAccount? = null, accessToken: String? = null) { val data = Intent() if (statusCode != CommonStatusCodes.SUCCESS) data.putExtra(AuthConstants.ERROR_CODE, statusCode) data.putExtra(AuthConstants.GOOGLE_SIGN_IN_STATUS, Status(statusCode, message)) @@ -196,7 +196,7 @@ class AuthSignInActivity : AppCompatActivity() { if (googleSignInAccount != null) { val authorizationResult = AuthorizationResult( googleSignInAccount.serverAuthCode, - googleSignInAccount.idToken, + accessToken, googleSignInAccount.idToken, googleSignInAccount.grantedScopes.map { it.scopeUri }, googleSignInAccount, diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt index 76de77e71f..f2d62ad334 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt @@ -109,7 +109,7 @@ suspend fun checkAccountAuthStatus(context: Context, packageName: String, scopeL suspend fun performSignIn(context: Context, packageName: String, options: GoogleSignInOptions?, account: Account, permitted: Boolean = false, idNonce: String? = null): Pair { val authManager = getOAuthManager(context, packageName, options, account) - val authResponse = withContext(Dispatchers.IO) { + var authResponse = withContext(Dispatchers.IO) { if (options?.includeUnacceptableScope == true || !permitted) { authManager.setTokenRequestOptions(consentRequestOptions) } @@ -120,9 +120,12 @@ suspend fun performSignIn(context: Context, packageName: String, options: Google if ("remote_consent" == authResponse.issueAdvice && authResponse.resolutionDataBase64 != null){ consentResult = performConsentView(context, packageName, account, authResponse.resolutionDataBase64) if (consentResult == null) return Pair(null, null) - } else { - if (authResponse.auth == null) return Pair(null, null) + authResponse = authManager.let { + it.putDynamicFiled(CONSENT_RESULT, consentResult) + withContext(Dispatchers.IO) { it.requestAuth(true) } + } } + if (authResponse.auth == null) return Pair(null, null) Log.d(TAG, "id token requested: ${options?.isIdTokenRequested == true}, serverClientId = ${options?.serverClientId}, permitted = ${authManager.isPermitted}") val idTokenResponse = getIdTokenManager(context, packageName, options, account)?.let { if (idNonce != null) {