From 21c00bbe539b0b988cc5e479e3d71efa714bce19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 24 Mar 2023 21:26:46 +0100 Subject: [PATCH] [API] Fix detecting session cookies. Remove expired cookies. --- .../edziennik/network/cookie/DumbCookie.kt | 11 ++++---- .../edziennik/network/cookie/DumbCookieJar.kt | 28 +++++++++++++++++-- .../edziennik/ui/debug/LabPageFragment.kt | 4 +++ app/src/main/res/layout/lab_fragment.xml | 8 ++++++ 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookie.kt b/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookie.kt index 53665332..ecd513b0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookie.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookie.kt @@ -33,7 +33,10 @@ class DumbCookie(var cookie: Cookie) { cookie = Cookie.Builder() .name(cookie.name()) .value(cookie.value()) - .expiresAt(cookie.expiresAt()) + .also { + if (cookie.persistent()) + it.expiresAt(cookie.expiresAt()) + } .domain(cookie.domain()) .build() } @@ -58,8 +61,6 @@ class DumbCookie(var cookie: Cookie) { return hash } - fun serialize(): Pair { - val key = cookie.domain() + "|" + cookie.name() - return key to cookie.toString() - } + fun serializeKey() = cookie.domain() + "|" + cookie.name() + fun serialize() = serializeKey() to cookie.toString() } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookieJar.kt b/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookieJar.kt index 3bb9e0e5..945e16ea 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookieJar.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/network/cookie/DumbCookieJar.kt @@ -30,10 +30,20 @@ class DumbCookieJar( private val sessionCookies = mutableSetOf() init { + val toRemove = mutableListOf() prefs.all.forEach { (key, value) -> if (value !is String) return@forEach - sessionCookies.add(DumbCookie.deserialize(key, value) ?: return@forEach) + val dc = DumbCookie.deserialize(key, value) ?: return@forEach + if (dc.cookie.expiresAt() > System.currentTimeMillis()) + sessionCookies.add(dc) + else + toRemove.add(key) + } + prefs.edit { + for (key in toRemove) { + remove(key) + } } } @@ -48,7 +58,14 @@ class DumbCookieJar( } } private fun delete(vararg toRemove: DumbCookie) { - sessionCookies.removeAll(toRemove) + sessionCookies.removeAll(toRemove.toSet()) + prefs.edit { + for (dc in toRemove) { + val key = dc.serializeKey() + if (prefs.contains(key)) + remove(key) + } + } } override fun saveFromResponse(url: HttpUrl, cookies: MutableList) { @@ -114,4 +131,11 @@ class DumbCookieJar( } delete(*toRemove.toTypedArray()) } + + fun clearAllDomains() { + sessionCookies.clear() + prefs.edit { + clear() + } + } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabPageFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabPageFragment.kt index 209d8e82..2e40eefc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabPageFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabPageFragment.kt @@ -179,6 +179,10 @@ class LabPageFragment : LazyFragment(), CoroutineScope { return@setOnChangeListener true } + b.clearCookies.onClick { + app.cookieJar.clearAllDomains() + } + val colorSecondary = android.R.attr.textColorSecondary.resolveAttr(activity) startCoroutineTimer(500L, 300L) { val text = app.cookieJar.getAllDomains() diff --git a/app/src/main/res/layout/lab_fragment.xml b/app/src/main/res/layout/lab_fragment.xml index e41a66f2..af55e6f0 100644 --- a/app/src/main/res/layout/lab_fragment.xml +++ b/app/src/main/res/layout/lab_fragment.xml @@ -107,6 +107,14 @@ android:text="Reset event types" android:textAllCaps="false" /> +