diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/Interceptors.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/Interceptors.kt deleted file mode 100644 index 17b348b924..0000000000 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/Interceptors.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.tangem.datasource.api.common - -import okhttp3.Interceptor -import okhttp3.Response - -/** -[REDACTED_AUTHOR] - */ -open class AddHeaderInterceptor( - private val headers: Map, -) : Interceptor { - - override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request().newBuilder().apply { - headers.forEach { - addHeader(it.key, it.value) - } - }.build() - - return chain.proceed(request) - } -} - -class CacheControlHttpInterceptor(maxAgeSeconds: Int) : AddHeaderInterceptor( - mapOf("Cache-Control" to "max-age=$maxAgeSeconds"), -) - -class CardPublicKeyHttpInterceptor(cardPublicKeyHex: String) : AddHeaderInterceptor( - mapOf("card_public_key" to cardPublicKeyHex), -) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt index e55103871c..c38d6f6f22 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt @@ -1,39 +1,42 @@ package com.tangem.datasource.api.tangemTech -import com.tangem.datasource.api.common.AddHeaderInterceptor -import com.tangem.datasource.api.common.CacheControlHttpInterceptor -import com.tangem.datasource.api.common.createRetrofitInstance +import com.tangem.datasource.api.common.MoshiConverter +import com.tangem.datasource.utils.RequestHeader +import com.tangem.datasource.utils.RequestHeader.AuthenticationHeader +import com.tangem.datasource.utils.RequestHeader.CacheControlHeader +import com.tangem.datasource.utils.addHeaders +import com.tangem.datasource.utils.allowLogging +import okhttp3.OkHttpClient +import retrofit2.Retrofit /** [REDACTED_AUTHOR] */ -class TangemTechService( - private val logIsEnabled: Boolean = false, -) { - - private val headerInterceptors = mutableListOf( - CacheControlHttpInterceptor(cacheMaxAge), - ) +//TODO("Remove after removing Redux") +@Deprecated("Use TangemTechApi") +object TangemTechService { var api: TangemTechApi = createApi() + private set - fun addHeaderInterceptors(interceptors: List) { - headerInterceptors.removeAll(interceptors) - headerInterceptors.addAll(interceptors) - api = createApi() + private const val TANGEM_TECH_BASE_URL = "https://api.tangem-tech.com/v1/" + + fun addAuthenticationHeader(header: AuthenticationHeader) { + api = createApi(header) } - private fun createApi(): TangemTechApi { - val retrofit = createRetrofitInstance( - baseUrl = baseUrl, - interceptors = headerInterceptors.toList(), - logEnabled = logIsEnabled, - ) - return retrofit.create(TangemTechApi::class.java) - } - - companion object { - const val baseUrl = "https://api.tangem-tech.com/v1/" - const val cacheMaxAge = 600 + private fun createApi(header: RequestHeader? = null): TangemTechApi { + val headers = mutableListOf(CacheControlHeader).apply { header?.let(::add) } + return Retrofit.Builder() + .addConverterFactory(MoshiConverter.createFactory()) + .baseUrl(TANGEM_TECH_BASE_URL) + .client( + OkHttpClient.Builder() + .addHeaders(*headers.toTypedArray()) + .allowLogging() + .build(), + ) + .build() + .create(TangemTechApi::class.java) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt index fc33504a48..84de623ee4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -37,15 +37,15 @@ class NetworkModule { fun provideTangemTechApi(authProvider: AuthProvider, moshi: Moshi): TangemTechApi { return Retrofit.Builder() .addConverterFactory(MoshiConverterFactory.create(moshi)) - .baseUrl(DEV_TANGEM_TECH_BASE_URL) + .baseUrl(PROD_TANGEM_TECH_BASE_URL) .client( OkHttpClient.Builder() .addHeaders( CacheControlHeader, - AuthenticationHeader(authProvider) + AuthenticationHeader(authProvider), ) .allowLogging() - .build() + .build(), ) .build() .create(TangemTechApi::class.java) @@ -58,12 +58,12 @@ class NetworkModule { .addConverterFactory( MoshiConverterFactory.create(moshi), ) - .baseUrl(DEV_TANGEM_TECH_BASE_URL) + .baseUrl(PROD_TANGEM_TECH_BASE_URL) .client( OkHttpClient.Builder() .addHeaders(AuthenticationHeader(authProvider)) .allowLogging() - .build() + .build(), ) .build() .create(ReferralApi::class.java) diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index 93519446be..33ffebc8ed 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -74,6 +74,7 @@ dependencies { implementation(project(":core:datasource")) implementation(project(":core:utils")) implementation(project(":common")) + implementation(project(":libs:auth")) /** Tangem libraries */ implementation(Tangem.blockchain) { diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt index c4f96f4b55..ebe3cef306 100644 --- a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -13,7 +13,6 @@ object LogConfig { object NetworkLogConfig { val mercuryoService: Boolean = false val moonPayService: Boolean = false - val tangemTechService: Boolean = BuildConfig.DEBUG val paymentologyApiService: Boolean = BuildConfig.DEBUG val blockchainSdkNetwork: Boolean = BuildConfig.DEBUG } diff --git a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalHub.kt b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalHub.kt index 38c30c5177..2e255c502b 100644 --- a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalHub.kt +++ b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalHub.kt @@ -2,10 +2,11 @@ package com.tangem.domain.redux.global import android.webkit.ValueCallback import com.tangem.common.extensions.toHexString +import com.tangem.datasource.utils.RequestHeader import com.tangem.domain.redux.BaseStoreHub import com.tangem.domain.redux.DomainState import com.tangem.domain.redux.ReStoreReducer -import com.tangem.datasource.api.common.CardPublicKeyHttpInterceptor +import com.tangem.lib.auth.AuthProvider import org.rekotlin.Action /** @@ -22,17 +23,8 @@ internal class DomainGlobalHub : BaseStoreHub("DomainGlobalHu return storeState.copy(globalState = newHubState) } - override suspend fun handleAction( - action: Action, - storeState: DomainState, - cancel: ValueCallback - ) { + override suspend fun handleAction(action: Action, storeState: DomainState, cancel: ValueCallback) { if (action !is DomainGlobalAction) return - - val state = storeState.globalState - - // when (action) { - // } } override fun getReducer(): ReStoreReducer = DomainGlobalReducer() @@ -43,9 +35,14 @@ private class DomainGlobalReducer : ReStoreReducer { override fun reduceAction(action: Action, state: DomainGlobalState): DomainGlobalState { return when (action) { is DomainGlobalAction.SaveScanNoteResponse -> { - val cardPublicKeyHex = action.scanResponse.card.cardPublicKey.toHexString() - state.networkServices.tangemTechService.addHeaderInterceptors( - listOf(CardPublicKeyHttpInterceptor(cardPublicKeyHex)) + val card = action.scanResponse.card + state.networkServices.tangemTechService.addAuthenticationHeader( + RequestHeader.AuthenticationHeader( + object : AuthProvider { + override fun getCardPublicKey(): String = card.cardPublicKey.toHexString() + override fun getCardId(): String = card.cardId + }, + ), ) state.copy(scanResponse = action.scanResponse) } diff --git a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt index a013b2128f..8a3bd3f4ed 100644 --- a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt +++ b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt @@ -1,10 +1,10 @@ package com.tangem.domain.redux.global +import com.tangem.datasource.api.paymentology.PaymentologyApiService +import com.tangem.datasource.api.tangemTech.TangemTechService import com.tangem.domain.DomainDialog import com.tangem.domain.common.LogConfig import com.tangem.domain.common.ScanResponse -import com.tangem.datasource.api.paymentology.PaymentologyApiService -import com.tangem.datasource.api.tangemTech.TangemTechService /** [REDACTED_AUTHOR] @@ -19,8 +19,8 @@ data class DomainGlobalState( ) data class NetworkServices( - val tangemTechService: TangemTechService = TangemTechService( - LogConfig.network.tangemTechService), + val tangemTechService: TangemTechService = TangemTechService, val paymentologyService: PaymentologyApiService = PaymentologyApiService( - LogConfig.network.paymentologyApiService), + LogConfig.network.paymentologyApiService, + ), )