Skip to content

Commit

Permalink
Add interceptor to record all usages of access tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
LunarX committed May 29, 2024
1 parent 4632e28 commit 1c95f85
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
19 changes: 15 additions & 4 deletions app/src/main/java/com/infomaniak/drive/MainApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ import com.infomaniak.drive.utils.NotificationUtils.notifyCompat
import com.infomaniak.lib.core.InfomaniakCore
import com.infomaniak.lib.core.auth.TokenInterceptorListener
import com.infomaniak.lib.core.models.user.User
import com.infomaniak.lib.core.networking.AccessTokenUsageInterceptor
import com.infomaniak.lib.core.networking.HttpClient
import com.infomaniak.lib.core.networking.HttpClientConfig
import com.infomaniak.lib.core.utils.CoilUtils
import com.infomaniak.lib.core.utils.NotificationUtilsCore.Companion.pendingIntentFlags
import com.infomaniak.lib.core.utils.clearStack
Expand Down Expand Up @@ -77,7 +79,8 @@ class MainApplication : Application(), ImageLoaderFactory, DefaultLifecycleObser

ProcessLifecycleOwner.get().lifecycle.addObserver(this)

AppCompatDelegate.setDefaultNightMode(UiSettings(this).nightMode)
val uiSettings = UiSettings(this)
AppCompatDelegate.setDefaultNightMode(uiSettings.nightMode)

if (BuildConfig.DEBUG) {
Stetho.initializeWithDefaults(this)
Expand Down Expand Up @@ -129,7 +132,15 @@ class MainApplication : Application(), ImageLoaderFactory, DefaultLifecycleObser

AccountUtils.onRefreshTokenError = refreshTokenError
initNotificationChannel()
HttpClient.init(tokenInterceptorListener())
val tokenInterceptorListener = tokenInterceptorListener()
HttpClientConfig.customInterceptors = listOf(
AccessTokenUsageInterceptor(
tokenInterceptorListener = tokenInterceptorListener,
previousApiCall = uiSettings.accessTokenApiCallRecord,
updateLastApiCall = { uiSettings.accessTokenApiCallRecord = it },
)
)
HttpClient.init(tokenInterceptorListener)
MqttClientWrapper.init(applicationContext)
}

Expand Down Expand Up @@ -173,8 +184,8 @@ class MainApplication : Application(), ImageLoaderFactory, DefaultLifecycleObser
refreshTokenError(AccountUtils.currentUser!!)
}

override suspend fun getApiToken(): ApiToken {
return AccountUtils.currentUser!!.apiToken
override suspend fun getApiToken(): ApiToken? {
return AccountUtils.currentUser?.apiToken
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.infomaniak.drive.R
import com.infomaniak.drive.data.models.File.SortType
import com.infomaniak.drive.ui.bottomSheetDialogs.BackgroundSyncPermissionsBottomSheetDialog.Companion.manufacturerWarning
import com.infomaniak.drive.utils.Utils
import com.infomaniak.lib.core.networking.AccessTokenUsageInterceptor.ApiCallRecord
import com.infomaniak.lib.core.utils.SharedValues
import com.infomaniak.lib.core.utils.sharedValue
import com.infomaniak.lib.core.utils.transaction
Expand Down Expand Up @@ -59,6 +60,7 @@ class UiSettings(context: Context) : SharedValues {
var nightMode by sharedValue("nightMode", MODE_NIGHT_FOLLOW_SYSTEM)
var recentSearches by sharedValue("recentSearches", emptyList())
var sortType by sharedValue("sortType", SortType.NAME_AZ)
var accessTokenApiCallRecord by sharedValue<ApiCallRecord>("accessTokenApiCallRecord", null)

data class SaveExternalFilesData(
val userId: Int,
Expand Down

0 comments on commit 1c95f85

Please sign in to comment.