sflix, dopebox: final fix for token (#349)

* test

* Update DopeBox.kt

* finaly fix
This commit is contained in:
Ahmed gamal
2022-02-19 00:09:59 +02:00
committed by GitHub
parent 82bcc204fd
commit 8b15f33c24
4 changed files with 47 additions and 88 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'DopeBox' extName = 'DopeBox'
pkgNameSuffix = 'en.dopebox' pkgNameSuffix = 'en.dopebox'
extClass = '.DopeBox' extClass = '.DopeBox'
extVersionCode = 1 extVersionCode = 2
libVersion = '12' libVersion = '12'
} }

View File

@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.animeextension.en.dopebox
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.net.Uri
import android.util.Base64
import android.util.Log import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen 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.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.FormBody
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import org.jsoup.Jsoup
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -29,7 +30,7 @@ import java.lang.Exception
class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() { class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "DopeBox (experimental)" override val name = "DopeBox"
override val baseUrl = "https://dopebox.to" override val baseUrl = "https://dopebox.to"
@ -39,7 +40,7 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val client: OkHttpClient = network.cloudflareClient override val client: OkHttpClient = network.cloudflareClient
private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.." // private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
private val preferences: SharedPreferences by lazy { private val preferences: SharedPreferences by lazy {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
@ -132,9 +133,9 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val document = response.asJsoup() val document = response.asJsoup()
// referers // referers
val referer1 = response.request.url.toString() 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 referer = response.request.url.encodedPath
val newHeaders = Headers.headersOf("referer", referer) val newHeaders = Headers.headersOf("Referer", referer)
// get embed id // get embed id
val getVidID = document.selectFirst("a").attr("data-id") val getVidID = document.selectFirst("a").attr("data-id")
@ -147,45 +148,24 @@ class DopeBox : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?") val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
Log.i("videoEmbedId", "$videoEmbedUrlId") Log.i("videoEmbedId", "$videoEmbedUrlId")
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup() val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
Log.i("lol4", "$callVideolink") val uri = Uri.parse(getVideoEmbed)
val callVideolink2 = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().body!!.string() val domain = (Base64.encodeToString((uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), Base64.NO_PADDING) + ".").replace("\n", "")
// get Token vals val soup = Jsoup.connect(getVideoEmbed).referrer("https://dopebox.to/").get().toString().replace("\n", "")
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 pageData = FormBody.Builder() val key = soup.substringAfter("var recaptchaSiteKey = '").substringBefore("',")
.add("v", "$getAnchorVVal") val number = soup.substringAfter("recaptchaNumber = '").substringBefore("';")
.add("reason", "q")
.add("k", "$getRecaptchaSiteKey")
.add("c", "$rtoken")
.add("sa", "")
.add("co", "$domain")
.build()
val reloadTokenUrl = "https://www.google.com/recaptcha/api2/reload?k=$getRecaptchaSiteKey" 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")
Log.i("loll", reloadTokenUrl) 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 reloadHeaders = headers.newBuilder() val token = Jsoup.connect("https://www.google.com/recaptcha/api2/reload?k=$key").ignoreContentType(true)
.set("Referer2", "$anchorLink") .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() .build()
val callreloadToken = client.newCall(POST(reloadTokenUrl, reloadHeaders, pageData)).execute().asJsoup() val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
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))
.execute().asJsoup() .execute().asJsoup()
Log.i("iframere", "$iframeResponse") Log.i("iframere", "$iframeResponse")

View File

@ -5,7 +5,7 @@ ext {
extName = 'Sflix' extName = 'Sflix'
pkgNameSuffix = 'en.sflix' pkgNameSuffix = 'en.sflix'
extClass = '.SFlix' extClass = '.SFlix'
extVersionCode = 1 extVersionCode = 2
libVersion = '12' libVersion = '12'
} }

View File

@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.animeextension.en.sflix
import android.app.Application import android.app.Application
import android.content.SharedPreferences import android.content.SharedPreferences
import android.net.Uri
import android.util.Base64
import android.util.Log import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen 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.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.FormBody
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import org.jsoup.Jsoup
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -29,7 +30,7 @@ import java.lang.Exception
class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "Sflix (experimental)" override val name = "Sflix"
override val baseUrl = "https://sflix.to" override val baseUrl = "https://sflix.to"
@ -39,7 +40,7 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val client: OkHttpClient = network.cloudflareClient override val client: OkHttpClient = network.cloudflareClient
private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.." //private val domain = "aHR0cHM6Ly9yYWJiaXRzdHJlYW0ubmV0OjQ0Mw.."
private val preferences: SharedPreferences by lazy { private val preferences: SharedPreferences by lazy {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000) Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
@ -132,14 +133,14 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val document = response.asJsoup() val document = response.asJsoup()
// referers // referers
val referer1 = response.request.url.toString() 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 referer = response.request.url.encodedPath
val newHeaders = Headers.headersOf("referer", referer) val newHeaders = Headers.headersOf("Referer", referer)
// get embed id // get embed id
val getVidID = document.selectFirst("a").attr("data-id") val getVidID = document.selectFirst("a").attr("data-id")
Log.i("lol2", "$getVidID") 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 // streamrapid URL
val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"") val getVideoEmbed = getVidApi.text().substringAfter("link\":\"").substringBefore("\"")
@ -147,46 +148,24 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?") val videoEmbedUrlId = getVideoEmbed.substringAfterLast("/").substringBefore("?")
Log.i("videoEmbedId", "$videoEmbedUrlId") Log.i("videoEmbedId", "$videoEmbedUrlId")
val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup() val callVideolink = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().asJsoup()
Log.i("lol4", "$callVideolink") val uri = Uri.parse(getVideoEmbed)
val callVideolink2 = client.newCall(GET(getVideoEmbed, refererHeaders)).execute().body!!.string() 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 key = soup.substringAfter("var recaptchaSiteKey = '").substringBefore("',")
val getRecaptchaRenderLink = callVideolink.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src") val number = soup.substringAfter("recaptchaNumber = '").substringBefore("';")
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 pageData = FormBody.Builder() 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")
.add("v", "$getAnchorVVal") 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")
.add("reason", "q") val token = Jsoup.connect("https://www.google.com/recaptcha/api2/reload?k=$key").ignoreContentType(true)
.add("k", "$getRecaptchaSiteKey") .data("v", vToken).data("k", key).data("c", recapToken).data("co", domain).data("sa", "").data("reason", "q")
.add("c", "$rtoken") .post().toString().replace("\n", "").substringAfter("rresp\",\"").substringBefore("\"")
.add("sa", "")
.add("co", "$domain") 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() .build()
val iframeResponse = client.newCall(GET(jsonLink, reloadHeaderss))
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))
.execute().asJsoup() .execute().asJsoup()
Log.i("iframere", "$iframeResponse") Log.i("iframere", "$iframeResponse")