From 322d90adfaeaaaad177a188438f34d8697f3724d Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Sat, 17 Feb 2024 00:24:35 -0500 Subject: [PATCH] [+] Automatic obtain request ip --- src/main/java/icu/samnyan/aqua/net/utils/Turnstile.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/net/utils/Turnstile.kt b/src/main/java/icu/samnyan/aqua/net/utils/Turnstile.kt index 95ed94c6..2bd06096 100644 --- a/src/main/java/icu/samnyan/aqua/net/utils/Turnstile.kt +++ b/src/main/java/icu/samnyan/aqua/net/utils/Turnstile.kt @@ -7,6 +7,7 @@ import io.ktor.client.call.* import io.ktor.client.request.* import io.ktor.client.request.forms.* import io.ktor.http.* +import jakarta.servlet.http.HttpServletRequest import kotlinx.serialization.Serializable import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.context.annotation.Configuration @@ -18,17 +19,21 @@ class TurnstileProperties { var enable: Bool = false lateinit var secret: Str + + lateinit var ipHeader: Str } @Service -class CaptchaService(val props: TurnstileProperties) { +class TurnstileService(val props: TurnstileProperties) { @Serializable data class Outcome(val success: Boolean) - suspend fun validate(captcha: Str?, ip: Str): Boolean { + suspend fun validate(captcha: Str?, request: HttpServletRequest): Boolean { if (!props.enable) return true if (captcha == null) return false + val ip = request.getHeader(props.ipHeader) ?: request.remoteAddr + val outcome: Outcome = HTTP.post("https://challenges.cloudflare.com/turnstile/v0/siteverify") { setBody( FormDataContent(Parameters.build {