diff --git a/app/src/main/java/com/tangem/tap/network/auth/DefaultExpressAuthProvider.kt b/app/src/main/java/com/tangem/tap/network/auth/DefaultExpressAuthProvider.kt index f7b18ad5a2..99ddfe6b5b 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/DefaultExpressAuthProvider.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/DefaultExpressAuthProvider.kt @@ -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()) - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt b/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt index 102598b998..41aa591911 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt @@ -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 diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt index d6e5f835bb..134d24a3ac 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt @@ -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 { diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt index 408493a3d1..af8b2a28c7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt @@ -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, ) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt index 3f54641502..2b8cadac71 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt @@ -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, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt index 1e3e3d5724..9959cd7ab7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt @@ -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 diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt index a8cdb9a494..135ca3e209 100644 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt @@ -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 diff --git a/libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt b/libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt index 4388254787..8582fd21ed 100644 --- a/libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt +++ b/libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt @@ -2,8 +2,6 @@ package com.tangem.lib.auth interface ExpressAuthProvider { - fun getApiKey(): String - fun getUserId(): String fun getSessionId(): String diff --git a/libs/auth/src/main/java/com/tangem/lib/auth/sessionId/ExpressSessionIdGenerator.kt b/libs/auth/src/main/java/com/tangem/lib/auth/sessionId/ExpressSessionIdGenerator.kt deleted file mode 100644 index be7270b4c7..0000000000 --- a/libs/auth/src/main/java/com/tangem/lib/auth/sessionId/ExpressSessionIdGenerator.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.tangem.lib.auth.sessionId - -interface ExpressSessionIdGenerator { - - fun generateNewSessionId() -} \ No newline at end of file