From eb4c7f00be38a555e984f4d8e5ccb092adf5c868 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Mon, 22 Jan 2024 20:34:43 +0700 Subject: [PATCH] komiktap/id: added sucuriInterceptor (#454) * komiktap/id: added sucuriInterceptor * fix --------- Co-authored-by: ghost --- .../mangathemesia/komiktap/src/Komiktap.kt | 46 +++++++++++++++++-- .../mangathemesia/MangaThemesiaGenerator.kt | 2 +- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/multisrc/overrides/mangathemesia/komiktap/src/Komiktap.kt b/multisrc/overrides/mangathemesia/komiktap/src/Komiktap.kt index 72098236e..8c29f3818 100644 --- a/multisrc/overrides/mangathemesia/komiktap/src/Komiktap.kt +++ b/multisrc/overrides/mangathemesia/komiktap/src/Komiktap.kt @@ -1,11 +1,47 @@ package eu.kanade.tachiyomi.extension.id.komiktap +import app.cash.quickjs.QuickJs import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Cookie +import okhttp3.Interceptor +import okhttp3.Response +import java.io.IOException class Komiktap : MangaThemesia("Komiktap", "https://komiktap.me", "id") { - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) - .build() + override val client = super.client.newBuilder().addInterceptor(::sucuriInterceptor).build() + + // Taken from es/ManhwasNet + private fun sucuriInterceptor(chain: Interceptor.Chain): Response { + val request = chain.request() + val url = request.url + val response = try { + chain.proceed(request) + } catch (e: Exception) { + // Try to clear cookies and retry + client.cookieJar.saveFromResponse(url, emptyList()) + val clearHeaders = request.headers.newBuilder().removeAll("Cookie").build() + chain.proceed(request.newBuilder().headers(clearHeaders).build()) + } + if (response.headers["x-sucuri-cache"].isNullOrEmpty() && response.headers["x-sucuri-id"] != null && url.toString().startsWith(baseUrl)) { + val script = response.use { it.asJsoup() }.selectFirst("script")?.data() + + if (script != null) { + val patchedScript = script.split("(r)")[0].dropLast(1) + "r=r.replace('document.cookie','cookie');" + QuickJs.create().use { + val result = (it.evaluate(patchedScript) as String) + .replace("location.", "") + .replace("reload();", "") + val sucuriCookie = (it.evaluate(result) as String).split("=", limit = 2) + val cookieName = sucuriCookie.first() + val cookieValue = sucuriCookie.last().replace(";path", "") + client.cookieJar.saveFromResponse(url, listOf(Cookie.parse(url, "$cookieName=$cookieValue")!!)) + } + val newResponse = chain.proceed(request) + if (!newResponse.headers["x-sucuri-cache"].isNullOrEmpty()) return newResponse + } + throw IOException("Situs yang dilindungi - Buka di WebView untuk mencoba membuka blokir.") + } + return response + } } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt index 12c2e6887..537eca255 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt @@ -69,7 +69,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { SingleLang("KomikMama", "https://komikmama.co", "id", overrideVersionCode = 1), SingleLang("KomikManhwa", "https://komikmanhwa.me", "id", isNsfw = true), SingleLang("Komiksan", "https://komiksan.link", "id", overrideVersionCode = 2), - SingleLang("Komiktap", "https://komiktap.me", "id", isNsfw = true), + SingleLang("Komiktap", "https://komiktap.me", "id", isNsfw = true, overrideVersionCode = 1), SingleLang("Komiku.com", "https://komiku.com", "id", className = "KomikuCom"), SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans", overrideVersionCode = 1), SingleLang("KumaPoi", "https://kumapoi.info", "id", isNsfw = true, overrideVersionCode = 3),