Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.

Feature/use okhttp utils #75

Merged
merged 5 commits into from
Apr 7, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ dependencies {
implementation("com.squareup.retrofit2:converter-gson:${versions.retrofit}") {
exclude module: "retrofit:${versions.retrofit}"
}

// Nodes OkHTTP utilities
implementation "dk.nodes.utils:okhttp:${versions.nodes_utils_okhttp}"

implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}"
implementation("com.squareup.okhttp3:logging-interceptor:${versions.okhttp}")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ import dagger.Component
import dagger.android.AndroidInjector
import dagger.android.support.AndroidSupportInjectionModule
import dk.nodes.template.App
import dk.nodes.template.injection.modules.AppModule
import dk.nodes.template.injection.modules.InteractorModule
import dk.nodes.template.injection.modules.RestModule
import dk.nodes.template.injection.modules.RestRepositoryBinding
import dk.nodes.template.injection.modules.StorageBindingModule
import dk.nodes.template.injection.modules.*
import dk.nodes.template.presentation.injection.PresentationModule
import dk.nodes.template.presentation.injection.ViewModelBuilder
import javax.inject.Singleton
Expand All @@ -22,7 +18,8 @@ import javax.inject.Singleton
InteractorModule::class,
RestModule::class,
RestRepositoryBinding::class,
StorageBindingModule::class
StorageBindingModule::class,
OAuthModule::class
]
)
@Singleton
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package dk.nodes.template.injection.modules

import dagger.Binds
import dagger.Module
import dagger.Provides
import dk.nodes.okhttputils.oauth.OAuthAuthenticator
import dk.nodes.okhttputils.oauth.OAuthCallback
import dk.nodes.okhttputils.oauth.OAuthInterceptor
import dk.nodes.okhttputils.oauth.OAuthRepository
import dk.nodes.okhttputils.oauth.entities.OAuthHeader
import dk.nodes.template.data.network.oauth.OAuthCallbackImpl
import dk.nodes.template.data.network.oauth.OAuthPreferencesRepository
import javax.inject.Singleton

