Files
aniyomi-extensions-backup/multisrc/overrides/animestream/asyaanimeleri/src/ShittyProtectionInterceptor.kt
2023-09-03 12:44:05 +02:00

74 lines
2.5 KiB
Kotlin

package eu.kanade.tachiyomi.animeextension.tr.asyaanimeleri
import app.cash.quickjs.QuickJs
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Cookie
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import java.io.IOException
class ShittyProtectionInterceptor(private val client: OkHttpClient) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
// ignore non-protected requests
if (response.code != 202) return response
return try {
chain.proceed(bypassProtection(request, response))
} catch (e: Throwable) {
// Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that
// we don't crash the entire app
e.printStackTrace()
throw IOException(e)
}
}
private fun bypassProtection(request: Request, response: Response): Request {
val doc = response.use { it.asJsoup() }
val script = doc.selectFirst("script:containsData(slowAES)")!!.data()
val slowAES = doc.selectFirst("script[src*=min.js]")!!.attr("abs:src").let { url ->
client.newCall(GET(url)).execute().use { it.body.string() }
}
val patchedScript = slowAES + "\n" + ADDITIONAL_FUNCTIONS + script
.replace("document.cookie=", "")
.replace("location.href", "// ")
val cookieString = QuickJs.create().use {
it.evaluate(patchedScript)?.toString()
}!!
val cookie = Cookie.parse(request.url, cookieString)!!
client.cookieJar.saveFromResponse(request.url, listOf(cookie))
val headers = request.headers.newBuilder()
.add("Cookie", cookie.toString())
.build()
return GET(request.url.toString(), headers)
}
companion object {
private val ADDITIONAL_FUNCTIONS get() = """
// QJS doesnt have atob(b64dec) >:(
atob = function(s) {
var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for(i=0;i<64;i++){e[A.charAt(i)]=i;}
for(x=0;x<L;x++){
c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
}
return r;
};
""".trimIndent()
}
}