Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-13 20:00:57 +03:00
parent 244f9bc61d
commit 62d0a771d9
9 changed files with 34 additions and 38 deletions

View file

@ -1,23 +1,16 @@
package com.tangem.tap.network.auth
import com.tangem.datasource.config.ConfigManager
import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.lib.auth.ExpressAuthProvider
import com.tangem.lib.auth.sessionId.ExpressSessionIdGenerator
import java.util.UUID
import java.util.concurrent.atomic.AtomicReference
internal class DefaultExpressAuthProvider(
private val userWalletsStore: UserWalletsStore,
private val configManager: ConfigManager,
) : ExpressAuthProvider, ExpressSessionIdGenerator {
) : ExpressAuthProvider {
private var uuid = AtomicReference(UUID.randomUUID())
override fun getApiKey(): String {
return configManager.config.express?.apiKey ?: error("No express api key provided")
}
override fun getUserId(): String {
return userWalletsStore.selectedUserWalletOrNull?.walletId?.stringValue ?: error("No user id provided")
}
@ -25,8 +18,4 @@ internal class DefaultExpressAuthProvider(
override fun getSessionId(): String {
return uuid.get().toString()
}
override fun generateNewSessionId() {
uuid = AtomicReference(UUID.randomUUID())
}
}

View file

@ -29,14 +29,8 @@ class AuthModule {
@Provides
@Singleton
fun provideExpressAuthProvider(
userWalletsStore: UserWalletsStore,
configManager: ConfigManager,
): ExpressAuthProvider {
return DefaultExpressAuthProvider(
userWalletsStore = userWalletsStore,
configManager = configManager,
)
fun provideExpressAuthProvider(userWalletsStore: UserWalletsStore): ExpressAuthProvider {
return DefaultExpressAuthProvider(userWalletsStore = userWalletsStore)
}
@Provides

View file

@ -1,13 +1,21 @@
package com.tangem.datasource.api.common.config
import com.tangem.datasource.BuildConfig
import com.tangem.datasource.config.ConfigManager
import com.tangem.datasource.utils.RequestHeader
import com.tangem.lib.auth.ExpressAuthProvider
import com.tangem.utils.Provider
import com.tangem.utils.version.AppVersionProvider
/** Express [ApiConfig] */
/**
* Express [ApiConfig]
*
* @property configManager config manager
* @property expressAuthProvider express auth provider
* @property appVersionProvider app version provider
*/
internal class Express(
private val configManager: ConfigManager,
private val expressAuthProvider: ExpressAuthProvider,
private val appVersionProvider: AppVersionProvider,
) : ApiConfig() {
@ -23,28 +31,38 @@ internal class Express(
private fun createDevEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
environment = ApiEnvironment.DEV,
baseUrl = "[REDACTED_ENV_URL]",
headers = createHeaders(),
headers = createHeaders(isProd = false),
)
private fun createStageEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
environment = ApiEnvironment.STAGE,
baseUrl = "[REDACTED_ENV_URL]",
headers = createHeaders(),
headers = createHeaders(isProd = false),
)
private fun createProdEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
environment = ApiEnvironment.PROD,
baseUrl = "https://express.tangem.com/v1/",
headers = createHeaders(),
headers = createHeaders(isProd = true),
)
private fun createHeaders() = buildMap {
put(key = "api-key", value = Provider(expressAuthProvider::getApiKey))
private fun createHeaders(isProd: Boolean) = buildMap {
put(key = "api-key", value = Provider { getApiKey(isProd) })
put(key = "user-id", value = Provider(expressAuthProvider::getUserId))
put(key = "session-id", value = Provider(expressAuthProvider::getSessionId))
putAll(from = RequestHeader.AppVersionPlatformHeaders(appVersionProvider).values)
}
private fun getApiKey(isProd: Boolean): String {
return if (isProd) {
configManager.config.express
} else {
configManager.config.devExpress
}
?.apiKey
?: error("No express config provided")
}
private companion object {
fun getInitialEnvironment(): ApiEnvironment {

View file

@ -1,7 +1,6 @@
package com.tangem.datasource.config
import com.tangem.blockchain.common.*
import com.tangem.datasource.BuildConfig
import com.tangem.datasource.config.ConfigManager.Companion.IS_CREATING_TWIN_CARDS_ALLOWED
import com.tangem.datasource.config.ConfigManager.Companion.IS_TOP_UP_ENABLED
import com.tangem.datasource.config.models.Config
@ -109,7 +108,8 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
sprinklr = configValues.sprinklr,
walletConnectProjectId = configValues.walletConnectProjectId,
tangemComAuthorization = configValues.tangemComAuthorization,
express = if (BuildConfig.ENVIRONMENT == "dev") configValues.devExpress else configValues.express,
express = configValues.express,
devExpress = configValues.devExpress,
stakeKitApiKey = configValues.stakeKitApiKey,
)
}

View file

@ -17,5 +17,6 @@ data class Config(
val walletConnectProjectId: String = "",
val tangemComAuthorization: String? = null,
val express: ExpressModel? = null,
val devExpress: ExpressModel? = null,
val stakeKitApiKey: String? = null,
)

View file

@ -3,6 +3,7 @@ package com.tangem.datasource.di
import com.tangem.datasource.api.common.config.ApiConfig
import com.tangem.datasource.api.common.config.Express
import com.tangem.datasource.api.common.config.TangemTech
import com.tangem.datasource.config.ConfigManager
import com.tangem.lib.auth.ExpressAuthProvider
import com.tangem.utils.version.AppVersionProvider
import dagger.Module
@ -18,10 +19,11 @@ internal object ApiConfigsModule {
@Provides
@IntoSet
fun provideExpressConfig(
configManager: ConfigManager,
expressAuthProvider: ExpressAuthProvider,
appVersionProvider: AppVersionProvider,
): ApiConfig {
return Express(expressAuthProvider, appVersionProvider)
return Express(configManager, expressAuthProvider, appVersionProvider)
}
@Provides

View file

@ -35,7 +35,7 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
private companion object {
val API_CONFIGS = setOf(
Express(mockk(), mockk()),
Express(mockk(), mockk(), mockk()),
TangemTech(),
// Don't forget to add new config

View file

@ -2,8 +2,6 @@ package com.tangem.lib.auth
interface ExpressAuthProvider {
fun getApiKey(): String
fun getUserId(): String
fun getSessionId(): String

View file

@ -1,6 +0,0 @@
package com.tangem.lib.auth.sessionId
interface ExpressSessionIdGenerator {
fun generateNewSessionId()
}