61 lines
1.9 KiB
Kotlin
61 lines
1.9 KiB
Kotlin
package com.novayaplaneta.data.local
|
|
|
|
import android.content.Context
|
|
import androidx.datastore.core.DataStore
|
|
import androidx.datastore.preferences.core.Preferences
|
|
import androidx.datastore.preferences.core.edit
|
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
|
import androidx.datastore.preferences.preferencesDataStore
|
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
import kotlinx.coroutines.flow.Flow
|
|
import kotlinx.coroutines.flow.first
|
|
import kotlinx.coroutines.flow.map
|
|
import javax.inject.Inject
|
|
import javax.inject.Singleton
|
|
|
|
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "auth_preferences")
|
|
|
|
@Singleton
|
|
class TokenManager @Inject constructor(
|
|
@ApplicationContext private val context: Context
|
|
) {
|
|
private val accessTokenKey = stringPreferencesKey("access_token")
|
|
private val refreshTokenKey = stringPreferencesKey("refresh_token")
|
|
|
|
val accessToken: Flow<String?> = context.dataStore.data.map { preferences ->
|
|
preferences[accessTokenKey]
|
|
}
|
|
|
|
val refreshToken: Flow<String?> = context.dataStore.data.map { preferences ->
|
|
preferences[refreshTokenKey]
|
|
}
|
|
|
|
suspend fun getAccessToken(): String? {
|
|
return accessToken.first()
|
|
}
|
|
|
|
suspend fun getRefreshToken(): String? {
|
|
return refreshToken.first()
|
|
}
|
|
|
|
suspend fun saveTokens(accessToken: String, refreshToken: String) {
|
|
context.dataStore.edit { preferences ->
|
|
preferences[accessTokenKey] = accessToken
|
|
preferences[refreshTokenKey] = refreshToken
|
|
}
|
|
}
|
|
|
|
suspend fun clearTokens() {
|
|
context.dataStore.edit { preferences ->
|
|
preferences.remove(accessTokenKey)
|
|
preferences.remove(refreshTokenKey)
|
|
}
|
|
}
|
|
|
|
suspend fun isAuthenticated(): Boolean {
|
|
return getAccessToken() != null
|
|
}
|
|
}
|
|
|
|
|