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'
|
extName = 'DopeBox'
|
||||||
pkgNameSuffix = 'en.dopebox'
|
pkgNameSuffix = 'en.dopebox'
|
||||||
extClass = '.DopeBox'
|
extClass = '.DopeBox'
|
||||||
extVersionCode = 1
|
extVersionCode = 2
|
||||||
libVersion = '12'
|
libVersion = '12'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user