Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 965368c6 authored by Marvin W.'s avatar Marvin W. 🐿️
Browse files

Auth: Pass nonce for id token creation

parent d38da9b1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -38,5 +38,6 @@ public class AuthConstants {
    public static final String STATUS = "status";
    public static final String SCOPE_OAUTH2 = "oauth2:";
    public static final String SCOPE_EM_OP_PRO = "oauth2:email openid profile";
    public static final String GOOGLE_SIGN_IN_AUTHORIZATION_RESULT = "authorization_result";

}
+5 −0
Original line number Diff line number Diff line
@@ -23,11 +23,16 @@ message RequestOptions {
//    optional int32 field_4 = 4;
//    optional int32 field_5 = 5;
    optional int32 remote = 7;
    optional NonceWrapper nonceWrapper = 8;
    optional int32 version = 10;
    optional string sessionId = 11;
//    optional bool field_12 = 12;
}

message NonceWrapper {
    optional string nonce = 1;
}

message ConsentUrlResponse {
    optional int32 resultCode = 2;
    optional string consentUrl = 3;
+1 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ class AssistedSignInActivity : AppCompatActivity() {
        val intent = Intent(this, AuthSignInActivity::class.java).apply {
            `package` = Constants.GMS_PACKAGE_NAME
            putExtra("config", signInConfiguration)
            putExtra("nonce", signInIntentRequest?.nonce)
        }
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }
+1 −1
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ class AssistedSignInFragment : BottomSheetDialogFragment() {
            delay(3000)
            runCatching {
                val googleSignInAccount = withContext(Dispatchers.IO) {
                    performSignIn(requireContext(), clientPackageName, options, lastChooseAccount!!, true)
                    performSignIn(requireContext(), clientPackageName, options, lastChooseAccount!!, true, beginSignInRequest.googleIdTokenRequestOptions.nonce)
                }
                loginResult(googleSignInAccount)
            }.onFailure {
+14 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.getSystemService
import androidx.lifecycle.lifecycleScope
import com.google.android.gms.R
import com.google.android.gms.auth.api.identity.AuthorizationResult
import com.google.android.gms.auth.api.identity.SignInCredential
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInApi
@@ -53,6 +54,9 @@ class AuthSignInActivity : AppCompatActivity() {
            intent?.extras?.also { it.classLoader = SignInConfiguration::class.java.classLoader }?.getParcelable<SignInConfiguration>("config")
        }.getOrNull()

    private val idNonce: String?
        get() = runCatching { intent?.extras?.getString("nonce") }.getOrNull()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setResult(CommonStatusCodes.CANCELED)
@@ -175,7 +179,7 @@ class AuthSignInActivity : AppCompatActivity() {
    }

    private suspend fun signIn(account: Account) {
        val googleSignInAccount = performSignIn(this, config?.packageName!!, config?.options, account, true)
        val googleSignInAccount = performSignIn(this, config?.packageName!!, config?.options, account, true, idNonce)
        if (googleSignInAccount != null) {
            finishResult(CommonStatusCodes.SUCCESS, account = account, googleSignInAccount = googleSignInAccount)
        } else {
@@ -190,6 +194,15 @@ class AuthSignInActivity : AppCompatActivity() {
        data.putExtra(AuthConstants.GOOGLE_SIGN_IN_ACCOUNT, googleSignInAccount)
        val bundle = Bundle()
        if (googleSignInAccount != null) {
            val authorizationResult = AuthorizationResult(
                googleSignInAccount.serverAuthCode,
                googleSignInAccount.idToken,
                googleSignInAccount.idToken,
                googleSignInAccount.grantedScopes.map { it.scopeUri },
                googleSignInAccount,
                null
            )
            data.putExtra(AuthConstants.GOOGLE_SIGN_IN_AUTHORIZATION_RESULT, SafeParcelableSerializer.serializeToBytes(authorizationResult))
            val signInAccount = SignInAccount().apply {
                email = googleSignInAccount.email ?: account?.name
                this.googleSignInAccount = googleSignInAccount
Loading