Skip to content

Commit 40ba027

Browse files
suntrixnbransby
andauthored
added AuthTokenResult (#142)
* added AuthTokenResult * PR feedback Co-authored-by: Nicholas Bransby-Williams <[email protected]>
1 parent d43b11d commit 40ba027

File tree

9 files changed

+75
-1
lines changed

9 files changed

+75
-1
lines changed

firebase-auth/src/androidMain/kotlin/dev/gitlive/firebase/auth/auth.kt

+15
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,21 @@ actual class AuthResult internal constructor(val android: com.google.firebase.au
111111
get() = android.user?.let { FirebaseUser(it) }
112112
}
113113

114+
actual class AuthTokenResult(val android: com.google.firebase.auth.GetTokenResult) {
115+
// actual val authTimestamp: Long
116+
// get() = android.authTimestamp
117+
actual val claims: Map<String, Any>
118+
get() = android.claims
119+
// actual val expirationTimestamp: Long
120+
// get() = android.expirationTimestamp
121+
// actual val issuedAtTimestamp: Long
122+
// get() = android.issuedAtTimestamp
123+
actual val signInProvider: String?
124+
get() = android.signInProvider
125+
actual val token: String?
126+
get() = android.token
127+
}
128+
114129
internal fun ActionCodeSettings.toAndroid() = com.google.firebase.auth.ActionCodeSettings.newBuilder()
115130
.setUrl(url)
116131
.also { androidPackageName?.run { it.setAndroidPackageName(packageName, installIfNotAvailable, minimumVersion) } }

firebase-auth/src/androidMain/kotlin/dev/gitlive/firebase/auth/user.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ actual class FirebaseUser internal constructor(val android: com.google.firebase.
3333
get() = android.providerId
3434
actual suspend fun delete() = android.delete().await().run { Unit }
3535
actual suspend fun reload() = android.reload().await().run { Unit }
36-
actual suspend fun getIdToken(forceRefresh: Boolean) = android.getIdToken(forceRefresh).await().token
36+
actual suspend fun getIdToken(forceRefresh: Boolean): String? = android.getIdToken(forceRefresh).await().token
37+
actual suspend fun getIdTokenResult(forceRefresh: Boolean): AuthTokenResult = android.getIdToken(forceRefresh).await().run { AuthTokenResult(this) }
3738
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult = AuthResult(android.linkWithCredential(credential.android).await())
3839
actual suspend fun reauthenticate(credential: AuthCredential) = android.reauthenticate(credential.android).await().run { Unit }
3940
actual suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult = AuthResult(android.reauthenticateAndRetrieveData(credential.android).await())

firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/auth.kt

+9
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ expect class AuthResult {
4141
val user: FirebaseUser?
4242
}
4343

44+
expect class AuthTokenResult {
45+
// val authTimestamp: Long
46+
val claims: Map<String, Any>
47+
// val expirationTimestamp: Long
48+
// val issuedAtTimestamp: Long
49+
val signInProvider: String?
50+
val token: String?
51+
}
52+
4453
sealed class ActionCodeResult {
4554
object SignInWithEmailLink : ActionCodeResult()
4655
class PasswordReset internal constructor(val email: String) : ActionCodeResult()

firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/user.kt

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ expect class FirebaseUser {
1919
suspend fun delete()
2020
suspend fun reload()
2121
suspend fun getIdToken(forceRefresh: Boolean): String?
22+
suspend fun getIdTokenResult(forceRefresh: Boolean): AuthTokenResult
2223
suspend fun linkWithCredential(credential: AuthCredential): AuthResult
2324
suspend fun reauthenticate(credential: AuthCredential)
2425
suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult

firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/auth.kt

+15
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,21 @@ actual class AuthResult internal constructor(val ios: FIRAuthDataResult) {
9898
get() = FirebaseUser(ios.user)
9999
}
100100

101+
actual class AuthTokenResult(val ios: FIRAuthTokenResult) {
102+
// actual val authTimestamp: Long
103+
// get() = ios.authDate
104+
actual val claims: Map<String, Any>
105+
get() = ios.claims.map { it.key.toString() to it.value as Any }.toMap()
106+
// actual val expirationTimestamp: Long
107+
// get() = ios.expirationDate
108+
// actual val issuedAtTimestamp: Long
109+
// get() = ios.issuedAtDate
110+
actual val signInProvider: String?
111+
get() = ios.signInProvider
112+
actual val token: String?
113+
get() = ios.token
114+
}
115+
101116
internal fun ActionCodeSettings.toIos() = FIRActionCodeSettings().also {
102117
it.URL = NSURL.URLWithString(url)
103118
androidPackageName?.run { it.setAndroidPackageName(packageName, installIfNotAvailable, minimumVersion) }

firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/user.kt

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ actual class FirebaseUser internal constructor(val ios: FIRUser) {
3838
actual suspend fun getIdToken(forceRefresh: Boolean): String? =
3939
ios.awaitResult { getIDTokenForcingRefresh(forceRefresh, it) }
4040

41+
actual suspend fun getIdTokenResult(forceRefresh: Boolean): AuthTokenResult =
42+
AuthTokenResult(ios.awaitResult { getIDTokenResultForcingRefresh(forceRefresh, it) })
43+
4144
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult =
4245
AuthResult(ios.awaitResult { linkWithCredential(credential.ios, it) })
4346

firebase-auth/src/jsMain/kotlin/dev/gitlive/firebase/auth/auth.kt

+17
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,23 @@ actual class AuthResult internal constructor(val js: firebase.auth.AuthResult) {
101101
get() = rethrow { js.user?.let { FirebaseUser(it) } }
102102
}
103103

104+
actual class AuthTokenResult(val js: firebase.auth.IdTokenResult) {
105+
// actual val authTimestamp: Long
106+
// get() = js.authTime
107+
actual val claims: Map<String, Any>
108+
get() = (js("Object").keys(js.claims) as Array<String>).mapNotNull {
109+
key -> js.claims[key]?.let { key to it }
110+
}.toMap()
111+
// actual val expirationTimestamp: Long
112+
// get() = android.expirationTime
113+
// actual val issuedAtTimestamp: Long
114+
// get() = js.issuedAtTime
115+
actual val signInProvider: String?
116+
get() = js.signInProvider
117+
actual val token: String?
118+
get() = js.token
119+
}
120+
104121
internal fun ActionCodeSettings.toJson() = json(
105122
"android" to (androidPackageName?.run { json("installApp" to installIfNotAvailable, "minimumVersion" to minimumVersion, "packageName" to packageName) } ?: undefined),
106123
"dynamicLinkDomain" to (dynamicLinkDomain ?: undefined),

firebase-auth/src/jsMain/kotlin/dev/gitlive/firebase/auth/user.kt

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ actual class FirebaseUser internal constructor(val js: firebase.user.User) {
3030
actual suspend fun delete() = rethrow { js.delete().await() }
3131
actual suspend fun reload() = rethrow { js.reload().await() }
3232
actual suspend fun getIdToken(forceRefresh: Boolean): String? = rethrow { js.getIdToken(forceRefresh).await() }
33+
actual suspend fun getIdTokenResult(forceRefresh: Boolean): AuthTokenResult = rethrow { AuthTokenResult(js.getIdTokenResult(forceRefresh).await()) }
3334
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult = rethrow { AuthResult(js.linkWithCredential(credential.js).await()) }
3435
actual suspend fun reauthenticate(credential: AuthCredential) = rethrow {
3536
js.reauthenticateWithCredential(credential.js).await()

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt

+12
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,17 @@ external object firebase {
6868
fun onAuthStateChanged(nextOrObserver: (user.User?) -> Unit): () -> Unit
6969
fun onIdTokenChanged(nextOrObserver: (user.User?) -> Unit): () -> Unit
7070
}
71+
72+
abstract class IdTokenResult {
73+
val authTime: String
74+
val claims: Json
75+
val expirationTime: String
76+
val issuedAtTime: String
77+
val signInProvider: String?
78+
val signInSecondFactor: String?
79+
val token: String
80+
}
81+
7182
abstract class AuthResult {
7283
val credential: AuthCredential?
7384
val operationType: String?
@@ -187,6 +198,7 @@ external object firebase {
187198

188199
fun delete(): Promise<Unit>
189200
fun getIdToken(forceRefresh: Boolean?): Promise<String>
201+
fun getIdTokenResult(forceRefresh: Boolean?): Promise<auth.IdTokenResult>
190202
fun linkWithCredential(credential: auth.AuthCredential): Promise<auth.AuthResult>
191203
fun reauthenticateWithCredential(credential: auth.AuthCredential): Promise<auth.AuthResult>
192204
fun reload(): Promise<Unit>

0 commit comments

Comments
 (0)