Updated on 2026-08-14

This commit is contained in:
Tangem 2024-11-14 13:56:08 +03:00
commit 88c5a9ac8d
6 changed files with 37 additions and 9 deletions

View file

@ -2,15 +2,15 @@ package com.tangem.tap.network.auth
import com.tangem.common.extensions.toHexString import com.tangem.common.extensions.toHexString
import com.tangem.datasource.api.common.AuthProvider import com.tangem.datasource.api.common.AuthProvider
import com.tangem.tap.proxy.AppStateHolder import com.tangem.domain.wallets.legacy.UserWalletsListManager
internal class DefaultAuthProvider(private val appStateHolder: AppStateHolder) : AuthProvider { internal class DefaultAuthProvider(private val userWalletsListManager: UserWalletsListManager) : AuthProvider {
override fun getCardPublicKey(): String { override fun getCardPublicKey(): String {
return appStateHolder.scanResponse?.card?.cardPublicKey?.toHexString() ?: "" return userWalletsListManager.selectedUserWalletSync?.scanResponse?.card?.cardPublicKey?.toHexString() ?: ""
} }
override fun getCardId(): String { override fun getCardId(): String {
return appStateHolder.scanResponse?.card?.cardId ?: "" return userWalletsListManager.selectedUserWalletSync?.scanResponse?.card?.cardId ?: ""
} }
} }

View file

