Skip to content

Commit 44bcda8

Browse files
committed
DataConnectAuth.kt: add authUid to GetAuthTokenResult
This change extracts the `user_id` and `sub` claims from the Firebase Auth token and sends them to DataConnect as `authUids`. * DataConnectAuth.kt: * Update `getToken` to include `authUids` * Update `GetAuthTokenResult` to hold `authUids` * Add `getAuthUids()` to extract UIDs from token claims * arbs.kt: * Update `authTokenResult` to generate `authUids`
1 parent 7b86a97 commit 44bcda8

File tree

2 files changed

+25
-5
lines changed
  • firebase-dataconnect/src
    • main/kotlin/com/google/firebase/dataconnect/core
    • test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary

2 files changed

+25
-5
lines changed

firebase-dataconnect/src/main/kotlin/com/google/firebase/dataconnect/core/DataConnectAuth.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,31 @@ internal class DataConnectAuth(
7474
}
7575

7676
override suspend fun getToken(provider: InternalAuthProvider, forceRefresh: Boolean) =
77-
provider.getAccessToken(forceRefresh).await().let { GetAuthTokenResult(it.token) }
77+
provider.getAccessToken(forceRefresh).await().let {
78+
GetAuthTokenResult(it.token, it.getAuthUids())
79+
}
7880

79-
data class GetAuthTokenResult(override val token: String?) : GetTokenResult
81+
data class GetAuthTokenResult(override val token: String?, val authUids: Set<String>) :
82+
GetTokenResult
8083

8184
private class IdTokenListenerImpl(private val logger: Logger) : IdTokenListener {
8285
override fun onIdTokenChanged(tokenResult: InternalTokenResult) {
8386
logger.debug { "onIdTokenChanged(token=${tokenResult.token?.toScrubbedAccessToken()})" }
8487
}
8588
}
89+
90+
private companion object {
91+
92+
val authUidClaimNames = listOf("user_id", "sub")
93+
94+
fun com.google.firebase.auth.GetTokenResult.getAuthUids(): Set<String> = buildSet {
95+
authUidClaimNames.forEach { claimName ->
96+
claims[claimName]?.let { claimValue ->
97+
if (claimValue is String) {
98+
add(claimValue)
99+
}
100+
}
101+
}
102+
}
103+
}
86104
}

firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary/arbs.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import io.kotest.property.arbitrary.int
5151
import io.kotest.property.arbitrary.list
5252
import io.kotest.property.arbitrary.map
5353
import io.kotest.property.arbitrary.orNull
54+
import io.kotest.property.arbitrary.set
5455
import io.kotest.property.arbitrary.string
5556
import io.mockk.coEvery
5657
import io.mockk.mockk
@@ -333,9 +334,10 @@ internal inline fun <Data, reified Variables> DataConnectArb.operationRefConstru
333334
}
334335

335336
internal fun DataConnectArb.authTokenResult(
336-
accessToken: Arb<String> = accessToken()
337-
): Arb<GetAuthTokenResult> = accessToken.map { GetAuthTokenResult(it) }
337+
accessToken: Arb<String?> = accessToken().orNull(nullProbability = 0.33),
338+
authUids: Arb<Set<String>> = Arb.set(string(0..10, Codepoint.alphanumeric()), 0..10),
339+
): Arb<GetAuthTokenResult> = Arb.bind(accessToken, authUids, ::GetAuthTokenResult)
338340

339341
internal fun DataConnectArb.appCheckTokenResult(
340342
accessToken: Arb<String> = accessToken()
341-
): Arb<GetAppCheckTokenResult> = accessToken.map { GetAppCheckTokenResult(it) }
343+
): Arb<GetAppCheckTokenResult> = accessToken.map(::GetAppCheckTokenResult)

0 commit comments

Comments
 (0)