From 11981cd25efdb742c5d83ab8528885bc9eae838f Mon Sep 17 00:00:00 2001 From: Alessandro Jean Date: Thu, 17 Feb 2022 11:35:52 -0300 Subject: [PATCH] Remove TOPTOON+ due to cat-and-mouse game (#10851) * Remove TOPTOON+ due to cat-and-mouse game. * Add the source to the autocloser. --- .github/workflows/issue_closer.yml | 2 +- src/en/toptoonplus/AndroidManifest.xml | 2 - src/en/toptoonplus/README.md | 50 --- src/en/toptoonplus/build.gradle | 18 - .../res/mipmap-hdpi/ic_launcher.png | Bin 2890 -> 0 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 1557 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 3851 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 7299 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 10691 -> 0 bytes src/en/toptoonplus/res/web_hi_res_512.png | Bin 52501 -> 0 bytes .../extension/en/toptoonplus/TopToonPlus.kt | 324 ------------------ .../en/toptoonplus/TopToonPlusDto.kt | 122 ------- .../TopToonPlusWebViewInterceptor.kt | 255 -------------- 13 files changed, 1 insertion(+), 772 deletions(-) delete mode 100644 src/en/toptoonplus/AndroidManifest.xml delete mode 100644 src/en/toptoonplus/README.md delete mode 100644 src/en/toptoonplus/build.gradle delete mode 100644 src/en/toptoonplus/res/mipmap-hdpi/ic_launcher.png delete mode 100644 src/en/toptoonplus/res/mipmap-mdpi/ic_launcher.png delete mode 100644 src/en/toptoonplus/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 src/en/toptoonplus/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 src/en/toptoonplus/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 src/en/toptoonplus/res/web_hi_res_512.png delete mode 100644 src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlus.kt delete mode 100644 src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusDto.kt delete mode 100644 src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusWebViewInterceptor.kt diff --git a/.github/workflows/issue_closer.yml b/.github/workflows/issue_closer.yml index 6c14277be..0107ba5c4 100644 --- a/.github/workflows/issue_closer.yml +++ b/.github/workflows/issue_closer.yml @@ -32,7 +32,7 @@ jobs: }, { "type": "both", - "regex": ".*(mangago|mangafox|hq\\s*dragon|manga\\s*host|supermangas|superhentais|union\\s*mangas|yes\\s*mangas|manhuascan|heroscan|manhwahot|leitor\\.?net|manga\\s*livre|tsuki\\s*mangas|manga\\s*yabu|mangas\\.in|mangas\\.pw|hentaikai).*", + "regex": ".*(mangago|mangafox|hq\\s*dragon|manga\\s*host|supermangas|superhentais|union\\s*mangas|yes\\s*mangas|manhuascan|heroscan|manhwahot|leitor\\.?net|manga\\s*livre|tsuki\\s*mangas|manga\\s*yabu|mangas\\.in|mangas\\.pw|hentaikai|toptoon\\+?).*", "ignoreCase": true, "message": "{match} will not be added back as it is too difficult to maintain. Read #3475 for more information" }, diff --git a/src/en/toptoonplus/AndroidManifest.xml b/src/en/toptoonplus/AndroidManifest.xml deleted file mode 100644 index b4571bfa8..000000000 --- a/src/en/toptoonplus/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/src/en/toptoonplus/README.md b/src/en/toptoonplus/README.md deleted file mode 100644 index 02e06d824..000000000 --- a/src/en/toptoonplus/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# TOPTOON+ - -Table of Content -- [FAQ](#FAQ) - - [Why are some chapters missing?](#why-are-some-chapters-missing) - - [Why I can not see mature titles?](#why-i-cant-see-mature-titles) -- [Guides](#Guides) - - [Reading already paid chapters](#reading-already-paid-chapters) - -Don't find the question you are looking for? Go check out our general FAQs and Guides -over at [Extension FAQ] or [Getting Started]. - -[Extension FAQ]: https://tachiyomi.org/help/faq/#extensions -[Getting Started]: https://tachiyomi.org/help/guides/getting-started/#installation - -## FAQ - -### Why are some chapters missing? - -TOPTOON+ have series with paid chapters. These will be filtered out from -the chapter list by default if you didn't buy it before or if you're not signed in. -To sign in with your existing account, follow the guide available above. - -### Why I can not see mature titles? - -You need to sign in with your existing account in WebView and toggle the -Mature switch to on in order to these titles appear in the extension. -More details about how to sign in in the guide available above. - -## Guides - -### Reading already paid chapters - -The **TOPTOON+** source allows the reading of paid chapters in your account. -Follow the following steps to be able to sign in and get access to them: - -1. Open the popular or latest section of the source. -2. Open the WebView by clicking the button with a globe icon. -3. Do the login with your existing account *(read the observations section)*. -4. Close the WebView and refresh the chapter list of the titles - you want to read the already paid chapters. - -#### Observations - -- Sign in with your Google account is not supported due to WebView restrictions - access that Google have. You need to have a simple account in order to be able - to login via WebView. -- The extension **will not** bypass any payment requirement. You still do need - to buy the chapters you want to read or wait until they become available and - added to your account. diff --git a/src/en/toptoonplus/build.gradle b/src/en/toptoonplus/build.gradle deleted file mode 100644 index d01857d01..000000000 --- a/src/en/toptoonplus/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' - -ext { - extName = 'TOPTOON+' - pkgNameSuffix = 'en.toptoonplus' - extClass = '.TopToonPlus' - extVersionCode = 4 - isNsfw = true -} - -dependencies { - implementation project(':lib-ratelimit') -} - -apply from: "$rootDir/common.gradle" - diff --git a/src/en/toptoonplus/res/mipmap-hdpi/ic_launcher.png b/src/en/toptoonplus/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ca1d9bdcdb091f2f6cbfa21bbd1df6a5e2a3843b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 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 Hu0mjfx;@ur diff --git a/src/en/toptoonplus/res/mipmap-xhdpi/ic_launcher.png b/src/en/toptoonplus/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bcb95ea8b6d79a4bc3b548cdda981810fa375456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3851 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 N002ovPDHLkV1n?ZLNWjV diff --git a/src/en/toptoonplus/res/mipmap-xxhdpi/ic_launcher.png b/src/en/toptoonplus/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d82a08ce5b16029cf38d553ad6bc0e53e46fbe9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7299 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 diff --git a/src/en/toptoonplus/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/toptoonplus/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f17a049b8520be939bac378e52b88df1029ab07c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10691 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 diff --git a/src/en/toptoonplus/res/web_hi_res_512.png b/src/en/toptoonplus/res/web_hi_res_512.png deleted file mode 100644 index 6eb7a2f095642ef8f9bad0ed5c036937def78073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52501 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 - - if (result.data == null) { - return MangasPage(emptyList(), hasNextPage = false) - } - - val comicList = result.data.ranking.map(::popularMangaFromObject) - - return MangasPage(comicList, hasNextPage = false) - } - - private fun popularMangaFromObject(comic: TopToonComic) = SManga.create().apply { - title = comic.information?.title.orEmpty() - thumbnail_url = comic.firstAvailableThumbnail - url = "/comic/${comic.comicId}" - } - - override fun latestUpdatesRequest(page: Int): Request { - val newHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Language", lang) - .add("UA", "web") - .add("X-Api-Key", API_KEY) - .build() - - return GET("$API_URL/api/v1/page/daily/$day", newHeaders, CacheControl.FORCE_NETWORK) - } - - override fun latestUpdatesParse(response: Response): MangasPage { - val result = response.parseAs() - - if (result.data == null) { - return MangasPage(emptyList(), hasNextPage = false) - } - - val comicList = result.data.daily.map(::latestMangaFromObject) - - return MangasPage(comicList, hasNextPage = false) - } - - private fun latestMangaFromObject(comic: TopToonComic) = popularMangaFromObject(comic) - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - return super.fetchSearchManga(page, query, filters) - .map { result -> - val filteredList = result.mangas.filter { it.title.contains(query, true) } - MangasPage(filteredList, result.hasNextPage) - } - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val newHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Language", lang) - .add("UA", "web") - .add("X-Api-Key", API_KEY) - .build() - - return GET("$API_URL/api/v1/search/totalsearch", newHeaders, CacheControl.FORCE_NETWORK) - } - - override fun searchMangaParse(response: Response): MangasPage { - if (response.request.url.toString().contains("ranking")) { - return popularMangaParse(response) - } - - val result = response.parseAs>() - - if (result.data == null) { - return MangasPage(emptyList(), hasNextPage = false) - } - - val comicList = result.data.map(::searchMangaFromObject) - - return MangasPage(comicList, hasNextPage = false) - } - - private fun searchMangaFromObject(comic: TopToonComic) = popularMangaFromObject(comic) - - // Workaround to allow "Open in browser" use the real URL. - override fun fetchMangaDetails(manga: SManga): Observable { - return client.newCall(mangaDetailsApiRequest(manga.url)) - .asObservableSuccess() - .map { response -> - mangaDetailsParse(response).apply { initialized = true } - } - } - - private fun mangaDetailsApiRequest(mangaUrl: String): Request { - val newHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Language", lang) - .add("UA", "web") - .add("X-Api-Key", API_KEY) - .build() - - val comicId = mangaUrl.substringAfterLast("/") - - return GET("$API_URL/api/v1/page/episode?comicId=$comicId", newHeaders) - } - - override fun mangaDetailsRequest(manga: SManga): Request { - val newHeaders = headersBuilder() - .removeAll("Accept") - .build() - - return GET(baseUrl + manga.url, newHeaders) - } - - override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply { - val result = response.parseAs() - - if (result.data == null) { - throw Exception(COULD_NOT_PARSE_RESPONSE) - } - - val comic = result.data.comic!! - - title = comic.information?.title.orEmpty() - thumbnail_url = comic.firstAvailableThumbnail - description = comic.information?.description - genre = comic.genres - status = if (result.data.isCompleted) SManga.COMPLETED else SManga.ONGOING - author = comic.author.joinToString { it.trim() } - } - - override fun chapterListRequest(manga: SManga): Request = mangaDetailsApiRequest(manga.url) - - override fun chapterListParse(response: Response): List { - val result = response.parseAs() - - if (result.data == null) { - throw Exception(COULD_NOT_PARSE_RESPONSE) - } - - return result.data.availableEpisodes - .map(::chapterFromObject) - .reversed() - } - - private fun chapterFromObject(chapter: TopToonEpisode): SChapter = SChapter.create().apply { - name = chapter.information?.title.orEmpty() + - (if (chapter.information?.subTitle.isNullOrEmpty().not()) " - " + chapter.information?.subTitle else "") - chapter_number = chapter.order.toFloat() - scanlator = this@TopToonPlus.name - date_upload = chapter.information?.publishedAt?.date.orEmpty().toDate() - url = "/comic/${chapter.comicId}/${chapter.episodeId}" - } - - override fun pageListRequest(chapter: SChapter): Request { - val newHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Language", lang) - .add("UA", "web") - .add("X-Api-Key", API_KEY) - .build() - - val comicId = chapter.url - .substringAfter("/comic/") - .substringBefore("/") - val episodeId = chapter.url.substringAfterLast("/") - - val apiUrl = "$API_URL/check/isUsableEpisode".toHttpUrl().newBuilder() - .addQueryParameter("comicId", comicId) - .addQueryParameter("episodeId", episodeId) - .addQueryParameter("location", "episode") - .addQueryParameter("action", "episode_click") - .toString() - - return GET(apiUrl, newHeaders, CacheControl.FORCE_NETWORK) - } - - override fun pageListParse(response: Response): List { - val result = response.parseAs() - - if (result.data == null) { - throw Exception(COULD_NOT_PARSE_RESPONSE) - } - - val usableEpisode = result.data - - if (usableEpisode.isFree.not() && usableEpisode.isOwn.not()) { - throw Exception(CHAPTER_NOT_FREE) - } - - val viewerRequest = viewerRequest(usableEpisode.comicId, usableEpisode.episodeId) - val viewerResponse = client.newCall(viewerRequest).execute() - - if (!viewerResponse.isSuccessful) { - throw Exception(COULD_NOT_GET_CHAPTER_IMAGES) - } - - val viewerResult = viewerResponse.parseAs() - - return viewerResult.data!!.episode - .find { episode -> episode.episodeId == usableEpisode.episodeId } - .let { episode -> episode?.contentImage?.jpeg.orEmpty() } - .mapIndexed { i, page -> Page(i, baseUrl, page.path) } - } - - private fun viewerRequest(comicId: Int, episodeId: Int): Request { - val newHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Language", lang) - .add("UA", "web") - .add("X-Api-Key", API_KEY) - .build() - - val apiUrl = "$API_URL/api/v1/page/viewer".toHttpUrl().newBuilder() - .addQueryParameter("comicId", comicId.toString()) - .addQueryParameter("episodeId", episodeId.toString()) - .toString() - - return GET(apiUrl, newHeaders) - } - - override fun fetchImageUrl(page: Page): Observable = Observable.just(page.imageUrl!!) - - override fun imageUrlParse(response: Response): String = "" - - override fun imageRequest(page: Page): Request { - val newHeaders = headersBuilder() - .set("Accept", ACCEPT_IMAGE) - .set("Referer", page.url) - .build() - - return GET(page.imageUrl!!, newHeaders) - } - - private inline fun Response.parseAs(): TopToonResult = use { - json.decodeFromString(it.body?.string().orEmpty()) - } - - private fun String.toDate(): Long { - return runCatching { DATE_FORMATTER.parse(this)?.time } - .getOrNull() ?: 0L - } - - companion object { - const val API_URL = "https://api.toptoonplus.com" - - private val API_KEY by lazy { - Base64.decode("U1VQRVJDT09MQVBJS0VZMjAyMSNAIyg=", Base64.DEFAULT) - .toString(charset("UTF-8")) - } - - private const val ACCEPT_JSON = "application/json, text/plain, */*" - private const val ACCEPT_IMAGE = "image/avif,image/webp,image/apng,image/*,*/*;q=0.8" - - private const val COULD_NOT_PARSE_RESPONSE = "Could not parse the API response." - private const val COULD_NOT_GET_CHAPTER_IMAGES = "Could not get the chapter images." - private const val CHAPTER_NOT_FREE = "This chapter is not free to read." - - private val DATE_FORMATTER by lazy { - SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH) - } - } -} diff --git a/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusDto.kt b/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusDto.kt deleted file mode 100644 index 84b9670a4..000000000 --- a/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusDto.kt +++ /dev/null @@ -1,122 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.toptoonplus - -import kotlinx.serialization.Serializable - -@Serializable -data class TopToonResult( - val uuid: String? = "", - val data: T? = null -) - -@Serializable -data class TopToonRanking( - val ranking: List = emptyList() -) - -@Serializable -data class TopToonDaily( - val daily: List = emptyList() -) - -@Serializable -data class TopToonDetails( - val comic: TopToonComic? = null, - val episode: List = emptyList() -) { - val availableEpisodes: List - get() = episode.filter { it.information?.payType == 0 || it.isPurchased == 1 } - - val isCompleted: Boolean - get() = episode.lastOrNull()?.information - ?.let { - it.title.contains("[End]", true) || - it.subTitle.contains("[End]", true) - } ?: false -} - -@Serializable -data class TopToonUsableEpisode( - val comicId: Int = 0, - val episode: TopToonEpisode? = null, - val episodeId: Int = 0, - val episodePrice: TopToonEpisodePrice? = null, - val isFree: Boolean = false, - val isOwn: Boolean = false, - val needLogin: Boolean = false, - val purchaseMethod: List = emptyList() -) - -@Serializable -data class TopToonEpisodePrice( - val payType: Int = -1 -) - -@Serializable -data class TopToonComic( - val author: List = emptyList(), - val comicId: Int = -1, - val hashtags: List = emptyList(), - val information: TopToonComicInfo? = null, - val thumbnailImage: TopToonComicPoster? = null, - val titleVerticalThumbnail: TopToonComicPoster? = null -) { - val firstAvailableThumbnail: String - get() = titleVerticalThumbnail?.jpeg?.firstOrNull()?.path - ?: thumbnailImage!!.jpeg.firstOrNull()?.path.orEmpty() - - val genres: String - get() = hashtags - .flatMap { it.split("&") } - .map(String::trim) - .sorted() - .joinToString() -} - -@Serializable -data class TopToonComicInfo( - val description: String = "", - val mature: Int = 0, - val title: String = "" -) - -@Serializable -data class TopToonComicPoster( - val jpeg: List = emptyList() -) - -@Serializable -data class TopToonImage( - val path: String = "" -) - -@Serializable -data class TopToonEpisode( - val comicId: Int = -1, - val contentImage: TopToonComicPoster? = null, - val episodeId: Int = -1, - val information: TopToonEpisodeInfo? = null, - val isPurchased: Int = 0, - val order: Int = -1 -) - -@Serializable -data class TopToonEpisodeInfo( - val needLogin: Int = 0, - val payType: Int = 0, - val publishedAt: TopToonEpisodeDate? = null, - val subTitle: String = "", - val title: String = "" -) - -@Serializable -data class TopToonEpisodeDate( - val date: String = "" -) - -@Serializable -data class TopToonAuth( - val auth: Int = 0, - val mature: Int = 0, - val sign: Int = 0, - val token: String = "" -) diff --git a/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusWebViewInterceptor.kt b/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusWebViewInterceptor.kt deleted file mode 100644 index 84e45992c..000000000 --- a/src/en/toptoonplus/src/eu/kanade/tachiyomi/extension/en/toptoonplus/TopToonPlusWebViewInterceptor.kt +++ /dev/null @@ -1,255 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.toptoonplus - -import android.annotation.SuppressLint -import android.app.Application -import android.os.Handler -import android.os.Looper -import android.webkit.JavascriptInterface -import android.webkit.WebResourceRequest -import android.webkit.WebResourceResponse -import android.webkit.WebView -import android.webkit.WebViewClient -import eu.kanade.tachiyomi.network.GET -import kotlinx.serialization.json.buildJsonObject -import kotlinx.serialization.json.put -import okhttp3.Headers -import okhttp3.Interceptor -import okhttp3.Request -import okhttp3.Response -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get -import java.io.IOException -import java.util.UUID -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit - -abstract class TopToonPlusWebViewInterceptor : Interceptor { - - protected abstract val baseUrl: String - - protected abstract val headers: Headers - - protected open val executeJavascript: Boolean = true - - protected val windowKey: String by lazy { - UUID.randomUUID().toString().replace("-", "") - } - - protected val handler by lazy { Handler(Looper.getMainLooper()) } - - protected class JsInterface(private val latch: CountDownLatch, var payload: String = "") { - @JavascriptInterface - fun passPayload(passedPayload: String) { - payload = passedPayload - latch.countDown() - } - } - - abstract override fun intercept(chain: Interceptor.Chain): Response - - @SuppressLint("SetJavaScriptEnabled", "AddJavascriptInterface") - protected fun proceedWithWebView(websiteRequest: Request): String? { - val latch = CountDownLatch(1) - var webView: WebView? = null - - val requestUrl = websiteRequest.url.toString() - val headers = websiteRequest.headers.toMultimap() - .mapValues { it.value.getOrNull(0) ?: "" } - .toMutableMap() - val userAgent = headers["User-Agent"] - val jsInterface = JsInterface(latch) - - handler.post { - val webview = WebView(Injekt.get()) - webView = webview - - with(webview.settings) { - javaScriptEnabled = true - domStorageEnabled = true - databaseEnabled = true - useWideViewPort = false - loadWithOverviewMode = false - userAgentString = userAgent.orEmpty().ifEmpty { userAgentString } - } - - if (executeJavascript) { - webview.addJavascriptInterface(jsInterface, windowKey) - } - - webview.webViewClient = createWebViewClient(jsInterface) - - webview.loadUrl(requestUrl, headers) - } - - latch.await(TIMEOUT_SEC, TimeUnit.SECONDS) - - handler.postDelayed({ webView?.destroy() }, DELAY_MILLIS) - - if (jsInterface.payload.isBlank()) { - return null - } - - return jsInterface.payload - } - - protected abstract fun createWebViewClient(jsInterface: JsInterface): WebViewClient - - companion object { - private const val TIMEOUT_SEC: Long = 20 - private const val DELAY_MILLIS: Long = 10 * 1000 - } -} - -/** - * WebView interceptor to get the access token from the user. - * It was created because the website started to use reCAPTCHA. - */ -class TopToonPlusTokenInterceptor( - override val baseUrl: String, - override val headers: Headers -) : TopToonPlusWebViewInterceptor() { - - private var token: String? = null - - @Synchronized - override fun intercept(chain: Interceptor.Chain): Response { - var request = chain.request() - - if (!request.url.toString().startsWith(TopToonPlus.API_URL)) { - return chain.proceed(request) - } - - if (token != null) { - request = request.newBuilder() - .header("Token", token!!) - .build() - - val response = chain.proceed(request) - - // The API throws 463 if the token is invalid. - if (response.code != 463) { - return response - } - - token = null - request = request.newBuilder() - .removeHeader("Token") - .build() - - response.close() - } - - try { - val websiteRequest = GET(baseUrl, headers) - token = proceedWithWebView(websiteRequest) - } catch (e: Exception) { - throw IOException(e.message) - } - - if (token != null) { - request = request.newBuilder() - .header("Token", token!!) - .build() - } - - return chain.proceed(request) - } - - override fun createWebViewClient(jsInterface: JsInterface): WebViewClient = object : WebViewClient() { - override fun onPageFinished(view: WebView, url: String?) { - view.evaluateJavascript(createScript()) {} - } - } - - private fun createScript(): String = """ - (function () { - var database = JSON.parse(localStorage.getItem("persist:topco")); - - if (!database) { - window["$windowKey"].passPayload(""); - return; - } - - var userDatabase = JSON.parse(database.user); - - if (!userDatabase) { - window["$windowKey"].passPayload(""); - return; - } - - var accessToken = userDatabase.accessToken; - window["$windowKey"].passPayload(accessToken || ""); - })(); - """.trimIndent() -} - -/** - * WebView interceptor to get the viewer token for the chapter. - * It was created because the website started to use reCAPTCHA. - */ -class TopToonPlusViewerInterceptor( - override val baseUrl: String, - override val headers: Headers -) : TopToonPlusWebViewInterceptor() { - - override val executeJavascript: Boolean = false - - override fun intercept(chain: Interceptor.Chain): Response { - var request = chain.request() - - if (!request.url.toString().startsWith(TopToonPlus.API_URL)) { - return chain.proceed(request) - } - - if (request.url.pathSegments.joinToString("/") != VIEWER_ENDPOINT) { - return chain.proceed(request) - } - - val comicId = request.url.queryParameter("comicId")!! - val episodeId = request.url.queryParameter("episodeId")!! - val chapterRequest = GET("$baseUrl/comic/$comicId/$episodeId", headers) - val urlWithToken: String - - try { - urlWithToken = proceedWithWebView(chapterRequest).orEmpty() - .ifEmpty { request.url.toString() } - } catch (e: Exception) { - throw IOException(e.message) - } - - request = request.newBuilder() - .url(urlWithToken) - .build() - - return chain.proceed(request) - } - - override fun createWebViewClient(jsInterface: JsInterface): WebViewClient = object : WebViewClient() { - override fun shouldInterceptRequest( - view: WebView?, - request: WebResourceRequest - ): WebResourceResponse? { - if (!request.url.toString().contains(VIEWER_ENDPOINT)) { - return null - } - - val badResponse = buildJsonObject { - put("action", "unusable comic") - put("message", "not allowed") - put("uuid", UUID.randomUUID().toString()) - } - - jsInterface.passPayload(request.url.toString()) - - return WebResourceResponse( - "application/json", - "utf-8", - badResponse.toString().byteInputStream() - ) - } - } - - companion object { - private const val VIEWER_ENDPOINT = "api/v1/page/viewer" - } -}