Skip to content

Commit

Permalink
Merge pull request #40 from bom-bakbang/add_flow_for_previously_used_…
Browse files Browse the repository at this point in the history
…accounts

Add flow for checking previously used accounts in Google Sign In
  • Loading branch information
mirzemehdi authored Oct 5, 2024
2 parents a94593a + d935973 commit d942b84
Showing 1 changed file with 39 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,47 @@ internal class GoogleAuthUiProviderImpl(
GoogleAuthUiProvider {
override suspend fun signIn(): GoogleUser? {
return try {
val credential = credentialManager.getCredential(
context = activityContext,
request = getCredentialRequest()
).credential
getGoogleUserFromCredential(credential)
} catch (e: GetCredentialException) {
println("GoogleAuthUiProvider error: ${e.message}")
val shouldCheckLegacyAuthServices = when (e) {
is GetCredentialProviderConfigurationException -> true
is NoCredentialException -> true
is GetCredentialUnsupportedException -> true
else -> false
getGoogleUserFromCredential(filterByAuthorizedAccounts = true)
} catch (e: NoCredentialException) {
try {
getGoogleUserFromCredential(filterByAuthorizedAccounts = false)
} catch (e: GetCredentialException) {
handleCredentialException(e)
} catch (e: NullPointerException) {
null
}
if (shouldCheckLegacyAuthServices) checkLegacyGoogleSignIn()
else null
} catch (e: GetCredentialException) {
handleCredentialException(e)
} catch (e: NullPointerException) {
null
}
}

private suspend fun handleCredentialException(e: GetCredentialException): GoogleUser? {
println("GoogleAuthUiProvider error: ${e.message}")
val shouldCheckLegacyAuthServices = when (e) {
is GetCredentialProviderConfigurationException -> true
is NoCredentialException -> true
is GetCredentialUnsupportedException -> true
else -> false
}
return if (shouldCheckLegacyAuthServices) {
checkLegacyGoogleSignIn()
} else {
null
}
}

private suspend fun checkLegacyGoogleSignIn(): GoogleUser? {
println("GoogleAuthUiProvider: Checking Outdated Google Sign In...")
return googleLegacyAuthentication.signIn()
}

private fun getGoogleUserFromCredential(credential: Credential): GoogleUser? {
private suspend fun getGoogleUserFromCredential(filterByAuthorizedAccounts: Boolean): GoogleUser? {
val credential = credentialManager.getCredential(
context = activityContext,
request = getCredentialRequest(filterByAuthorizedAccounts)
).credential
return when {
credential is CustomCredential && credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL -> {
try {
Expand All @@ -70,15 +85,20 @@ internal class GoogleAuthUiProviderImpl(
}
}

private fun getCredentialRequest(): GetCredentialRequest {
private fun getCredentialRequest(filterByAuthorizedAccounts: Boolean): GetCredentialRequest {
return GetCredentialRequest.Builder()
.addCredentialOption(getGoogleIdOption(serverClientId = credentials.serverId))
.addCredentialOption(
getGoogleIdOption(
serverClientId = credentials.serverId,
filterByAuthorizedAccounts = filterByAuthorizedAccounts
)
)
.build()
}

private fun getGoogleIdOption(serverClientId: String): GetGoogleIdOption {
private fun getGoogleIdOption(serverClientId: String, filterByAuthorizedAccounts: Boolean): GetGoogleIdOption {
return GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setFilterByAuthorizedAccounts(filterByAuthorizedAccounts)
.setAutoSelectEnabled(true)
.setServerClientId(serverClientId)
.build()
Expand Down

0 comments on commit d942b84

Please sign in to comment.