@ -4,13 +4,13 @@ import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage
import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.domain.wallets.legacy.UserWalletsListManager
import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.ExpressAuthProvider
import com.tangem.lib.auth.StakeKitAuthProvider import com.tangem.lib.auth.StakeKitAuthProvider
import com.tangem.tap.network.auth.DefaultAppVersionProvider import com.tangem.tap.network.auth.DefaultAppVersionProvider
import com.tangem.tap.network.auth.DefaultAuthProvider import com.tangem.tap.network.auth.DefaultAuthProvider
import com.tangem.tap.network.auth.DefaultExpressAuthProvider import com.tangem.tap.network.auth.DefaultExpressAuthProvider
import com.tangem.tap.network.auth.DefaultStakeKitAuthProvider import com.tangem.tap.network.auth.DefaultStakeKitAuthProvider
import com.tangem.tap.proxy.AppStateHolder
import com.tangem.utils.version.AppVersionProvider import com.tangem.utils.version.AppVersionProvider
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -24,8 +24,8 @@ class AuthModule {
@Provides @Provides
@Singleton @Singleton
fun provideAuthProvider(appStateHolder: AppStateHolder): AuthProvider { fun provideAuthProvider(userWalletsListManager: UserWalletsListManager): AuthProvider {
return DefaultAuthProvider(appStateHolder) return DefaultAuthProvider(userWalletsListManager)
} }
@Provides @Provides

View file

@ -1,11 +1,13 @@
package com.tangem.datasource.api.common.config package com.tangem.datasource.api.common.config
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.utils.RequestHeader import com.tangem.datasource.utils.RequestHeader
import com.tangem.utils.version.AppVersionProvider import com.tangem.utils.version.AppVersionProvider
/** TangemTech [ApiConfig] */ /** TangemTech [ApiConfig] */
internal class TangemTech( internal class TangemTech(
private val appVersionProvider: AppVersionProvider, private val appVersionProvider: AppVersionProvider,
private val authProvider: AuthProvider,
) : ApiConfig() { ) : ApiConfig() {
override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD
@ -29,5 +31,6 @@ internal class TangemTech(
private fun createHeaders() = buildMap { private fun createHeaders() = buildMap {
putAll(from = RequestHeader.AppVersionPlatformHeaders(appVersionProvider).values) putAll(from = RequestHeader.AppVersionPlatformHeaders(appVersionProvider).values)
putAll(from = RequestHeader.AuthenticationHeader(authProvider).values)
} }
} }

View file

@ -1,5 +1,6 @@
package com.tangem.datasource.di package com.tangem.datasource.di
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.common.config.ApiConfig import com.tangem.datasource.api.common.config.ApiConfig
import com.tangem.datasource.api.common.config.Express import com.tangem.datasource.api.common.config.Express
import com.tangem.datasource.api.common.config.StakeKit import com.tangem.datasource.api.common.config.StakeKit
@ -36,5 +37,6 @@ internal object ApiConfigsModule {
@Provides @Provides
@IntoSet @IntoSet
fun provideTangemTechConfig(appVersionProvider: AppVersionProvider): ApiConfig = TangemTech(appVersionProvider) fun provideTangemTechConfig(appVersionProvider: AppVersionProvider, authProvider: AuthProvider): ApiConfig =
TangemTech(appVersionProvider, authProvider)
} }

View file

@ -1,8 +1,11 @@
package com.tangem.datasource.utils package com.tangem.datasource.utils
import android.os.Build
import com.tangem.datasource.api.common.AuthProvider import com.tangem.datasource.api.common.AuthProvider
import com.tangem.utils.Provider import com.tangem.utils.Provider
import com.tangem.utils.version.AppVersionProvider import com.tangem.utils.version.AppVersionProvider
import java.util.Locale
import java.util.TimeZone
/** /**
* Presentation of request header * Presentation of request header
@ -24,5 +27,8 @@ sealed class RequestHeader(vararg pairs: Pair<String, Provider<String>>) {
class AppVersionPlatformHeaders(appVersionProvider: AppVersionProvider) : RequestHeader( class AppVersionPlatformHeaders(appVersionProvider: AppVersionProvider) : RequestHeader(
"version" to Provider(appVersionProvider::versionName), "version" to Provider(appVersionProvider::versionName),
"platform" to Provider { "android" }, "platform" to Provider { "android" },
"language" to Provider { Locale.getDefault().language },
"timezone" to Provider { TimeZone.getDefault().displayName },
"device" to Provider { "${Build.MANUFACTURER} ${Build.MODEL}" },
) )
} }

View file

@ -1,7 +1,9 @@
package com.tangem.datasource.api.common.config.managers package com.tangem.datasource.api.common.config.managers
import android.os.Build
import com.google.common.truth.Truth import com.google.common.truth.Truth
import com.tangem.datasource.BuildConfig import com.tangem.datasource.BuildConfig
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.common.config.* import com.tangem.datasource.api.common.config.*
import com.tangem.datasource.api.common.config.ApiConfig.Companion.DEBUG_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.DEBUG_BUILD_TYPE
import com.tangem.datasource.api.common.config.ApiConfig.Companion.EXTERNAL_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.EXTERNAL_BUILD_TYPE
@ -18,16 +20,19 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.junit.runners.Parameterized import org.junit.runners.Parameterized
import java.util.Locale
import java.util.TimeZone
private val configManager = MockEnvironmentConfigStorage() private val configManager = MockEnvironmentConfigStorage()
private val appVersionProvider = mockk<AppVersionProvider>() private val appVersionProvider = mockk<AppVersionProvider>()
private val expressAuthProvider = mockk<ExpressAuthProvider>() private val expressAuthProvider = mockk<ExpressAuthProvider>()
private val stakeKitAuthProvider = mockk<StakeKitAuthProvider>() private val stakeKitAuthProvider = mockk<StakeKitAuthProvider>()
private val appAuthProvider = mockk<AuthProvider>()
// Don't forget to add new config !!! // Don't forget to add new config !!!
private val API_CONFIGS = setOf( private val API_CONFIGS = setOf(
Express(configManager, expressAuthProvider, appVersionProvider), Express(configManager, expressAuthProvider, appVersionProvider),
TangemTech(appVersionProvider), TangemTech(appVersionProvider, appAuthProvider),
StakeKit(stakeKitAuthProvider), StakeKit(stakeKitAuthProvider),
) )
@ -46,6 +51,8 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
every { expressAuthProvider.getSessionId() } returns EXPRESS_SESSION_ID every { expressAuthProvider.getSessionId() } returns EXPRESS_SESSION_ID
every { expressAuthProvider.getRefCode() } returns EXPRESS_REF_CODE every { expressAuthProvider.getRefCode() } returns EXPRESS_REF_CODE
every { stakeKitAuthProvider.getApiKey() } returns STAKE_KIT_API_KEY every { stakeKitAuthProvider.getApiKey() } returns STAKE_KIT_API_KEY
every { appAuthProvider.getCardId() } returns APP_CARD_ID
every { appAuthProvider.getCardPublicKey() } returns APP_CARD_PUBLIC_KEY
} }
@Test @Test
@ -68,6 +75,8 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
const val EXPRESS_SESSION_ID = "express_session_id" const val EXPRESS_SESSION_ID = "express_session_id"
const val EXPRESS_REF_CODE = "express_ref_code" const val EXPRESS_REF_CODE = "express_ref_code"
const val STAKE_KIT_API_KEY = "stake_kit_api_key" const val STAKE_KIT_API_KEY = "stake_kit_api_key"
const val APP_CARD_ID = "app_card_id"
const val APP_CARD_PUBLIC_KEY = "app_public_key"
@JvmStatic @JvmStatic
@Parameterized.Parameters @Parameterized.Parameters
@ -118,6 +127,9 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
"refcode" to Provider { EXPRESS_REF_CODE }, "refcode" to Provider { EXPRESS_REF_CODE },
"version" to Provider { VERSION_NAME }, "version" to Provider { VERSION_NAME },
"platform" to Provider { "android" }, "platform" to Provider { "android" },
"language" to Provider { Locale.getDefault().language },
"timezone" to Provider { TimeZone.getDefault().displayName },
"device" to Provider { "${Build.MANUFACTURER} ${Build.MODEL}" },
), ),
), ),
) )
@ -130,8 +142,13 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
environment = ApiEnvironment.PROD, environment = ApiEnvironment.PROD,
baseUrl = "https://api.tangem-tech.com/v1/", baseUrl = "https://api.tangem-tech.com/v1/",
headers = mapOf( headers = mapOf(
"card_id" to Provider { APP_CARD_ID },
"card_public_key" to Provider { APP_CARD_PUBLIC_KEY },
"version" to Provider { VERSION_NAME }, "version" to Provider { VERSION_NAME },
"platform" to Provider { "android" }, "platform" to Provider { "android" },
"language" to Provider { Locale.getDefault().language },
"timezone" to Provider { TimeZone.getDefault().displayName },
"device" to Provider { "${Build.MANUFACTURER} ${Build.MODEL}" },
), ),
), ),
) )