Skip to content

Commit e224920

Browse files
committed
rename all credentialWithX functions to just credential
use single credential function in OAuthProvider with optional params
1 parent 45ae540 commit e224920

File tree

11 files changed

+95
-97
lines changed

11 files changed

+95
-97
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ actual class AuthResult internal constructor(val android: com.google.firebase.au
101101
get() = android.user?.let { FirebaseUser(it) }
102102
}
103103

104-
private fun ActionCodeSettings.toAndroid() = com.google.firebase.auth.ActionCodeSettings.newBuilder()
104+
internal fun ActionCodeSettings.toAndroid() = com.google.firebase.auth.ActionCodeSettings.newBuilder()
105105
.setUrl(url)
106106
.also { androidPackageName?.run { it.setAndroidPackageName(packageName, installIfNotAvailable, minimumVersion) } }
107107
.also { dynamicLinkDomain?.run { it.setDynamicLinkDomain(this) } }

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

+14-29
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package dev.gitlive.firebase.auth
66

77
import android.app.Activity
88
import com.google.firebase.FirebaseException
9+
import com.google.firebase.auth.OAuthProvider
910
import com.google.firebase.auth.PhoneAuthProvider
1011
import kotlinx.coroutines.CompletableDeferred
1112
import kotlinx.coroutines.coroutineScope
@@ -23,48 +24,34 @@ actual class PhoneAuthCredential(override val android: com.google.firebase.auth.
2324
actual class OAuthCredential(override val android: com.google.firebase.auth.OAuthCredential) : AuthCredential(android)
2425

2526
actual object EmailAuthProvider {
26-
actual fun credentialWithEmail(
27+
actual fun credential(
2728
email: String,
2829
password: String
2930
): AuthCredential = AuthCredential(com.google.firebase.auth.EmailAuthProvider.getCredential(email, password))
3031
}
3132

3233
actual object FacebookAuthProvider {
33-
actual fun credentialWithAccessToken(accessToken: String): AuthCredential = AuthCredential(com.google.firebase.auth.FacebookAuthProvider.getCredential(accessToken))
34+
actual fun credential(accessToken: String): AuthCredential = AuthCredential(com.google.firebase.auth.FacebookAuthProvider.getCredential(accessToken))
3435
}
3536

3637
actual object GithubAuthProvider {
37-
actual fun credentialWithToken(token: String): AuthCredential = AuthCredential(com.google.firebase.auth.GithubAuthProvider.getCredential(token))
38+
actual fun credential(token: String): AuthCredential = AuthCredential(com.google.firebase.auth.GithubAuthProvider.getCredential(token))
3839
}
3940

4041
actual object GoogleAuthProvider {
41-
actual fun credentialWithIDAndAccessToken(idToken: String, accessToken: String): AuthCredential = AuthCredential(com.google.firebase.auth.GoogleAuthProvider.getCredential(idToken, accessToken))
42+
actual fun credential(idToken: String, accessToken: String): AuthCredential = AuthCredential(com.google.firebase.auth.GoogleAuthProvider.getCredential(idToken, accessToken))
4243
}
4344

4445
actual class OAuthProvider(val android: com.google.firebase.auth.OAuthProvider.Builder, private val auth: FirebaseAuth) {
4546
actual constructor(provider: String, auth: FirebaseAuth) : this(com.google.firebase.auth.OAuthProvider.newBuilder(provider, auth.android), auth)
4647

4748
actual companion object {
48-
actual fun credentialsWithAccessToken(providerId: String, accessToken: String): AuthCredential = createCredentials(providerId) {
49-
this.accessToken = accessToken
50-
}
51-
actual fun credentialsWithIDAndAccessToken(providerId: String, idToken: String, accessToken: String): AuthCredential = createCredentials(providerId) {
52-
setIdToken(idToken)
53-
this.accessToken = accessToken
54-
}
55-
actual fun credentialsWithIDRawNonceAndAccessToken(providerId: String, idToken: String, rawNonce: String, accessToken: String): AuthCredential = createCredentials(providerId) {
56-
setIdTokenWithRawNonce(idToken, rawNonce)
57-
this.accessToken = accessToken
58-
}
59-
actual fun credentialsWithIDAndRawNonce(providerId: String, idToken: String, rawNonce: String): AuthCredential = createCredentials(providerId) {
60-
setIdTokenWithRawNonce(idToken, rawNonce)
61-
}
62-
63-
private fun createCredentials(providerId: String, block: com.google.firebase.auth.OAuthProvider.CredentialBuilder.() -> Unit): AuthCredential {
64-
val credential = com.google.firebase.auth.OAuthProvider.newCredentialBuilder(providerId).apply {
65-
block()
66-
}.build()
67-
return (credential as? com.google.firebase.auth.OAuthCredential)?.let { OAuthCredential(it) } ?: AuthCredential(credential)
49+
actual fun credential(providerId: String, accessToken: String?, idToken: String?, rawNonce: String?): OAuthCredential {
50+
val builder = OAuthProvider.newCredentialBuilder(providerId)
51+
accessToken?.let { builder.accessToken = it }
52+
idToken?.let { builder.idToken = it }
53+
rawNonce?.let { builder.setIdTokenWithRawNonce(idToken!!, it) }
54+
return OAuthCredential(builder.build() as com.google.firebase.auth.OAuthCredential)
6855
}
6956
}
7057

@@ -87,7 +74,7 @@ actual class PhoneAuthProvider(val android: com.google.firebase.auth.PhoneAuthPr
8774

8875
actual constructor(auth: FirebaseAuth) : this(com.google.firebase.auth.PhoneAuthProvider.getInstance(auth.android))
8976

90-
actual fun credentialWithVerificationIdAndSmsCode(verificationId: String, smsCode: String): PhoneAuthCredential = PhoneAuthCredential(com.google.firebase.auth.PhoneAuthProvider.getCredential(verificationId, smsCode))
77+
actual fun credential(verificationId: String, smsCode: String): PhoneAuthCredential = PhoneAuthCredential(com.google.firebase.auth.PhoneAuthProvider.getCredential(verificationId, smsCode))
9178
actual suspend fun verifyPhoneNumber(phoneNumber: String, verificationProvider: PhoneVerificationProvider): AuthCredential = coroutineScope {
9279
val response = CompletableDeferred<Result<AuthCredential>>()
9380
val callback = object :
@@ -101,9 +88,7 @@ actual class PhoneAuthProvider(val android: com.google.firebase.auth.PhoneAuthPr
10188
launch {
10289
val code = verificationProvider.getVerificationCode()
10390
try {
104-
val credentials =
105-
credentialWithVerificationIdAndSmsCode(verificationId, code)
106-
response.complete(Result.success(credentials))
91+
response.complete(Result.success(credential(verificationId, code)))
10792
} catch (e: Exception) {
10893
response.complete(Result.failure(e))
10994
}
@@ -134,5 +119,5 @@ actual interface PhoneVerificationProvider {
134119
}
135120

136121
actual object TwitterAuthProvider {
137-
actual fun credentialWithTokenAndSecret(token: String, secret: String): AuthCredential = AuthCredential(com.google.firebase.auth.TwitterAuthProvider.getCredential(token, secret))
122+
actual fun credential(token: String, secret: String): AuthCredential = AuthCredential(com.google.firebase.auth.TwitterAuthProvider.getCredential(token, secret))
138123
}

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ actual class FirebaseUser internal constructor(val android: com.google.firebase.
3838
actual suspend fun reauthenticate(credential: AuthCredential) = android.reauthenticate(credential.android).await().run { Unit }
3939
actual suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult = AuthResult(android.reauthenticateAndRetrieveData(credential.android).await())
4040
actual suspend fun sendEmailVerification(actionCodeSettings: ActionCodeSettings?) {
41-
val request = actionCodeSettings?.android?.let { android.sendEmailVerification(it) } ?: android.sendEmailVerification()
42-
request.await().run { Unit }
41+
val request = actionCodeSettings?.let { android.sendEmailVerification(it.toAndroid()) } ?: android.sendEmailVerification()
42+
request.await()
4343
}
4444
actual suspend fun unlink(provider: String): FirebaseUser? = android.unlink(provider).await().user?.let { FirebaseUser(it) }
4545
actual suspend fun updateEmail(email: String) = android.updateEmail(email).await().run { Unit }
@@ -52,7 +52,8 @@ actual class FirebaseUser internal constructor(val android: com.google.firebase.
5252
}.build()
5353
android.updateProfile(request).await()
5454
}
55-
actual suspend fun verifyBeforeUpdateEmail(newEmail: String, actionCodeSettings: ActionCodeSettings?) = android.verifyBeforeUpdateEmail(newEmail, actionCodeSettings?.android).await().run { Unit }
55+
actual suspend fun verifyBeforeUpdateEmail(newEmail: String, actionCodeSettings: ActionCodeSettings?) =
56+
android.verifyBeforeUpdateEmail(newEmail, actionCodeSettings?.toAndroid()).await().run { Unit }
5657
}
5758

5859
actual class UserInfo(val android: com.google.firebase.auth.UserInfo) {

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

+7-11
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,24 @@ expect class PhoneAuthCredential : AuthCredential
1414
expect class OAuthCredential : AuthCredential
1515

1616
expect object EmailAuthProvider {
17-
fun credentialWithEmail(email: String, password: String): AuthCredential
17+
fun credential(email: String, password: String): AuthCredential
1818
}
1919

2020
expect object FacebookAuthProvider {
21-
fun credentialWithAccessToken(accessToken: String): AuthCredential
21+
fun credential(accessToken: String): AuthCredential
2222
}
2323

2424
expect object GithubAuthProvider {
25-
fun credentialWithToken(token: String): AuthCredential
25+
fun credential(token: String): AuthCredential
2626
}
2727

2828
expect object GoogleAuthProvider {
29-
fun credentialWithIDAndAccessToken(idToken: String, accessToken: String): AuthCredential
29+
fun credential(idToken: String, accessToken: String): AuthCredential
3030
}
3131

3232
expect class OAuthProvider constructor(provider: String, auth: FirebaseAuth = Firebase.auth) {
3333
companion object {
34-
fun credentialsWithAccessToken(providerId: String, accessToken: String): AuthCredential
35-
fun credentialsWithIDAndAccessToken(providerId: String, idToken: String, accessToken: String): AuthCredential
36-
fun credentialsWithIDRawNonceAndAccessToken(providerId: String, idToken: String, rawNonce: String, accessToken: String): AuthCredential
37-
fun credentialsWithIDAndRawNonce(providerId: String, idToken: String, rawNonce: String): AuthCredential
34+
fun credential(providerId: String, accessToken: String? = null, idToken: String? = null, rawNonce: String? = null): OAuthCredential
3835
}
3936

4037
fun addScope(vararg scope: String)
@@ -46,13 +43,12 @@ expect class OAuthProvider constructor(provider: String, auth: FirebaseAuth = Fi
4643
expect class SignInProvider
4744

4845
expect class PhoneAuthProvider constructor(auth: FirebaseAuth = Firebase.auth) {
49-
fun credentialWithVerificationIdAndSmsCode(verificationId: String, smsCode: String): PhoneAuthCredential
46+
fun credential(verificationId: String, smsCode: String): PhoneAuthCredential
5047
suspend fun verifyPhoneNumber(phoneNumber: String, verificationProvider: PhoneVerificationProvider): AuthCredential
51-
5248
}
5349

5450
expect interface PhoneVerificationProvider
5551

5652
expect object TwitterAuthProvider {
57-
fun credentialWithTokenAndSecret(token: String, secret: String): AuthCredential
53+
fun credential(token: String, secret: String): AuthCredential
5854
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ actual class AuthResult internal constructor(val ios: FIRAuthDataResult) {
9393
get() = FirebaseUser(ios.user)
9494
}
9595

96-
private fun ActionCodeSettings.toIos() = FIRActionCodeSettings().let {
96+
internal fun ActionCodeSettings.toIos() = FIRActionCodeSettings().let {
9797
it.URL = NSURL.URLWithString(url)
9898
androidPackageName?.run { it.setAndroidPackageName(androidPackageName, installIfNotAvailable, minimumVersion) }
9999
it.dynamicLinkDomain = dynamicLinkDomain

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

+17-11
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,45 @@ actual class PhoneAuthCredential(override val ios: FIRPhoneAuthCredential) : Aut
1515
actual class OAuthCredential(override val ios: FIROAuthCredential) : AuthCredential(ios)
1616

1717
actual object EmailAuthProvider {
18-
actual fun credentialWithEmail(
18+
actual fun credential(
1919
email: String,
2020
password: String
2121
): AuthCredential =
2222
AuthCredential(FIREmailAuthProvider.credentialWithEmail(email = email, password = password))
2323
}
2424

2525
actual object FacebookAuthProvider {
26-
actual fun credentialWithAccessToken(accessToken: String): AuthCredential = AuthCredential(FIRFacebookAuthProvider.credentialWithAccessToken(accessToken))
26+
actual fun credential(accessToken: String): AuthCredential = AuthCredential(FIRFacebookAuthProvider.credentialWithAccessToken(accessToken))
2727
}
2828

2929
actual object GithubAuthProvider {
30-
actual fun credentialWithToken(token: String): AuthCredential = AuthCredential(FIRGitHubAuthProvider.credentialWithToken(token))
30+
actual fun credential(token: String): AuthCredential = AuthCredential(FIRGitHubAuthProvider.credentialWithToken(token))
3131
}
3232

3333
actual object GoogleAuthProvider {
34-
actual fun credentialWithIDAndAccessToken(idToken: String, accessToken: String): AuthCredential = AuthCredential(FIRGoogleAuthProvider.credentialWithIDToken(idToken, accessToken))
34+
actual fun credential(idToken: String, accessToken: String): AuthCredential = AuthCredential(FIRGoogleAuthProvider.credentialWithIDToken(idToken, accessToken))
3535
}
3636

3737
actual class OAuthProvider(val ios: FIROAuthProvider, private val auth: FirebaseAuth) {
3838
actual constructor(provider: String, auth: FirebaseAuth) : this(FIROAuthProvider.providerWithProviderID(provider, auth.ios), auth)
3939

4040
actual companion object {
41-
actual fun credentialsWithAccessToken(providerId: String, accessToken: String): AuthCredential = AuthCredential(FIROAuthProvider.credentialWithProviderID(providerId, accessToken))
42-
actual fun credentialsWithIDAndAccessToken(providerId: String, idToken: String, accessToken: String): AuthCredential = AuthCredential(FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, accessToken = accessToken))
43-
actual fun credentialsWithIDRawNonceAndAccessToken(providerId: String, idToken: String, rawNonce: String, accessToken: String): AuthCredential = AuthCredential(FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, rawNonce = rawNonce, accessToken = accessToken))
44-
actual fun credentialsWithIDAndRawNonce(providerId: String, idToken: String, rawNonce: String): AuthCredential = AuthCredential(FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, rawNonce = rawNonce))
41+
actual fun credential(providerId: String, accessToken: String?, idToken: String?, rawNonce: String?): OAuthCredential {
42+
val credential = when {
43+
idToken == null -> FIROAuthProvider.credentialWithProviderID(providerId = providerId, accessToken = accessToken!!)
44+
accessToken == null -> FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, rawNonce = rawNonce!!)
45+
rawNonce == null -> FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, accessToken = accessToken)
46+
else -> FIROAuthProvider.credentialWithProviderID(providerID = providerId, IDToken = idToken, rawNonce = rawNonce, accessToken = accessToken)
47+
}
48+
return OAuthCredential(credential as FIROAuthCredential)
49+
}
4550
}
4651

4752
actual fun addScope(vararg scope: String) {
4853
val scopes = ios.scopes?.mapNotNull { it as? String } ?: emptyList()
4954
ios.setScopes(scopes + scope.asList())
5055
}
56+
5157
actual fun setCustomParameters(parameters: Map<String, String>) {
5258
ios.setCustomParameters(emptyMap<Any?, Any?>() + parameters)
5359
}
@@ -72,11 +78,11 @@ actual class PhoneAuthProvider(val ios: FIRPhoneAuthProvider) {
7278

7379
actual constructor(auth: FirebaseAuth) : this(FIRPhoneAuthProvider.providerWithAuth(auth.ios))
7480

75-
actual fun credentialWithVerificationIdAndSmsCode(verificationId: String, smsCode: String): PhoneAuthCredential = PhoneAuthCredential(ios.credentialWithVerificationID(verificationId, smsCode))
81+
actual fun credential(verificationId: String, smsCode: String): PhoneAuthCredential = PhoneAuthCredential(ios.credentialWithVerificationID(verificationId, smsCode))
7682
actual suspend fun verifyPhoneNumber(phoneNumber: String, verificationProvider: PhoneVerificationProvider): AuthCredential {
7783
val verificationId: String = ios.awaitExpectedResult { ios.verifyPhoneNumber(phoneNumber, verificationProvider.delegate, it) }
7884
val verificationCode = verificationProvider.getVerificationCode()
79-
return credentialWithVerificationIdAndSmsCode(verificationId, verificationCode)
85+
return credential(verificationId, verificationCode)
8086
}
8187
}
8288

@@ -86,5 +92,5 @@ actual interface PhoneVerificationProvider {
8692
}
8793

8894
actual object TwitterAuthProvider {
89-
actual fun credentialWithTokenAndSecret(token: String, secret: String): AuthCredential = AuthCredential(FIRTwitterAuthProvider.credentialWithToken(token, secret))
95+
actual fun credential(token: String, secret: String): AuthCredential = AuthCredential(FIRTwitterAuthProvider.credentialWithToken(token, secret))
9096
}

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

+17-7
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,28 @@ actual class FirebaseUser internal constructor(val ios: FIRUser) {
3030
get() = ios.providerData.mapNotNull { provider -> (provider as? FIRUserInfoProtocol)?.let { UserInfo(it) } }
3131
actual val providerId: String
3232
get() = ios.providerID
33+
3334
actual suspend fun delete() = ios.await { deleteWithCompletion(it) }.run { Unit }
35+
3436
actual suspend fun reload() = ios.await { reloadWithCompletion(it) }.run { Unit }
35-
actual suspend fun getIdToken(forceRefresh: Boolean): String? = ios.awaitResult { getIDTokenForcingRefresh(forceRefresh, it) }
36-
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult = AuthResult(ios.awaitExpectedResult { linkWithCredential(credential.ios, it) })
37-
actual suspend fun reauthenticate(credential: AuthCredential) {
38-
val result: FIRAuthDataResult = ios.awaitExpectedResult { reauthenticateWithCredential(credential.ios, it) }
39-
}
40-
actual suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult = AuthResult(ios.awaitExpectedResult { reauthenticateWithCredential(credential.ios, it) })
37+
38+
actual suspend fun getIdToken(forceRefresh: Boolean): String? =
39+
ios.awaitResult { getIDTokenForcingRefresh(forceRefresh, it) }
40+
41+
actual suspend fun linkWithCredential(credential: AuthCredential): AuthResult =
42+
AuthResult(ios.awaitExpectedResult { linkWithCredential(credential.ios, it) })
43+
44+
actual suspend fun reauthenticate(credential: AuthCredential) =
45+
ios.awaitExpectedResult { reauthenticateWithCredential(credential.ios, it) }.run { Unit }
46+
47+
actual suspend fun reauthenticateAndRetrieveData(credential: AuthCredential): AuthResult =
48+
AuthResult(ios.awaitExpectedResult { reauthenticateAndRetrieveDataWithCredential(credential.ios, it) })
4149

4250
actual suspend fun sendEmailVerification(actionCodeSettings: ActionCodeSettings?) = ios.await {
43-
actionCodeSettings?.let { actionSettings -> sendEmailVerificationWithActionCodeSettings(actionSettings.ios, it) } ?: sendEmailVerificationWithCompletion(it)
51+
actionCodeSettings?.let { settings -> sendEmailVerificationWithActionCodeSettings(settings.toIos(), it) }
52+
?: sendEmailVerificationWithCompletion(it)
4453
}.run { Unit }
54+
4555
actual suspend fun unlink(provider: String): FirebaseUser? {
4656
val user: FIRUser? = ios.awaitResult { unlinkFromProvider(provider, it) }
4757
return user?.let {

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
package dev.gitlive.firebase.auth
66

7+
import dev.gitlive.firebase.*
8+
import kotlinx.coroutines.await
79
import kotlinx.coroutines.channels.awaitClose
810
import kotlinx.coroutines.flow.callbackFlow
911
import kotlin.js.json
@@ -97,7 +99,7 @@ actual class AuthResult internal constructor(val js: firebase.auth.AuthResult) {
9799
get() = rethrow { js.user?.let { FirebaseUser(it) } }
98100
}
99101

100-
private fun ActionCodeSettings.toJson() = json(
102+
internal fun ActionCodeSettings.toJson() = json(
101103
"android" to (androidPackageName?.run { json("installApp" to installIfNotAvailable, "minimumVersion" to minimumVersion, "packageName" to packageName) } ?: undefined),
102104
"dynamicLinkDomain" to (dynamicLinkDomain ?: undefined),
103105
"handleCodeInApp" to canHandleCodeInApp,

0 commit comments

Comments
 (0)