Код: Выделить всё
class CookieRepository (private val dataStore : DataStore) {
private companion object {
val CSRF = stringPreferencesKey("csrf")
val SESSION = stringPreferencesKey("session")
}
val TAG = "COOKIE_REPOSITORY"
suspend fun saveCsrf(csrfToken : String) {
dataStore.edit { preferences -> preferences[CSRF] = csrfToken }
}
suspend fun saveSession(sessionToken : String) {
dataStore.edit {preferences -> preferences[SESSION] = sessionToken}
}
val csrfToken : Flow = dataStore.data
.catch {
if(it is IOException) {
Log.e(TAG, "Error reading preferences.", it)
emit(emptyPreferences())
} else {
throw it
}
}
.map{ preferences -> preferences[CSRF] ?: "No Cookie" }
val sessionToken : Flow = dataStore.data
.catch {
if(it is IOException) {
Log.e(TAG, "Error reading preferences.", it)
emit(emptyPreferences())
} else {
throw it
}
}
.map{ preferences -> preferences[SESSION] ?: "No Cookie" }
suspend fun updateCookiesFromHeaders(headers : Headers) {
for (header in headers) {
if (header.first == "Set-Cookie") {
val name = header.second.split("=")[0]
val value = header.second.split("=")[1].split(";")[0]
if (name == "csrftoken") {
saveCsrf(value)
}
else if (name == "sessionid") {
saveSession(value)
}
}
}
}
suspend fun getCookiesAsString() : String {
var cookieString = ""
csrfToken.collect { if (it != "No Cookie") {cookieString = cookieString.plus("csrftoken=$it;")} }
sessionToken.collect { if (it != "No Cookie") {cookieString = cookieString.plus("sessionid=$it;")} }
return cookieString.dropLast(1)
}
suspend fun getCsrfToken() : String {
var token = ""
csrfToken.collect {token = it}
return token
}
}
Код: Выделить всё
getCookiesAsStringПодробнее: https://stackoverflow.com/questions/799 ... on-android