HTML form bind, CSRF (default on), and XSS-safe render helpers.
Apps declare fields and constraints. Serenade owns CSRF validation and HTML escaping so apps stay thin.
serenade-form (#110)
| Piece | Role |
|---|---|
Form / FormBuilder |
Build fields, bind POST body, validate via serenade-validator |
| CSRF (default on) | Hidden _token field; HmacCsrfTokenManager |
escape_html / escape_attr |
Twig autoescape analogue for render |
parse_urlencoded |
application/x-www-form-urlencoded body → map |
Form::render |
Escaped <form> markup including CSRF when enabled |
GET → Form::prepare_csrf(manager) → Form::render() → HTML
POST → Form::handle_request(request, manager) // CSRF check
→ Form::is_valid() / validate(&validator)
→ read Form::data() / get("field")
Tokens are HMAC-SHA256 signed and stateless (no session store required for v0). Secret is app-owned and must be stable across requests.
Field name: _token (CSRF_FIELD_NAME), same habit as Symfony.
Disable only with Form::builder(…).csrf(false) when you have a deliberate non-browser client (prefer keeping CSRF on for HTML).
Form::render escapes field values and attributes. Prefer escape_html for any user text you concatenate into HTML outside the form helper.
- CSRF manager API: SECURITY.md
- Validator constraints: KERNEL.md (Validator)
- HTML apps: see
examples/MyFeed(depends on this crate)