diff --git a/module.nix b/module.nix index 46cfbb4..3285e1a 100644 --- a/module.nix +++ b/module.nix @@ -45,6 +45,12 @@ in description = "Path to a file containing the Telegram bot token."; }; + honeypot = mkOption { + type = types.bool; + default = true; + description = "Enable honeypot field for spam prevention."; + }; + user = mkOption { type = types.str; default = "guestbook"; @@ -80,6 +86,7 @@ in BOOK_SITE_TITLE = cfg.siteTitle; BOOK_SITE_URL = cfg.siteUrl; BOOK_TELEGRAM_CHAT_ID = toString cfg.telegramChatId; + BOOK_HONEYPOT = if cfg.honeypot then "true" else "false"; }; serviceConfig = { Type = "simple"; diff --git a/src/config.rs b/src/config.rs index f47c55a..bce8033 100644 --- a/src/config.rs +++ b/src/config.rs @@ -9,6 +9,7 @@ pub struct Config { pub site_url: String, pub telegram_bot_token: String, pub telegram_chat_id: i64, + pub honeypot: bool, } impl Config { @@ -33,6 +34,9 @@ impl Config { .map_err(|_| "BOOK_TELEGRAM_CHAT_ID is required")? .parse() .map_err(|_| "BOOK_TELEGRAM_CHAT_ID must be an integer")?, + honeypot: env::var("BOOK_HONEYPOT") + .map(|v| v != "false") + .unwrap_or(true), }) } } diff --git a/src/web.rs b/src/web.rs index d749133..9cf9ce4 100644 --- a/src/web.rs +++ b/src/web.rs @@ -53,7 +53,7 @@ async fn submit( Form(form): Form, ) -> Html { // Honeypot check — silently discard - if !form.url.is_empty() { + if state.config.honeypot && !form.url.is_empty() { return Html("Thanks! Your message is pending approval.".to_string()); }