Mangabuff: fix (#8537)

This commit is contained in:
Dr1ks 2025-04-20 08:28:14 +07:00 committed by Draff
parent 37e0aaeb75
commit b59238f938
Signed by: Draff
GPG Key ID: E8A89F3211677653
2 changed files with 34 additions and 30 deletions

View File

@ -1,8 +1,8 @@
ext { ext {
extName = 'MangaBuff' extName = 'MangaBuff'
extClass = '.MangaBuff' extClass = '.MangaBuff'
extVersionCode = 1 extVersionCode = 2
isNsfw = false isNsfw = true
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -10,6 +10,7 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
@ -23,6 +24,7 @@ import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.io.IOException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
@ -45,47 +47,49 @@ class MangaBuff : ParsedHttpSource() {
val request = chain.request() val request = chain.request()
if (request.method == "POST" && request.header("X-CSRF-TOKEN") == null) { if (request.method == "POST" && request.header("X-CSRF-TOKEN") == null) {
val newRequest = request.newBuilder()
val token = getToken() val token = getToken()
val response = chain.proceed( val newRequest = request.newBuilder()
newRequest .header("X-Requested-With", "XMLHttpRequest")
.addHeader("X-CSRF-TOKEN", token) .header("X-CSRF-TOKEN", token)
.build(), .build()
)
val response = chain.proceed(newRequest)
if (response.code == 419) { if (response.code == 419) {
response.close() response.close()
storedToken = null // reset the token storedToken = null
val newToken = getToken() val retryToken = getToken()
return chain.proceed( val retryRequest = request.newBuilder()
newRequest .header("X-Requested-With", "XMLHttpRequest")
.addHeader("X-CSRF-TOKEN", newToken) .header("X-CSRF-TOKEN", retryToken)
.build(), .build()
) return chain.proceed(retryRequest)
} }
return response return response
} }
val response = chain.proceed(request) return chain.proceed(request)
if (response.header("Content-Type")?.contains("text/html") != true) {
return response
}
storedToken = Jsoup.parse(response.peekBody(Long.MAX_VALUE).string())
.selectFirst("head meta[name*=csrf-token]")
?.attr("content")
return response
} }
private fun getToken(): String { private fun getToken(): String {
if (storedToken.isNullOrEmpty()) { storedToken?.let { return it }
val request = GET(baseUrl, headers)
client.newCall(request).execute().close() // updates token in interceptor val request = GET(baseUrl, headers)
val response = client.newCall(request).execute()
response.use {
val document = it.asJsoup()
val token = document.select("head meta[name*=csrf-token]")
.attr("content")
if (token.isEmpty()) {
throw IOException("Unable to find CSRF token")
}
storedToken = token
return token
} }
return storedToken!!
} }
// Popular // Popular