Skip to main content

ezcapsolver/tasks/
cloudflare.rs

1use std::collections::BTreeMap;
2
3use serde::Serialize;
4use serde_json::Value;
5
6use super::ExtraFields;
7
8/// Cloudflare five-second challenge task.
9#[derive(Debug, Clone, Serialize, Default, bon::Builder)]
10#[builder(on(String, into))]
11#[serde(remote = "Self", rename_all = "camelCase")]
12pub struct Cloudflare5sTask {
13    /// URL protected by the challenge.
14    #[serde(rename = "websiteURL")]
15    pub website_url: String,
16    /// Proxy used by the challenge worker. Required for this type, unlike most
17    /// others.
18    ///
19    /// Format is `protocol://username:password@host:port` with protocol one of
20    /// `http`, `https` or `socks5`. Both credentials are required — the service
21    /// rejects an unauthenticated proxy — and the host may not be a private
22    /// address.
23    pub proxy: String,
24    /// Optional challenge request data.
25    #[serde(rename = "rqData", skip_serializing_if = "Option::is_none")]
26    pub rq_data: Option<BTreeMap<String, Value>>,
27    /// Additional worker parameters.
28    #[serde(skip)]
29    #[builder(default)]
30    pub extra: ExtraFields,
31}
32
33/// Cloudflare Turnstile task.
34#[derive(Debug, Clone, Serialize, Default, bon::Builder)]
35#[builder(on(String, into))]
36#[serde(remote = "Self", rename_all = "camelCase")]
37pub struct CloudflareTurnstileTask {
38    /// URL containing the Turnstile widget.
39    #[serde(rename = "websiteURL")]
40    pub website_url: String,
41    /// Turnstile site key.
42    pub website_key: String,
43    /// Optional worker proxy.
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub proxy: Option<String>,
46    /// Optional Turnstile metadata.
47    #[serde(rename = "rqData", skip_serializing_if = "Option::is_none")]
48    pub rq_data: Option<BTreeMap<String, Value>>,
49    /// Additional worker parameters.
50    #[serde(skip)]
51    #[builder(default)]
52    pub extra: ExtraFields,
53}