Updated on 2026-08-14

This commit is contained in:
Tangem 2023-11-29 14:51:57 +03:00
parent 7a0b84a44e
commit 085d42e19e
9 changed files with 61 additions and 5 deletions

@ -1 +1 @@
Subproject commit 2a612cd92b1c78b99c917d0fe66342831f801e5e Subproject commit 2115eb12ca824f8341cf49eb6d2eacadd5ae619e

View file

@ -0,0 +1,13 @@
package com.tangem.tap.network.auth
import com.tangem.datasource.config.ConfigManager
import com.tangem.lib.auth.AuthBearerProvider
internal class DefaultOneInchProvider(
private val configManager: ConfigManager,
) : AuthBearerProvider {
override fun getApiKey(): String {
return configManager.config.oneInchApiKey
}
}

View file

@ -2,10 +2,12 @@ package com.tangem.tap.network.auth.di
import com.tangem.datasource.config.ConfigManager import com.tangem.datasource.config.ConfigManager
import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.lib.auth.AuthBearerProvider
import com.tangem.lib.auth.AuthProvider import com.tangem.lib.auth.AuthProvider
import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.ExpressAuthProvider
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.DefaultOneInchProvider
import com.tangem.tap.proxy.AppStateHolder import com.tangem.tap.proxy.AppStateHolder
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
@ -34,4 +36,12 @@ class AuthModule {
configManager = configManager, configManager = configManager,
) )
} }
@Provides
@Singleton
fun provideOneInchAuthProvider(configManager: ConfigManager): AuthBearerProvider {
return DefaultOneInchProvider(
configManager = configManager,
)
}
} }

View file

@ -107,6 +107,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
walletConnectProjectId = configValues.walletConnectProjectId, walletConnectProjectId = configValues.walletConnectProjectId,
tangemComAuthorization = configValues.tangemComAuthorization, tangemComAuthorization = configValues.tangemComAuthorization,
tangemExpressApiKey = configValues.tangemExpressApiKey, tangemExpressApiKey = configValues.tangemExpressApiKey,
oneInchApiKey = configValues.oneInchApiKey,
) )
} }

View file

@ -20,4 +20,5 @@ data class Config(
val walletConnectProjectId: String = "", val walletConnectProjectId: String = "",
val tangemComAuthorization: String? = null, val tangemComAuthorization: String? = null,
val tangemExpressApiKey: String = "", val tangemExpressApiKey: String = "",
val oneInchApiKey: String = "",
) )

View file

@ -42,6 +42,7 @@ class ConfigValueModel(
val chiaFireAcademyApiKey: String?, val chiaFireAcademyApiKey: String?,
val chiaTangemApiKey: String?, val chiaTangemApiKey: String?,
val tangemExpressApiKey: String, val tangemExpressApiKey: String,
val oneInchApiKey: String,
) )
@JsonClass(generateAdapter = true) @JsonClass(generateAdapter = true)

View file

@ -4,7 +4,10 @@ import android.content.Context
import com.squareup.moshi.Moshi import com.squareup.moshi.Moshi
import com.tangem.datasource.api.oneinch.OneInchApi import com.tangem.datasource.api.oneinch.OneInchApi
import com.tangem.datasource.api.oneinch.OneInchApiFactory import com.tangem.datasource.api.oneinch.OneInchApiFactory
import com.tangem.datasource.utils.RequestHeader
import com.tangem.datasource.utils.addHeaders
import com.tangem.datasource.utils.addLoggers import com.tangem.datasource.utils.addLoggers
import com.tangem.lib.auth.AuthBearerProvider
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
@ -21,7 +24,11 @@ class OneInchApisModule {
@Provides @Provides
@Singleton @Singleton
fun provideOneInchApiFactory(@NetworkMoshi moshi: Moshi, @ApplicationContext context: Context): OneInchApiFactory { fun provideOneInchApiFactory(
@NetworkMoshi moshi: Moshi,
@ApplicationContext context: Context,
auth1Inch: AuthBearerProvider,
): OneInchApiFactory {
val networks = mapOf( val networks = mapOf(
ETH_NETWORK to ONE_INCH_ETH_PATH, ETH_NETWORK to ONE_INCH_ETH_PATH,
BSC_NETWORK to ONE_INCH_BSC_PATH, BSC_NETWORK to ONE_INCH_BSC_PATH,
@ -38,14 +45,19 @@ class OneInchApisModule {
for ((network, path) in networks) { for ((network, path) in networks) {
apiFactory.putApi( apiFactory.putApi(
networkId = network, networkId = network,
api = createOneInchApiWithUrl("$ONE_INCH_BASE_URL$path", moshi, context), api = createOneInchApiWithUrl("$ONE_INCH_BASE_URL$path", moshi, context, auth1Inch),
) )
} }
return apiFactory return apiFactory
} }
private fun createOneInchApiWithUrl(url: String, moshi: Moshi, context: Context): OneInchApi { private fun createOneInchApiWithUrl(
url: String,
moshi: Moshi,
context: Context,
auth1Inch: AuthBearerProvider,
): OneInchApi {
return Retrofit.Builder() return Retrofit.Builder()
.addConverterFactory( .addConverterFactory(
MoshiConverterFactory.create(moshi), MoshiConverterFactory.create(moshi),
@ -53,6 +65,7 @@ class OneInchApisModule {
.baseUrl(url) .baseUrl(url)
.client( .client(
OkHttpClient.Builder() OkHttpClient.Builder()
.addHeaders(RequestHeader.AuthBearerHeader(auth1Inch))
.addLoggers(context) .addLoggers(context)
.build(), .build(),
) )
@ -61,7 +74,7 @@ class OneInchApisModule {
} }
companion object { companion object {
private const val ONE_INCH_BASE_URL = "https://api-tangem.1inch.io/v5.2/" private const val ONE_INCH_BASE_URL = "https://api.1inch.dev/swap/v5.2/"
private const val ONE_INCH_ETH_PATH = "1/" private const val ONE_INCH_ETH_PATH = "1/"
private const val ONE_INCH_BSC_PATH = "56/" private const val ONE_INCH_BSC_PATH = "56/"
private const val ONE_INCH_POLYGON_PATH = "137/" private const val ONE_INCH_POLYGON_PATH = "137/"

View file

@ -1,5 +1,6 @@
package com.tangem.datasource.utils package com.tangem.datasource.utils
import com.tangem.lib.auth.AuthBearerProvider
import com.tangem.lib.auth.AuthProvider import com.tangem.lib.auth.AuthProvider
import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.ExpressAuthProvider
@ -25,4 +26,8 @@ sealed class RequestHeader(vararg pairs: Pair<String, () -> String>) {
"user-id" to { expressAuthProvider.getUserId() }, "user-id" to { expressAuthProvider.getUserId() },
"session-id" to { expressAuthProvider.getSessionId() }, "session-id" to { expressAuthProvider.getSessionId() },
) )
class AuthBearerHeader(authBearerProvider: AuthBearerProvider) : RequestHeader(
"Authorization" to { "Bearer " + authBearerProvider.getApiKey() },
)
} }

View file

@ -0,0 +1,12 @@
package com.tangem.lib.auth
/**
* Provides auth for tangemTech API
*/
interface AuthBearerProvider {
/**
* Returns api-key
*/
fun getApiKey(): String
}