Skip to content

Commit e076570

Browse files
committed
在不开梯子的裸连状态下允许用户通过网页登录
1 parent 464709c commit e076570

File tree

1 file changed

+59
-2
lines changed

1 file changed

+59
-2
lines changed

app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.kt

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@ import android.view.ViewGroup
2424
import android.webkit.CookieManager
2525
import android.webkit.WebResourceResponse
2626
import android.webkit.WebView
27+
import android.webkit.WebViewClient
2728
import com.acsbendi.requestinspectorwebview.RequestInspectorOptions
2829
import com.acsbendi.requestinspectorwebview.RequestInspectorWebViewClient
2930
import com.acsbendi.requestinspectorwebview.WebViewRequest
3031
import com.acsbendi.requestinspectorwebview.WebViewRequestType
3132
import com.google.firebase.crashlytics.FirebaseCrashlytics
3233
import com.hippo.ehviewer.EhApplication
34+
import com.hippo.ehviewer.Settings
3335
import com.hippo.ehviewer.client.EhCookieStore
3436
import com.hippo.ehviewer.client.EhRequestBuilder
3537
import com.hippo.ehviewer.client.EhUrl
@@ -79,7 +81,12 @@ class WebViewSignInScene : SolidScene() {
7981
mWebView = WebView(context!!)
8082
val webSettings = mWebView!!.settings
8183
webSettings.javaScriptEnabled = true
82-
mWebView!!.webViewClient = LoginWebViewClient(mWebView!!)
84+
if (Settings.getDF()){
85+
mWebView!!.webViewClient = LoginWebViewClientSNI(mWebView!!)
86+
}else{
87+
mWebView!!.webViewClient = LoginWebViewClient()
88+
}
89+
8390
// mWebView.setWebViewClient(new UConfigActivity.UConfigWebViewClient(webView));
8491
// mWebView.setWebChromeClient(new DialogWebChromeClient(this));
8592
mWebView!!.loadUrl(EhUrl.URL_SIGN_IN)
@@ -95,7 +102,7 @@ class WebViewSignInScene : SolidScene() {
95102
}
96103
}
97104

98-
private inner class LoginWebViewClient : RequestInspectorWebViewClient {
105+
private inner class LoginWebViewClientSNI : RequestInspectorWebViewClient {
99106
constructor(webView: WebView, options: RequestInspectorOptions) : super(webView, options)
100107

101108
constructor(webView: WebView) : super(webView)
@@ -240,4 +247,54 @@ class WebViewSignInScene : SolidScene() {
240247
)
241248
}
242249
}
250+
251+
private inner class LoginWebViewClient : WebViewClient() {
252+
fun parseCookies(url: HttpUrl, cookieStrings: String?): List<Cookie> {
253+
if (cookieStrings == null) {
254+
return emptyList()
255+
}
256+
257+
var cookies: MutableList<Cookie>? = null
258+
val pieces =
259+
cookieStrings.split(";".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
260+
for (piece in pieces) {
261+
val cookie = Cookie.parse(url, piece) ?: continue
262+
if (cookies == null) {
263+
cookies = java.util.ArrayList()
264+
}
265+
cookies.add(cookie)
266+
}
267+
268+
return cookies ?: emptyList()
269+
}
270+
271+
fun addCookie(context: Context, domain: String?, cookie: Cookie) {
272+
EhApplication.getEhCookieStore(context)
273+
.addCookie(EhCookieStore.newCookie(cookie, domain, true, true, true))
274+
}
275+
276+
override fun onPageFinished(view: WebView, url: String) {
277+
val context: Context = ehContext ?: return
278+
val httpUrl = HttpUrl.parse(url) ?: return
279+
280+
val cookieString = CookieManager.getInstance().getCookie(EhUrl.HOST_E)
281+
val cookies = parseCookies(httpUrl, cookieString)
282+
var getId = false
283+
var getHash = false
284+
for (cookie in cookies) {
285+
if (EhCookieStore.KEY_IPD_MEMBER_ID == cookie.name()) {
286+
getId = true
287+
} else if (EhCookieStore.KEY_IPD_PASS_HASH == cookie.name()) {
288+
getHash = true
289+
}
290+
addCookie(context, EhUrl.DOMAIN_EX, cookie)
291+
addCookie(context, EhUrl.DOMAIN_E, cookie)
292+
}
293+
294+
if (getId && getHash) {
295+
setResult(RESULT_OK, null)
296+
finish()
297+
}
298+
}
299+
}
243300
}

0 commit comments

Comments
 (0)