Updated on 2026-08-14
This commit is contained in:
commit
88c5a9ac8d
6 changed files with 37 additions and 9 deletions
|
|
@ -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 ?: ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
@ -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}" },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -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}" },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue