sflix, dopebox: final fix for token (#349)
* test * Update DopeBox.kt * finaly fix
This commit is contained in:
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'DopeBox'
|
||||
pkgNameSuffix = 'en.dopebox'
|
||||
extClass = '.DopeBox'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
libVersion = '12'
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.animeextension.en.dopebox
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.util.Base64
|
||||
import android.util.Log
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
@ -13,14 +15,13 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.Jsoup
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import uy.kohesive.injekt.Injekt
|
||||
@ -29,7 +30,7 @@ import java.lang.Exception
|
||||
|
||||
class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val name = "DopeBox (experimental)"
|
||||
override val name = "DopeBox"
|
||||
|
||||
override val baseUrl = "https://dopebox.to"
|
||||
|
||||
@ -39,7 +40,7 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val client: OkHttpClient = network.cloudflareClient
|
||||
|
||||
private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
||||
// private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
@ -132,9 +133,9 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val document = response.asJsoup()
|
||||
// referers
|
||||
val referer1 = response.request.url.toString()
|
||||
val refererHeaders = Headers.headersOf("referer", referer1)
|
||||
val refererHeaders = Headers.headersOf("Referer", referer1)
|
||||
val referer = response.request.url.encodedPath
|
||||
val newHeaders = Headers.headersOf("referer", referer)
|
||||
val newHeaders = Headers.headersOf("Referer", referer)
|
||||
|
||||
// get embed id
|
||||
val getVidID = document.selectFirst("a").attr("data-id")
|
||||
@ -147,45 +148,24 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
||||
Log.i("videoEmbedId", "$videoEmbedUrlId")
|
||||
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
||||
Log.i("lol4", "$callVideolink")
|
||||
val callVideolink2 = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().body!!.string()
|
||||
// get Token vals
|
||||
val getRecaptchaRenderLink = callVideolink.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src")
|
||||
Log.i("lol5", getRecaptchaRenderLink)
|
||||
val getRecaptchaRenderNum = callVideolink2.substringAfter("recaptchaNumber = '").substringBeforeLast("'")
|
||||
Log.i("recapchaNum", "$getRecaptchaRenderNum")
|
||||
val callReacapchaRenderLink = client.newCall(GET(getRecaptchaRenderLink)).execute().asJsoup()
|
||||
Log.i("lol6", "$callReacapchaRenderLink")
|
||||
val getAnchorVVal = callReacapchaRenderLink.text().substringAfter("releases/").substringBefore("/")
|
||||
val getRecaptchaSiteKey = callVideolink.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src").substringAfterLast("=")
|
||||
Log.i("lol7", getRecaptchaSiteKey)
|
||||
val anchorLink = "https://www.google.com/recaptcha/api2/anchor?ar=1&k=$getRecaptchaSiteKey&co=$domain&hl=en&v=$getAnchorVVal&size=invisible&cb=123456789"
|
||||
Log.i("anchorLik", "$anchorLink")
|
||||
val callAnchor = client.newCall(GET(anchorLink, newHeaders)).execute().asJsoup()
|
||||
Log.i("lolll", "$callAnchor")
|
||||
val rtoken = callAnchor.select("input#recaptcha-token").attr("value")
|
||||
Log.i("Retoken", rtoken)
|
||||
val uri = Uri.parse(getVideoEmbed)
|
||||
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
||||
val soup = Jsoup.connect(getVideoEmbed).referrer("https://dopebox.to/").get().toString().replace("\n", "")
|
||||
|
||||
val pageData = FormBody.Builder()
|
||||
.add("v", "$getAnchorVVal")
|
||||
.add("reason", "q")
|
||||
.add("k", "$getRecaptchaSiteKey")
|
||||
.add("c", "$rtoken")
|
||||
.add("sa", "")
|
||||
.add("co", "$domain")
|
||||
.build()
|
||||
val key = soup.substringAfter("var recaptchaSiteKey = '").substringBefore("',")
|
||||
val number = soup.substringAfter("recaptchaNumber = '").substringBefore("';")
|
||||
|
||||
val reloadTokenUrl = "https://www.google.com/recaptcha/api2/reload?k=$getRecaptchaSiteKey"
|
||||
Log.i("loll", reloadTokenUrl)
|
||||
val reloadHeaders = headers.newBuilder()
|
||||
.set("Referer2", "$anchorLink")
|
||||
val vToken = Jsoup.connect("https://www.google.com/recaptcha/api.js?render=$key").referrer("https://rabbitstream.net/").get().toString().replace("\n", "").substringAfter("/releases/").substringBefore("/recaptcha")
|
||||
val recapToken = Jsoup.connect("https://www.google.com/recaptcha/api2/anchor?ar=1&hl=en&size=invisible&cb=kr60249sk&k=$key&co=$domain&v=$vToken").get().selectFirst("#recaptcha-token")?.attr("value")
|
||||
val token = Jsoup.connect("https://www.google.com/recaptcha/api2/reload?k=$key").ignoreContentType(true)
|
||||
.data("v", vToken).data("k", key).data("c", recapToken).data("co", domain).data("sa", "").data("reason", "q")
|
||||
.post().toString().replace("\n", "").substringAfter("rresp\",\"").substringBefore("\"")
|
||||
|
||||
val jsonLink = "https://rabbitstream.net/ajax/embed-4/getSources?id=$videoEmbedUrlId&_token=$token&_number=$number&sId=test"
|
||||
val reloadHeaderss = headers.newBuilder()
|
||||
.set("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
val callreloadToken = client.newCall(POST(reloadTokenUrl, reloadHeaders, pageData)).execute().asJsoup()
|
||||
Log.i("lol9", "$callreloadToken")
|
||||
val get1Token = callreloadToken.text().substringAfter("rresp\",\"").substringBefore("\"")
|
||||
Log.i("lol10", get1Token)
|
||||
Log.i("m3u8fi", "https://rabbitstream.net/ajax/embed-4/getSources?id=$videoEmbedUrlId&_token=$get1Token&_number=$getRecaptchaRenderNum")
|
||||
val iframeResponse = client.newCall(GET("https://rabbitstream.net/ajax/embed-5/getSources?id=$videoEmbedUrlId&_token=$get1Token&_number=$getRecaptchaRenderNum", newHeaders))
|
||||
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
||||
.execute().asJsoup()
|
||||
Log.i("iframere", "$iframeResponse")
|
||||
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Sflix'
|
||||
pkgNameSuffix = 'en.sflix'
|
||||
extClass = '.SFlix'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
libVersion = '12'
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.animeextension.en.sflix
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.util.Base64
|
||||
import android.util.Log
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
@ -13,14 +15,13 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.Jsoup
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import uy.kohesive.injekt.Injekt
|
||||
@ -29,7 +30,7 @@ import java.lang.Exception
|
||||
|
||||
class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val name = "Sflix (experimental)"
|
||||
override val name = "Sflix"
|
||||
|
||||
override val baseUrl = "https://sflix.to"
|
||||
|
||||
@ -39,7 +40,7 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override val client: OkHttpClient = network.cloudflareClient
|
||||
|
||||
private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
||||
//private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
@ -132,14 +133,14 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val document = response.asJsoup()
|
||||
// referers
|
||||
val referer1 = response.request.url.toString()
|
||||
val refererHeaders = Headers.headersOf("referer", referer1)
|
||||
val refererHeaders = Headers.headersOf("Referer", referer1)
|
||||
val referer = response.request.url.encodedPath
|
||||
val newHeaders = Headers.headersOf("referer", referer)
|
||||
val newHeaders = Headers.headersOf("Referer", referer)
|
||||
|
||||
// get embed id
|
||||
val getVidID = document.selectFirst("a").attr("data-id")
|
||||
Log.i("lol2", "$getVidID")
|
||||
val getVidApi = client.newCall(GET("https://sflix.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
||||
val getVidApi = client.newCall(GET("https://dopebox.to/ajax/get_link/" + getVidID)).execute().asJsoup()
|
||||
|
||||
// streamrapid URL
|
||||
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
|
||||
@ -147,46 +148,24 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
|
||||
Log.i("videoEmbedId", "$videoEmbedUrlId")
|
||||
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
|
||||
Log.i("lol4", "$callVideolink")
|
||||
val callVideolink2 = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().body!!.string()
|
||||
val uri = Uri.parse(getVideoEmbed)
|
||||
val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
|
||||
val soup = Jsoup.connect(getVideoEmbed).referrer("https://dopebox.to/").get().toString().replace("\n", "")
|
||||
|
||||
// get Token vals
|
||||
val getRecaptchaRenderLink = callVideolink.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src")
|
||||
Log.i("lol5", getRecaptchaRenderLink)
|
||||
val getRecaptchaRenderNum = callVideolink2.substringAfter("recaptchaNumber = '").substringBeforeLast("'")
|
||||
Log.i("recapchaNum", "$getRecaptchaRenderNum")
|
||||
val callReacapchaRenderLink = client.newCall(GET(getRecaptchaRenderLink)).execute().asJsoup()
|
||||
Log.i("lol6", "$callReacapchaRenderLink")
|
||||
val getAnchorVVal = callReacapchaRenderLink.text().substringAfter("releases/").substringBefore("/")
|
||||
val getRecaptchaSiteKey = callVideolink.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src").substringAfterLast("=")
|
||||
Log.i("lol7", getRecaptchaSiteKey)
|
||||
val anchorLink = "https://www.google.com/recaptcha/api2/anchor?ar=1&k=$getRecaptchaSiteKey&co=$domain&hl=en&v=$getAnchorVVal&size=invisible&cb=123456789"
|
||||
Log.i("anchorLik", "$anchorLink")
|
||||
val callAnchor = client.newCall(GET(anchorLink, newHeaders)).execute().asJsoup()
|
||||
Log.i("lolll", "$callAnchor")
|
||||
val rtoken = callAnchor.select("input#recaptcha-token").attr("value")
|
||||
Log.i("Retoken", rtoken)
|
||||
val key = soup.substringAfter("var recaptchaSiteKey = '").substringBefore("',")
|
||||
val number = soup.substringAfter("recaptchaNumber = '").substringBefore("';")
|
||||
|
||||
val pageData = FormBody.Builder()
|
||||
.add("v", "$getAnchorVVal")
|
||||
.add("reason", "q")
|
||||
.add("k", "$getRecaptchaSiteKey")
|
||||
.add("c", "$rtoken")
|
||||
.add("sa", "")
|
||||
.add("co", "$domain")
|
||||
val vToken = Jsoup.connect("https://www.google.com/recaptcha/api.js?render=$key").referrer("https://rabbitstream.net/").get().toString().replace("\n", "").substringAfter("/releases/").substringBefore("/recaptcha")
|
||||
val recapToken = Jsoup.connect("https://www.google.com/recaptcha/api2/anchor?ar=1&hl=en&size=invisible&cb=kr60249sk&k=$key&co=$domain&v=$vToken").get().selectFirst("#recaptcha-token")?.attr("value")
|
||||
val token = Jsoup.connect("https://www.google.com/recaptcha/api2/reload?k=$key").ignoreContentType(true)
|
||||
.data("v", vToken).data("k", key).data("c", recapToken).data("co", domain).data("sa", "").data("reason", "q")
|
||||
.post().toString().replace("\n", "").substringAfter("rresp\",\"").substringBefore("\"")
|
||||
|
||||
val jsonLink = "https://rabbitstream.net/ajax/embed-4/getSources?id=$videoEmbedUrlId&_token=$token&_number=$number&sId=test"
|
||||
val reloadHeaderss = headers.newBuilder()
|
||||
.set("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
|
||||
val reloadTokenUrl = "https://www.google.com/recaptcha/api2/reload?k=$getRecaptchaSiteKey"
|
||||
Log.i("loll", reloadTokenUrl)
|
||||
val reloadHeaders = headers.newBuilder()
|
||||
.set("Referer2", "$anchorLink")
|
||||
.build()
|
||||
val callreloadToken = client.newCall(POST(reloadTokenUrl, reloadHeaders, pageData)).execute().asJsoup()
|
||||
Log.i("lol9", "$callreloadToken")
|
||||
val get1Token = callreloadToken.text().substringAfter("rresp\",\"").substringBefore("\"")
|
||||
Log.i("lol10", get1Token)
|
||||
Log.i("m3u8fi", "https://rabbitstream.net/ajax/embed-4/getSources?id=$videoEmbedUrlId&_token=$get1Token&_number=$getRecaptchaRenderNum")
|
||||
val iframeResponse = client.newCall(GET("https://rabbitstream.net/ajax/embed-5/getSources?id=$videoEmbedUrlId&_token=$get1Token&_number=$getRecaptchaRenderNum", newHeaders))
|
||||
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
|
||||
.execute().asJsoup()
|
||||
Log.i("iframere", "$iframeResponse")
|
||||
|
||||
|
Reference in New Issue
Block a user