@Module(includes = [OAuthModule.BindingModule::class])
class OAuthModule {

@Module
interface BindingModule {

@Binds
@Singleton
fun bindOAuthRepository(repository: OAuthPreferencesRepository): OAuthRepository

@Binds
@Singleton
fun bindOAuthCallback(oAuthCallback: OAuthCallbackImpl): OAuthCallback
}

@Provides
@Singleton
fun provideOAuthHeader(): OAuthHeader {
// modify header type & name here
return OAuthHeader()
}

@Provides
@Singleton
fun provideOAuthInterceptor(repository: OAuthRepository, oAuthHeader: OAuthHeader): OAuthInterceptor {
return OAuthInterceptor(repository, oAuthHeader)
}

@Provides
@Singleton
fun provideOAuthAuthenticator(
repository: OAuthRepository,
oAuthHeader: OAuthHeader,
oAuthCallback: OAuthCallback
): OAuthAuthenticator {
return OAuthAuthenticator(repository, oAuthCallback, oAuthHeader)
}
}
53 changes: 30 additions & 23 deletions app/src/main/java/dk/nodes/template/injection/modules/RestModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import dagger.Module
import dagger.Provides
import dk.nodes.nstack.kotlin.NStack
import dk.nodes.nstack.kotlin.provider.NMetaInterceptor
import dk.nodes.okhttputils.oauth.OAuthAuthenticator
import dk.nodes.okhttputils.oauth.OAuthInterceptor
import dk.nodes.template.BuildConfig
import dk.nodes.template.data.network.Api
import dk.nodes.template.data.network.util.BufferedSourceConverterFactory
Expand Down Expand Up @@ -37,10 +39,10 @@ class RestModule {
@Singleton
fun provideGson(typeFactory: ItemTypeAdapterFactory, dateDeserializer: DateDeserializer): Gson {
return GsonBuilder()
.registerTypeAdapterFactory(typeFactory)
.registerTypeAdapter(Date::class.java, dateDeserializer)
.setDateFormat(DateDeserializer.DATE_FORMATS[0])
.create()
.registerTypeAdapterFactory(typeFactory)
.registerTypeAdapter(Date::class.java, dateDeserializer)
.setDateFormat(DateDeserializer.DATE_FORMATS[0])
.create()
}

@Provides
Expand All @@ -57,19 +59,24 @@ class RestModule {

@Provides
@Singleton
fun provideHttpClient(): OkHttpClient {
fun provideHttpClient(
oAuthAuthenticator: OAuthAuthenticator,
oAuthInterceptor: OAuthInterceptor
): OkHttpClient {
val clientBuilder = OkHttpClient.Builder()
.connectTimeout(45, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(
NMetaInterceptor(
NStack.env,
NStack.appClientInfo.versionName,
Build.VERSION.RELEASE,
Build.MODEL
.connectTimeout(45, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addInterceptor(oAuthInterceptor)
.authenticator(oAuthAuthenticator)
.addInterceptor(
NMetaInterceptor(
NStack.env,
NStack.appClientInfo.versionName,
Build.VERSION.RELEASE,
Build.MODEL
)
)
)

if (BuildConfig.DEBUG) {
val logging = okhttp3.logging.HttpLoggingInterceptor()
Expand All @@ -83,16 +90,16 @@ class RestModule {
@Provides
@Singleton
fun provideRetrofit(
client: OkHttpClient,
converter: Converter.Factory,
@Named("NAME_BASE_URL") baseUrl: String
client: OkHttpClient,
converter: Converter.Factory,
@Named("NAME_BASE_URL") baseUrl: String
): Retrofit {
return Retrofit.Builder()
.client(client)
.baseUrl(baseUrl)
.addConverterFactory(BufferedSourceConverterFactory())
.addConverterFactory(converter)
.build()
.client(client)
.baseUrl(baseUrl)
.addConverterFactory(BufferedSourceConverterFactory())
.addConverterFactory(converter)
.build()
}

@Provides
Expand Down
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ buildscript {
ktx : "1.2.0",
material : '1.2.0-alpha02',
archCore : '2.1.0',
navigation : '2.2.1'
navigation : '2.2.1',
nodes_utils_okhttp: '0.12.2'
]

ext.keys = [
Expand Down
3 changes: 3 additions & 0 deletions data/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ dependencies {
implementation("com.squareup.retrofit2:converter-gson:${versions.retrofit}") {
exclude module: "retrofit:${versions.retrofit}"
}
// Nodes OkHTTP utilities
implementation "dk.nodes.utils:okhttp:${versions.nodes_utils_okhttp}"

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:${versions.coroutines}"
implementation group: 'javax.inject', name: 'javax.inject', version: '1'

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package dk.nodes.template.data.network.oauth

import dk.nodes.okhttputils.oauth.OAuthCallback
import dk.nodes.okhttputils.oauth.entities.OAuthInfo
import dk.nodes.okhttputils.oauth.entities.OAuthResult
import javax.inject.Inject

class OAuthCallbackImpl @Inject constructor() : OAuthCallback {
override fun provideAuthInfo(refreshToken: String?): OAuthResult<OAuthInfo> {
return OAuthResult.Success(OAuthInfo(
accessToken = "newAccessToken",
refreshToken = "new/old refresh token"
))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package dk.nodes.template.data.network.oauth

import dk.nodes.okhttputils.oauth.OAuthRepository
import dk.nodes.template.domain.managers.PrefManager
import javax.inject.Inject

class OAuthPreferencesRepository @Inject constructor(
private val prefManager: PrefManager
) : OAuthRepository {

override fun getAccessToken(): String? {
return prefManager.getString(PREF_ACCESS_TOKEN, null)
}

override fun getRefreshToken(): String? {
return prefManager.getString(PREF_REFRESH_TOKEN, null)
}

override fun setAccessToken(accessToken: String?) {
accessToken?.let { token ->
prefManager.setString(PREF_ACCESS_TOKEN, token)
}
}

override fun setRefreshToken(refreshToken: String?) {
refreshToken?.let { token ->
prefManager.setString(PREF_REFRESH_TOKEN, token)
}
}

override fun clear() {
prefManager.remove(PREF_ACCESS_TOKEN)
prefManager.remove(PREF_REFRESH_TOKEN)
}

companion object {
private const val PREF_REFRESH_TOKEN = "pref_oauth_refresh_token"
private const val PREF_ACCESS_TOKEN = "pref_oauth_access_token"
}
}