@@ -34,85 +34,73 @@ class TurnstileInterceptor(private val targetCookie: String = "_as_turnstile") :
3434 override fun intercept (chain : Interceptor .Chain ): Response {
3535 val originalRequest = chain.request()
3636 val url = originalRequest.url.toString()
37-
38- val domainUrl = " ${originalRequest.url.scheme} ://${originalRequest.url.host} "
3937 val cookieManager = CookieManager .getInstance()
4038
41- var currentCookies = cookieManager.getCookie(domainUrl ) ? : " "
39+ var currentCookies = cookieManager.getCookie(url ) ? : " "
4240 var userAgent = originalRequest.header(" User-Agent" ) ? : " "
4341
42+ var response: Response ? = null
4443 var needsRefresh = false
45- var initialResponse: Response ? = null
4644
47- if (currentCookies.contains(targetCookie)) {
45+ if (! currentCookies.contains(targetCookie)) {
46+ needsRefresh = true
47+ } else {
4848 val requestBuilder = originalRequest.newBuilder()
4949 .header(" Cookie" , currentCookies)
50-
51- initialResponse = chain.proceed(requestBuilder.build())
50+ response = chain.proceed(requestBuilder.build())
5251
53- if (initialResponse .code == 403 || initialResponse .code == 503 ) {
52+ if (response .code == 403 || response .code == 503 ) {
5453 needsRefresh = true
55- initialResponse.close()
56- } else {
57- return initialResponse
54+ response.close()
5855 }
59- } else {
60- needsRefresh = true
6156 }
6257
6358 if (needsRefresh) {
64- val context = AcraApplication .context
65- if (context != null ) {
66- val handler = Handler (Looper .getMainLooper())
67- var webView: WebView ? = null
68-
69- handler.post {
70- val newWebView = WebView (context)
71- webView = newWebView
59+ runBlocking(Dispatchers .Main ) {
60+ val context = AcraApplication .context
61+ if (context != null ) {
62+ val webView = WebView (context)
7263
73- newWebView.settings.apply {
74- javaScriptEnabled = true
75- domStorageEnabled = true
76- userAgentString = userAgent.ifBlank { userAgentString }
64+ webView.settings.javaScriptEnabled = true
65+ webView.settings.domStorageEnabled = true
66+ webView.settings.userAgentString = userAgent.ifBlank { webView.settings.userAgentString }
67+ userAgent = webView.settings.userAgentString
68+
69+ webView.webViewClient = object : WebViewClient () {
70+ override fun onPageFinished (view : WebView ? , url : String? ) {
71+ super .onPageFinished(view, url)
72+ }
7773 }
78- userAgent = newWebView.settings.userAgentString ? : userAgent
79-
80- newWebView.webViewClient = WebViewClient ()
8174
82- cookieManager.setCookie(domainUrl, " $targetCookie =; Max-Age=0" )
83- cookieManager.flush()
75+ cookieManager.setCookie(url, " $targetCookie =; Max-Age=0" )
8476
85- newWebView.loadUrl(url)
86- }
77+ webView.loadUrl(url)
8778
88- var attempts = 0
89- val maxAttempts = 60
90- while (attempts < maxAttempts) {
91- Thread .sleep (1000 )
92- val checkCookies = cookieManager.getCookie(domainUrl ) ? : " "
93-
94- if (checkCookies.contains(targetCookie)) {
95- cookieManager.flush()
96- break
79+ var attempts = 0
80+ val maxAttempts = 30
81+ while (attempts < maxAttempts) {
82+ delay (1000 )
83+ val checkCookies = cookieManager.getCookie(url ) ? : " "
84+ if (checkCookies.contains(targetCookie)) {
85+ break
86+ }
87+ attempts ++
9788 }
98- attempts++
99- }
10089
101- handler.post {
102- webView?.stopLoading()
103- webView?.destroy()
90+ webView.stopLoading()
91+ webView.destroy()
10492 }
10593 }
10694
107- currentCookies = cookieManager.getCookie(domainUrl ) ? : " "
95+ currentCookies = cookieManager.getCookie(url ) ? : " "
10896 val newRequestBuilder = originalRequest.newBuilder()
10997 .header(" User-Agent" , userAgent)
11098 .header(" Cookie" , currentCookies)
11199
112- return chain.proceed(newRequestBuilder.build())
100+ response = chain.proceed(newRequestBuilder.build())
113101 }
114102
115- return initialResponse ? : chain.proceed(originalRequest)
103+ return response ? : chain.proceed(originalRequest)
116104 }
117105}
118106
0 commit comments