[ExHentai] Fix IP ban detection

master
Koitharu 2 years ago
parent f91ff0b9d0
commit d937c7e6ab
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -6,7 +6,16 @@ import java.time.Instant
class TooManyRequestExceptions(
val url: String,
val retryAfter: Long,
) : IOException() {
) : IOException(
buildString {
append("Too man requests")
if (retryAfter > 0) {
append(", retry after ")
append(retryAfter)
append("ms")
}
},
) {
val retryAt: Instant?
get() = if (retryAfter > 0 && retryAfter < Long.MAX_VALUE) {

@ -321,14 +321,14 @@ internal class ExHentaiParser(
if (response.headersContentLength() <= 256) {
val text = response.peekBody(256).string()
if (text.startsWith("Your IP address has been temporarily banned")) {
@Language("RegExp")
val regex = kotlin.text.Regex("ban expires in ([0-9]+) minutes? and ([0-9]+) seconds?")
val groups = regex.find(text)?.groupValues ?: return response
val minutes = groups.getOrNull(1)?.toLongOrNull() ?: 0L
val seconds = groups.getOrNull(2)?.toLongOrNull() ?: 0L
val hours = Regex("([0-9]+) hours?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
val minutes = Regex("([0-9]+) minutes?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
val seconds = Regex("([0-9]+) seconds?").find(text)?.groupValues?.getOrNull(1)?.toLongOrNull() ?: 0
throw TooManyRequestExceptions(
url = response.request.url.toString(),
retryAfter = TimeUnit.MINUTES.toMillis(minutes) + TimeUnit.SECONDS.toMillis(seconds),
retryAfter = TimeUnit.HOURS.toMillis(hours)
+ TimeUnit.MINUTES.toMillis(minutes)
+ TimeUnit.SECONDS.toMillis(seconds),
)
}
}

Loading…
Cancel
Save