@@ -2,6 +2,15 @@ package co.nimblehq.template.compose.di.modules
2
2
3
3
import android.content.Context
4
4
import co.nimblehq.template.compose.BuildConfig
5
+ import co.nimblehq.template.compose.data.remote.interceptor.AuthInterceptor
6
+ import co.nimblehq.template.compose.data.local.preferences.NetworkEncryptedSharedPreferences
7
+ import co.nimblehq.template.compose.data.remote.authenticator.RequestAuthenticator
8
+ import co.nimblehq.template.compose.data.util.DispatchersProvider
9
+ import co.nimblehq.template.compose.di.Authorized
10
+ import co.nimblehq.template.compose.di.Unauthorized
11
+ import co.nimblehq.template.compose.domain.usecases.GetAuthStatusUseCase
12
+ import co.nimblehq.template.compose.domain.usecases.RefreshTokenUseCase
13
+ import co.nimblehq.template.compose.domain.usecases.UpdateLoginTokensUseCase
5
14
import com.chuckerteam.chucker.api.*
6
15
import dagger.Module
7
16
import dagger.Provides
@@ -18,6 +27,7 @@ private const val READ_TIME_OUT = 30L
18
27
@InstallIn(SingletonComponent ::class )
19
28
class OkHttpClientModule {
20
29
30
+ @Unauthorized
21
31
@Provides
22
32
fun provideOkHttpClient (
23
33
chuckerInterceptor : ChuckerInterceptor
@@ -31,6 +41,26 @@ class OkHttpClientModule {
31
41
}
32
42
}.build()
33
43
44
+ @Authorized
45
+ @Provides
46
+ fun provideAuthorizedOkHttpClient (
47
+ authInterceptor : AuthInterceptor ,
48
+ chuckerInterceptor : ChuckerInterceptor ,
49
+ authenticator : RequestAuthenticator ,
50
+ ) = OkHttpClient .Builder ().apply {
51
+ addInterceptor(authInterceptor)
52
+ authenticator(authenticator)
53
+ if (BuildConfig .DEBUG ) {
54
+ addInterceptor(HttpLoggingInterceptor ().apply {
55
+ level = HttpLoggingInterceptor .Level .BODY
56
+ })
57
+ addInterceptor(chuckerInterceptor)
58
+ readTimeout(READ_TIME_OUT , TimeUnit .SECONDS )
59
+ }
60
+ }.build().apply {
61
+ authenticator.okHttpClient = this
62
+ }
63
+
34
64
@Provides
35
65
fun provideChuckerInterceptor (
36
66
@ApplicationContext context : Context
@@ -46,4 +76,31 @@ class OkHttpClientModule {
46
76
.alwaysReadResponseBody(true )
47
77
.build()
48
78
}
79
+
80
+ @Provides
81
+ fun provideAuthInterceptor (
82
+ encryptedSharedPreference : NetworkEncryptedSharedPreferences
83
+ ): AuthInterceptor {
84
+ return AuthInterceptor (encryptedSharedPreference)
85
+ }
86
+
87
+ @Provides
88
+ fun provideNetworkEncryptedSharedPreferences (
89
+ @ApplicationContext context : Context ,
90
+ ): NetworkEncryptedSharedPreferences {
91
+ return NetworkEncryptedSharedPreferences (context)
92
+ }
93
+
94
+ @Provides
95
+ fun provideRequestAuthenticator (
96
+ dispatchersProvider : DispatchersProvider ,
97
+ getAuthStatusUseCase : GetAuthStatusUseCase ,
98
+ refreshTokenUseCase : RefreshTokenUseCase ,
99
+ updateLoginTokensUseCase : UpdateLoginTokensUseCase ,
100
+ ): RequestAuthenticator = RequestAuthenticator (
101
+ dispatchersProvider = dispatchersProvider,
102
+ getAuthStatusUseCase = getAuthStatusUseCase,
103
+ refreshTokenUseCase = refreshTokenUseCase,
104
+ updateLoginTokensUseCase = updateLoginTokensUseCase,
105
+ )
49
106
}
0 commit comments