Files
New-planet-app/app/src/main/java/com/novayaplaneta/data/local/TokenManager.kt

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
}
}