11package com.getcode.network.repository
22
3+ import com.codeinc.gen.common.v1.Model.DeviceToken
34import com.codeinc.gen.phone.v1.PhoneVerificationService
45import com.getcode.db.Database
56import com.getcode.db.InMemoryDao
@@ -8,13 +9,30 @@ import com.getcode.model.PrefsBool
89import com.getcode.model.PrefsString
910import com.getcode.network.core.NetworkOracle
1011import com.getcode.network.api.PhoneApi
12+ import com.getcode.network.appcheck.AppCheck
13+ import com.getcode.network.appcheck.toDeviceToken
14+ import com.google.firebase.Firebase
15+ import com.google.firebase.appcheck.AppCheckToken
16+ import com.google.firebase.appcheck.appCheck
17+ import io.reactivex.rxjava3.core.BackpressureStrategy
1118import io.reactivex.rxjava3.core.Flowable
1219import io.reactivex.rxjava3.core.Single
1320import kotlinx.coroutines.flow.MutableStateFlow
1421import java.io.ByteArrayOutputStream
1522import javax.inject.Inject
1623import javax.inject.Singleton
1724
25+
26+ fun appCheckToken (
27+ backpressureStrategy : BackpressureStrategy = BackpressureStrategy .BUFFER
28+ ): Flowable <AppCheckToken > {
29+ return Flowable .create({ emitter ->
30+ Firebase .appCheck.limitedUseAppCheckToken
31+ .addOnSuccessListener { emitter.onNext(it) }
32+ .addOnFailureListener { emitter.onError(it) }
33+ }, backpressureStrategy)
34+ }
35+
1836@Singleton
1937class PhoneRepository @Inject constructor(
2038 private val phoneApi : PhoneApi ,
@@ -37,14 +55,18 @@ class PhoneRepository @Inject constructor(
3755 if (isMock()) return Single .just(PhoneVerificationService .SendVerificationCodeResponse .Result .OK )
3856 .toFlowable()
3957
40- val request =
41- PhoneVerificationService .SendVerificationCodeRequest .newBuilder()
42- .setPhoneNumber(phoneValue.toPhoneNumber())
43- .build()
58+ return AppCheck .limitedUseTokenFlowable()
59+ .flatMap { tokenResult ->
60+ val request =
61+ PhoneVerificationService .SendVerificationCodeRequest .newBuilder()
62+ .setPhoneNumber(phoneValue.toPhoneNumber())
63+ .setDeviceToken(tokenResult.toDeviceToken())
64+ .build()
4465
45- return phoneApi.sendVerificationCode(request)
46- .map { it.result }
47- .let { networkOracle.managedRequest(it) }
66+ phoneApi.sendVerificationCode(request)
67+ .map { it.result }
68+ .let { networkOracle.managedRequest(it) }
69+ }
4870 }
4971
5072 fun checkVerificationCode (
@@ -68,7 +90,7 @@ class PhoneRepository @Inject constructor(
6890 ): Flowable <GetAssociatedPhoneNumberResponse > {
6991 if (isMock()) {
7092 return Flowable .just(
71- GetAssociatedPhoneNumberResponse (true , true , false ," +12223334455" )
93+ GetAssociatedPhoneNumberResponse (true , true , false , " +12223334455" )
7294 )
7395 }
7496
0 commit comments