Manhwas.net: bypass sucuri (#17093)
* Bypass Sucuri * Use jsoup to find script * Use CookieManager * Use CookieManager
This commit is contained in:
parent
3b91d66b9b
commit
37476be2fe
@ -5,7 +5,7 @@ ext {
|
|||||||
extName = 'Manhwas.net'
|
extName = 'Manhwas.net'
|
||||||
pkgNameSuffix = 'es.manhwasnet'
|
pkgNameSuffix = 'es.manhwasnet'
|
||||||
extClass = '.ManhwasNet'
|
extClass = '.ManhwasNet'
|
||||||
extVersionCode = 6
|
extVersionCode = 7
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.extension.es.manhwasnet
|
package eu.kanade.tachiyomi.extension.es.manhwasnet
|
||||||
|
|
||||||
|
import android.webkit.CookieManager
|
||||||
|
import app.cash.quickjs.QuickJs
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
import eu.kanade.tachiyomi.source.model.Filter
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
@ -7,10 +9,15 @@ import eu.kanade.tachiyomi.source.model.Page
|
|||||||
import eu.kanade.tachiyomi.source.model.SChapter
|
import eu.kanade.tachiyomi.source.model.SChapter
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||||
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
|
import okhttp3.Cookie
|
||||||
|
import okhttp3.CookieJar
|
||||||
|
import okhttp3.HttpUrl
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
import java.io.IOException
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
||||||
class ManhwasNet : ParsedHttpSource() {
|
class ManhwasNet : ParsedHttpSource() {
|
||||||
@ -20,20 +27,47 @@ class ManhwasNet : ParsedHttpSource() {
|
|||||||
override val name: String = "Manhwas.net"
|
override val name: String = "Manhwas.net"
|
||||||
override val supportsLatest: Boolean = true
|
override val supportsLatest: Boolean = true
|
||||||
|
|
||||||
override val client = network.cloudflareClient.newBuilder()
|
private val cookieManager by lazy { CookieManager.getInstance() }
|
||||||
|
|
||||||
|
override val client = network.client.newBuilder()
|
||||||
.addInterceptor { chain ->
|
.addInterceptor { chain ->
|
||||||
val originalRequest = chain.request()
|
val request = chain.request()
|
||||||
val url = originalRequest.url.toString()
|
val url = request.url.toString()
|
||||||
val response = chain.proceed(originalRequest)
|
val response = chain.proceed(request)
|
||||||
if (response.headers["x-sucuri-cache"].isNullOrEmpty() && url.startsWith(baseUrl) && response.headers["x-sucuri-id"] != null) {
|
if (response.headers["x-sucuri-cache"].isNullOrEmpty() && url.startsWith(baseUrl) && response.headers["x-sucuri-id"] != null) {
|
||||||
throw Exception("Sitio protegido - Abra en WebView para desbloquear.")
|
val script = response.asJsoup().selectFirst("script")?.data()
|
||||||
|
if (script != null) {
|
||||||
|
val a = script.split("(r)")[0].dropLast(1) + "r=r.replace('document.cookie','cookie');"
|
||||||
|
QuickJs.create().use {
|
||||||
|
val b = it.evaluate(a) as String
|
||||||
|
val sucuriCookie = it.evaluate(b.replace("location.", "").replace("reload();", "")) as String
|
||||||
|
val cookieName = sucuriCookie.split("=")[0]
|
||||||
|
val cookieValue = sucuriCookie.split("=")[1].replace(";path", "")
|
||||||
|
cookieManager.setCookie(url, "$cookieName=$cookieValue")
|
||||||
|
}
|
||||||
|
val newResponse = chain.proceed(request)
|
||||||
|
if (!newResponse.headers["x-sucuri-cache"].isNullOrEmpty()) return@addInterceptor newResponse
|
||||||
|
}
|
||||||
|
throw IOException("Sitio protegido - Abra en WebView para intentar desbloquear.")
|
||||||
}
|
}
|
||||||
return@addInterceptor response
|
return@addInterceptor response
|
||||||
}
|
}
|
||||||
|
.cookieJar(
|
||||||
|
object : CookieJar {
|
||||||
|
override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) =
|
||||||
|
cookies.filter { it.matches(url) }.forEach {
|
||||||
|
cookieManager.setCookie(url.toString(), it.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun loadForRequest(url: HttpUrl) =
|
||||||
|
cookieManager.getCookie(url.toString())?.split("; ")
|
||||||
|
?.mapNotNull { Cookie.parse(url, it) } ?: emptyList()
|
||||||
|
},
|
||||||
|
)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
override fun headersBuilder() = super.headersBuilder()
|
override fun headersBuilder() = super.headersBuilder()
|
||||||
.set("Referer", "$baseUrl/")
|
.add("Referer", "$baseUrl/")
|
||||||
|
|
||||||
override fun popularMangaRequest(page: Int): Request {
|
override fun popularMangaRequest(page: Int): Request {
|
||||||
val url = "$baseUrl/biblioteca".toHttpUrlOrNull()!!.newBuilder()
|
val url = "$baseUrl/biblioteca".toHttpUrlOrNull()!!.newBuilder()
|
||||||
@ -52,7 +86,7 @@ class ManhwasNet : ParsedHttpSource() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request {
|
override fun latestUpdatesRequest(page: Int): Request {
|
||||||
return GET("$baseUrl/esp")
|
return GET("$baseUrl/esp", headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun latestUpdatesSelector() = popularMangaSelector()
|
override fun latestUpdatesSelector() = popularMangaSelector()
|
||||||
@ -84,7 +118,7 @@ class ManhwasNet : ParsedHttpSource() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
url.addQueryParameter("page", page.toString())
|
url.addQueryParameter("page", page.toString())
|
||||||
return GET(url.build().toString())
|
return GET(url.build().toString(), headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaSelector() = popularMangaSelector()
|
override fun searchMangaSelector() = popularMangaSelector()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user