Refactor HCaptchaValidator to improve token verification and logging.

This commit is contained in:
2025-06-29 19:28:16 +09:00
parent d1b93eedaa
commit 42758d7c2d

View File

@@ -4,6 +4,8 @@ import dev.rheinsw.server.contact.model.HCaptchaConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@@ -26,29 +28,41 @@ public class HCaptchaValidator {
public boolean isValid(String token) {
if (token == null || token.isBlank()) {
log.warn("Captcha token is missing or blank");
log.warn("[hCaptcha] Token is missing or blank");
return false;
}
String secret = config.getSecret();
if (secret == null || secret.isBlank()) {
log.error("Captcha secret is missing");
log.error("[hCaptcha] Secret is not configured");
return false;
}
try {
var response = restTemplate.postForObject(
log.info("[hCaptcha] Verifying token with https://api.hcaptcha.com/siteverify");
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
body.add("secret", secret);
body.add("response", token);
@SuppressWarnings("unchecked")
Map<String, Object> response = restTemplate.postForObject(
"https://api.hcaptcha.com/siteverify",
new org.springframework.util.LinkedMultiValueMap<String, String>() {{
add("secret", secret);
add("response", token);
}},
body,
Map.class
);
return response != null && Boolean.TRUE.equals(response.get("success"));
log.info("[hCaptcha] Verification response: {}", response);
boolean success = response != null && Boolean.TRUE.equals(response.get("success"));
if (!success) {
log.warn("[hCaptcha] Verification failed: {}", response);
}
return success;
} catch (Exception e) {
log.error("Failed to verify hCaptcha", e);
log.error("[hCaptcha] Exception during verification", e);
return false;
}
}