From 1e0c7e02ff20f5efeb5853883b1d1ae8791390bc Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Nov 2023 12:38:27 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../network/auth/ExpressAuthProviderImpl.kt | 35 +++++++++++++++++++ .../datasource/api/express/ExpressApi.kt | 5 +-- .../com/tangem/datasource/di/NetworkModule.kt | 28 +++++++++++++++ .../tangem/datasource/utils/RequestHeader.kt | 7 ++++ .../tangem/lib/auth/ExpressAuthProvider.kt | 10 ++++++ .../lib/auth/ExpressSessionIdRefresher.kt | 6 ++++ 6 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/network/auth/ExpressAuthProviderImpl.kt create mode 100644 libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt create mode 100644 libs/auth/src/main/java/com/tangem/lib/auth/ExpressSessionIdRefresher.kt diff --git a/app/src/main/java/com/tangem/tap/network/auth/ExpressAuthProviderImpl.kt b/app/src/main/java/com/tangem/tap/network/auth/ExpressAuthProviderImpl.kt new file mode 100644 index 0000000000..9d7e70badc --- /dev/null +++ b/app/src/main/java/com/tangem/tap/network/auth/ExpressAuthProviderImpl.kt @@ -0,0 +1,35 @@ +package com.tangem.tap.network.auth + +import com.tangem.common.extensions.toHexString +import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.wallets.legacy.WalletsStateHolder +import com.tangem.lib.auth.AuthProvider +import com.tangem.lib.auth.ExpressAuthProvider +import com.tangem.lib.auth.ExpressSessionIdGenerator +import com.tangem.tap.proxy.AppStateHolder +import java.util.UUID + +class ExpressAuthProviderImpl( + private val walletStateHolder: WalletsStateHolder, + private val userWalletsStore: UserWalletsStore, + private val appStateHolder: AppStateHolder +) : ExpressAuthProvider, ExpressSessionIdGenerator { + + private var uuid = UUID.randomUUID() + + override fun getApiKey(): String { + TODO() + } + + override fun getUserId(): String { + return userWalletsStore.selectedUserWalletOrNull?.walletId?.stringValue ?: "" + } + + override fun getSessionId(): String { + return uuid.toString() + } + + override fun generateNewSessionId() { + uuid = UUID.randomUUID() + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/ExpressApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/ExpressApi.kt index 8574c38d72..9b5e7b2212 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/ExpressApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/ExpressApi.kt @@ -20,9 +20,6 @@ interface ExpressApi { // TODO move first three params to retrofit interceptor @POST("assets") suspend fun getAssets( - @Header("api-key") apiKey: String, - @Header("user-id") userId: String, - @Header("session-id") sessionId: String, @Body body: AssetsRequestBody, ): ApiResponse> @@ -55,6 +52,6 @@ interface ExpressApi { @Query("toAddress") toAddress: String, ): ApiResponse - @GET("exchange-results") + @GET("exchange-result") suspend fun getExchangeResults(@Query("txId") txId: String): ApiResponse } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt index f3e245e0d6..93f0528a18 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -3,12 +3,15 @@ package com.tangem.datasource.di import android.content.Context import com.squareup.moshi.Moshi import com.tangem.datasource.api.common.response.ApiResponseCallAdapterFactory +import com.tangem.datasource.api.express.ExpressApi import com.tangem.datasource.api.promotion.PromotionApi import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.utils.RequestHeader import com.tangem.datasource.utils.RequestHeader.* import com.tangem.datasource.utils.addHeaders import com.tangem.datasource.utils.addLoggers import com.tangem.lib.auth.AuthProvider +import com.tangem.lib.auth.ExpressAuthProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -24,6 +27,28 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) class NetworkModule { + @Provides + @Singleton + fun provideExpressApi( + @NetworkMoshi moshi: Moshi, + @ApplicationContext context: Context, + expressAuthProvider: ExpressAuthProvider, + ): ExpressApi { + + return Retrofit.Builder() + .addConverterFactory(MoshiConverterFactory.create(moshi)) + .addCallAdapterFactory(ApiResponseCallAdapterFactory.create()) + .baseUrl(DEV_EXPRESS_BASE_URL) + .client( + OkHttpClient.Builder() + .addHeaders(Express(expressAuthProvider)) + .addLoggers(context) + .build(), + ) + .build() + .create(ExpressApi::class.java) + } + @Provides @Singleton fun provideTangemTechApi(@NetworkMoshi moshi: Moshi, @ApplicationContext context: Context): TangemTechApi { @@ -74,6 +99,9 @@ class NetworkModule { } private companion object { + const val PROD_EXPRESS_BASE_URL = "[REDACTED_ENV_URL]" + const val DEV_EXPRESS_BASE_URL = "[REDACTED_ENV_URL]" + const val PROD_TANGEM_TECH_BASE_URL = "https://api.tangem-tech.com/v1/" const val DEV_TANGEM_TECH_BASE_URL = "https://devapi.tangem-tech.com/v1/" diff --git a/core/datasource/src/main/java/com/tangem/datasource/utils/RequestHeader.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/RequestHeader.kt index 5e5067746f..b41f2c18f2 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/utils/RequestHeader.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/RequestHeader.kt @@ -1,6 +1,7 @@ package com.tangem.datasource.utils import com.tangem.lib.auth.AuthProvider +import com.tangem.lib.auth.ExpressAuthProvider /** * Presentation of request header @@ -18,4 +19,10 @@ sealed class RequestHeader(vararg pairs: Pair String>) { "card_id" to { authProvider.getCardId() }, "card_public_key" to { authProvider.getCardPublicKey() }, ) + + class Express(expressAuthProvider: ExpressAuthProvider): RequestHeader( + "api-key" to { expressAuthProvider.getApiKey() }, + "user-id" to { expressAuthProvider.getUserId() }, + "session-id" to { expressAuthProvider.getSessionId() } + ) } \ No newline at end of file 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 new file mode 100644 index 0000000000..4388254787 --- /dev/null +++ b/libs/auth/src/main/java/com/tangem/lib/auth/ExpressAuthProvider.kt @@ -0,0 +1,10 @@ +package com.tangem.lib.auth + +interface ExpressAuthProvider { + + fun getApiKey(): String + + fun getUserId(): String + + fun getSessionId(): String +} \ No newline at end of file diff --git a/libs/auth/src/main/java/com/tangem/lib/auth/ExpressSessionIdRefresher.kt b/libs/auth/src/main/java/com/tangem/lib/auth/ExpressSessionIdRefresher.kt new file mode 100644 index 0000000000..0a8adb6718 --- /dev/null +++ b/libs/auth/src/main/java/com/tangem/lib/auth/ExpressSessionIdRefresher.kt @@ -0,0 +1,6 @@ +package com.tangem.lib.auth + +interface ExpressSessionIdGenerator { + + fun generateNewSessionId() +} \ No newline at end of file