-
Notifications
You must be signed in to change notification settings - Fork 168
/
Copy pathuser.kt
79 lines (74 loc) · 3.84 KB
/
user.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
*/
package dev.gitlive.firebase.auth
import android.net.Uri
import com.google.firebase.auth.UserProfileChangeRequest
import kotlinx.coroutines.tasks.await
actual class FirebaseUser internal constructor(val android: com.google.firebase.auth.FirebaseUser) {
actual val uid: String
get() = android.uid
actual val displayName: String?
get() = android.displayName
actual val email: String?
get() = android.email
actual val phoneNumber: String?
get() = android.phoneNumber
actual val photoURL: String?
get() = android.photoUrl?.toString()
actual val isAnonymous: Boolean
get() = android.isAnonymous
actual val isEmailVerified: Boolean
get() = android.isEmailVerified
actual val metaData: UserMetaData?
get() = android.metadata?.let{ UserMetaData(it) }
actual val multiFactor: MultiFactor
get() = MultiFactor(android.multiFactor)
actual val providerData: List<UserInfo>
get() = android.providerData.map { UserInfo(it) }
actual val providerId: String
get() = android.providerId
actual suspend fun delete() = android.delete().await().run { Unit }
actual suspend fun reload() = android.reload().await().run { Unit }
actual suspend fun getIdToken(forceRefresh: Boolean) = android.getIdToken(forceRefresh).await().token
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult = AuthResult(android.linkWithCredential(credential.android).await())
actual suspend fun reauthenticate(credential: AuthCredential) = android.reauthenticate(credential.android).await().run { Unit }
actual suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult = AuthResult(android.reauthenticateAndRetrieveData(credential.android).await())
actual suspend fun sendEmailVerification(actionCodeSettings: ActionCodeSettings?) {
val request = actionCodeSettings?.let { android.sendEmailVerification(it.toAndroid()) } ?: android.sendEmailVerification()
request.await()
}
actual suspend fun unlink(provider: String): FirebaseUser? = android.unlink(provider).await().user?.let { FirebaseUser(it) }
actual suspend fun updateEmail(email: String) = android.updateEmail(email).await().run { Unit }
actual suspend fun updatePassword(password: String) = android.updatePassword(password).await().run { Unit }
actual suspend fun updatePhoneNumber(credential: PhoneAuthCredential) = android.updatePhoneNumber(credential.android).await().run { Unit }
actual suspend fun updateProfile(displayName: String?, photoUrl: String?) {
val request = UserProfileChangeRequest.Builder().apply {
this.displayName = displayName
photoUri = photoURL?.let { Uri.parse(it) }
}.build()
android.updateProfile(request).await()
}
actual suspend fun verifyBeforeUpdateEmail(newEmail: String, actionCodeSettings: ActionCodeSettings?) =
android.verifyBeforeUpdateEmail(newEmail, actionCodeSettings?.toAndroid()).await().run { Unit }
}
actual class UserInfo(val android: com.google.firebase.auth.UserInfo) {
actual val displayName: String?
get() = android.displayName
actual val email: String?
get() = android.email
actual val phoneNumber: String?
get() = android.phoneNumber
actual val photoURL: String?
get() = android.photoUrl?.toString()
actual val providerId: String
get() = android.providerId
actual val uid: String
get() = android.uid
}
actual class UserMetaData(val android: com.google.firebase.auth.FirebaseUserMetadata) {
actual val creationTime: Double?
get() = android.creationTimestamp.toDouble()
actual val lastSignInTime: Double?
get() = android.lastSignInTimestamp.toDouble()
}