Skip to main content

px_turnstile/
lib.rs

1use async_trait::async_trait;
2use px_errors::AppError;
3use px_pipeline::{ChallengeHandler, HandlerOutcome, PageHtml};
4
5pub struct TurnstileHandler;
6
7impl TurnstileHandler {
8    pub fn new() -> Self {
9        Self
10    }
11}
12
13impl Default for TurnstileHandler {
14    fn default() -> Self {
15        Self::new()
16    }
17}
18
19#[async_trait]
20impl ChallengeHandler for TurnstileHandler {
21    fn name(&self) -> &'static str {
22        "turnstile"
23    }
24
25    async fn detects(&self, page: &PageHtml) -> Result<bool, AppError> {
26        let h = &page.html;
27        Ok(h.contains("challenges.cloudflare.com/turnstile") || h.contains("cf-turnstile"))
28    }
29
30    async fn solve(&self, _page: &PageHtml) -> Result<HandlerOutcome, AppError> {
31        Ok(HandlerOutcome::not_implemented(self.name()))
32    }
33}