Skip to content

Commit e3173d9

Browse files
committed
fix login
1 parent fbe0c7b commit e3173d9

1 file changed

Lines changed: 9 additions & 51 deletions

File tree

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dev.dimension.flare.ui.screen.serviceselect
22

3-
import android.net.Uri
43
import android.view.ViewGroup.LayoutParams
54
import android.webkit.CookieManager
65
import android.webkit.WebSettings
@@ -20,16 +19,13 @@ import dev.dimension.flare.ui.component.FlareScaffold
2019
import kotlinx.coroutines.delay
2120
import kotlin.time.Duration.Companion.seconds
2221

23-
private val USER_AGENT_HEADERS =
22+
private val userAgent =
2423
mapOf(
25-
"User-Agent" to "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3",
24+
"user-agent" to "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3",
2625
"Pragma" to "no-cache",
2726
"Cache-Control" to "no-cache",
2827
)
2928

30-
private const val ANDROID_USER_AGENT =
31-
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3"
32-
3329
@Composable
3430
internal fun WebCookieLoginScreen(
3531
url: String,
@@ -38,16 +34,12 @@ internal fun WebCookieLoginScreen(
3834
) {
3935
val webViewState = rememberWebViewState(url)
4036
LaunchedEffect(url) {
41-
val cookieManager = CookieManager.getInstance()
4237
while (true) {
4338
webViewState.lastLoadedUrl?.let { loadedUrl ->
4439
val cookies =
45-
cookieManager.getCookieHeaderForUrls(
46-
cookieLookupUrls(
47-
loadedUrl = loadedUrl,
48-
originalUrl = url,
49-
),
50-
)
40+
CookieManager
41+
.getInstance()
42+
.getCookie(loadedUrl)
5143
if (callback(cookies)) {
5244
onBack()
5345
break
@@ -70,51 +62,17 @@ internal fun WebCookieLoginScreen(
7062
.background(MaterialTheme.colorScheme.background)
7163
.padding(it)
7264
.fillMaxSize(),
73-
onCreated = { webView ->
65+
onCreated = {
7466
WebStorage.getInstance().deleteAllData()
75-
val cookieManager = CookieManager.getInstance()
76-
cookieManager.setAcceptCookie(true)
77-
cookieManager.setAcceptThirdPartyCookies(webView, true)
78-
with(webView.settings) {
79-
userAgentString = ANDROID_USER_AGENT
67+
CookieManager.getInstance().removeAllCookies(null)
68+
with(it.settings) {
69+
userAgentString = userAgent.toString()
8070
javaScriptEnabled = true
8171
domStorageEnabled = true
8272
javaScriptCanOpenWindowsAutomatically = false
8373
cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
8474
}
85-
cookieManager.removeAllCookies {
86-
cookieManager.flush()
87-
webView.loadUrl(url, USER_AGENT_HEADERS)
88-
}
8975
},
9076
)
9177
}
9278
}
93-
94-
private fun cookieLookupUrls(
95-
loadedUrl: String,
96-
originalUrl: String,
97-
): List<String> {
98-
val loadedHost = loadedUrl.hostOrNull()
99-
val originalHost = originalUrl.hostOrNull()
100-
return if (loadedHost != null && originalHost != null && loadedHost.equals(originalHost, ignoreCase = true)) {
101-
listOf(loadedUrl)
102-
} else {
103-
listOf(loadedUrl, originalUrl)
104-
}
105-
}
106-
107-
private fun CookieManager.getCookieHeaderForUrls(urls: List<String>): String? =
108-
urls
109-
.distinct()
110-
.flatMap { url ->
111-
getCookie(url)
112-
?.split(";")
113-
.orEmpty()
114-
}.map { it.trim() }
115-
.filter { it.isNotEmpty() }
116-
.distinct()
117-
.joinToString("; ")
118-
.takeIf { it.isNotBlank() }
119-
120-
private fun String.hostOrNull(): String? = runCatching { Uri.parse(this).host }.getOrNull()

0 commit comments

Comments
 (0)