From 43556f219bd1cb7b0d1e29b6be03fda8daf0ea72 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Thu, 23 Feb 2023 17:28:04 +0800 Subject: [PATCH] Improve login process regarding IP restriction --- .../hippo/ehviewer/client/EhCookieStore.kt | 5 +++- .../com/hippo/ehviewer/client/EhEngine.kt | 25 +++++++++++++++++++ .../java/com/hippo/ehviewer/client/EhUrl.kt | 1 + .../ehviewer/dailycheck/DailyCheckWork.kt | 24 ++++++------------ .../hippo/ehviewer/ui/login/LoginActivity.kt | 4 +++ 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt index 3605029d5..61d736b3c 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt @@ -183,7 +183,10 @@ object EhCookieStore : CookieJar { override fun saveFromResponse(url: HttpUrl, cookies: List) { for (cookie in cookies) { - addCookie(cookie) + // See https://github.com/Ehviewer-Overhauled/Ehviewer/issues/873 + if (cookie.name != "__utmp") { + addCookie(cookie) + } } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt index 05c44a1c3..ac8de4572 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.kt @@ -30,6 +30,7 @@ import com.hippo.ehviewer.client.data.PreviewSet import com.hippo.ehviewer.client.exception.EhException import com.hippo.ehviewer.client.exception.ParseException import com.hippo.ehviewer.client.parser.ArchiveParser +import com.hippo.ehviewer.client.parser.EventPaneParser import com.hippo.ehviewer.client.parser.FavoritesParser import com.hippo.ehviewer.client.parser.ForumsParser import com.hippo.ehviewer.client.parser.GalleryApiParser @@ -840,6 +841,30 @@ object EhEngine { } } + @Throws(Throwable::class) + suspend fun getNews(parse: Boolean): String? { + val url = EhUrl.URL_NEWS + val referer = EhUrl.REFERER_E + Log.d(TAG, url) + val request = EhRequestBuilder(url, referer).build() + val call = okHttpClient.newCall(request) + var body: String? = null + var headers: Headers? = null + var code = -1 + try { + call.executeAsync().use { response -> + code = response.code + headers = response.headers + body = response.body.string() + return if (parse) EventPaneParser.parse(body!!) else null + } + } catch (e: Throwable) { + ExceptionUtils.throwIfFatal(e) + transformException(code, headers, body, e) + throw e + } + } + @Throws(Throwable::class) private suspend fun getProfileInternal( url: String, referer: String diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt index 19e890b9f..7be84f565 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.kt @@ -46,6 +46,7 @@ object EhUrl { const val URL_FORUMS = "https://forums.e-hentai.org/" const val URL_FUNDS = HOST_E + "exchange.php?t=gp" const val URL_HOME = HOST_E + "home.php" + const val URL_NEWS = HOST_E + "news.php" const val REFERER_EX = "https://$DOMAIN_EX" const val ORIGIN_EX = REFERER_EX const val REFERER_E = "https://$DOMAIN_E" diff --git a/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt b/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt index 22a977a9c..e76a62a5e 100644 --- a/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt +++ b/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt @@ -7,19 +7,18 @@ import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.work.Constraints +import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.NetworkType import androidx.work.PeriodicWorkRequest import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager -import androidx.work.Worker import androidx.work.WorkerParameters import com.hippo.ehviewer.EhApplication import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.client.EhRequestBuilder -import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.client.parser.EventPaneParser +import com.hippo.ehviewer.client.EhEngine +import eu.kanade.tachiyomi.util.lang.withIOContext import java.time.Duration import java.time.LocalDateTime @@ -29,24 +28,17 @@ private val signedIn private const val CHANNEL_ID = "DailyCheckNotification" class DailyCheckWork(val context: Context, workerParams: WorkerParameters) : - Worker(context, workerParams) { - override fun doWork(): Result { + CoroutineWorker(context, workerParams) { + override suspend fun doWork(): Result = withIOContext { runCatching { if (signedIn) { - val referer = EhUrl.REFERER_E - val request = EhRequestBuilder(EhUrl.HOST_E + "news.php", referer).build() - val call = EhApplication.okHttpClient.newCall(request) - call.execute().use { response -> - val responseBody = response.body - val body = responseBody.string() - EventPaneParser.parse(body)?.let { showEventPane(it) } - } + EhEngine.getNews(true)?.let { showEventPane(it) } } }.onFailure { it.printStackTrace() - return Result.retry() + return@withIOContext Result.retry() } - return Result.success() + Result.success() } @SuppressLint("MissingPermission") diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt index 779d4105e..3cfcc7d74 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt @@ -78,6 +78,10 @@ suspend fun postLogin() = coroutineScope { } launch { runCatching { + // For the `star` cookie + EhEngine.getNews(false) + + // Sad panda check Settings.putGallerySite(EhUrl.SITE_EX) EhEngine.getUConfig() }.onFailure {