Expand description
§Reinhardt Middleware
Comprehensive HTTP middleware collection for the Reinhardt framework.
§Overview
This crate provides a collection of middleware components for handling cross-cutting concerns in web applications, including authentication, security, caching, compression, and observability.
§Available Middleware
§Authentication & Authorization
AuthenticationMiddleware: Session-based user authentication (requiressessionsfeature)
§Security
CorsMiddleware: Cross-Origin Resource Sharing (requirescorsfeature)CsrfMiddleware: CSRF protection with token validationCspMiddleware: Content Security Policy headersXFrameOptionsMiddleware: Clickjacking protection via X-Frame-Options headerHttpsRedirectMiddleware: Force HTTPS connectionsSecurityMiddleware: Combined security headers (requiressecurityfeature)
§Performance & Caching
CacheMiddleware: HTTP response caching with configurable strategiesGZipMiddleware: Gzip compression (requirescompressionfeature)BrotliMiddleware: Brotli compression (requirescompressionfeature)ETagMiddleware: ETag generation and validation for conditional requestsConditionalGetMiddleware: Conditional GET support with Last-Modified headers
§Observability
LoggingMiddleware: Request/response logging with configurable formatsTracingMiddleware: Distributed tracing with trace/span ID propagationMetricsMiddleware: Performance metrics collectionRequestIdMiddleware: Unique request ID generation
§Rate Limiting & Resilience
RateLimitMiddleware: API rate limiting with multiple strategies (requiresrate-limitfeature)CircuitBreakerMiddleware: Circuit breaker pattern for fault toleranceTimeoutMiddleware: Request timeout handling
§Session & State
SessionMiddleware: Session management with pluggable storage backendsSiteMiddleware: Multi-site support with site identificationLocaleMiddleware: Internationalization and locale detection
§Utility
CommonMiddleware: Common HTTP functionality (trailing slashes, URL normalization)BrokenLinkEmailsMiddleware: Broken link notification via emailFlatpagesMiddleware: Static page serving from databaseRedirectFallbackMiddleware: Fallback redirect handling
§Quick Start
ⓘ
use reinhardt_middleware::{LoggingMiddleware, CsrfMiddleware};
use reinhardt_core::types::MiddlewareChain;
use std::sync::Arc;
// Create individual middleware instances
let logging = Arc::new(LoggingMiddleware::new());
let csrf = Arc::new(CsrfMiddleware::default());
// Build middleware chain (wraps around your handler)
let chain = MiddlewareChain::new(handler)
.with_middleware(logging)
.with_middleware(csrf);§Architecture
Key modules in this crate:
allowed_hosts: Restrict requests to configured host namesauth: Session-based user authentication (requiressessionsfeature)cache: HTTP response caching with configurable key strategiescircuit_breaker: Circuit breaker pattern for fault-tolerant backendscommon: Common HTTP functionality (trailing slash, URL normalization)cors: Cross-Origin Resource Sharing headers (requirescorsfeature)csp: Content Security Policy header generationcsrf: CSRF token validation and protectionetag: ETag generation and conditional request handlinglogging: Structured request/response loggingmetrics: Performance metrics collection and exportrate_limit: API rate limiting (requiresrate-limitfeature)request_id: Unique request ID generation and propagationsession: Session management with pluggable storage backendstimeout: Request timeout enforcementtracing: Distributed tracing with trace/span ID propagationxframe: X-Frame-Options clickjacking protection
§Feature Flags
| Feature | Default | Description |
|---|---|---|
cors | disabled | Cross-Origin Resource Sharing middleware |
compression | disabled | GZip and Brotli compression middleware |
rate-limit | disabled | API rate limiting middleware |
security | disabled | Combined security headers middleware |
sessions | disabled | Session-based authentication middleware |
sqlx | disabled | Database-backed session storage via SQLx |
full | disabled | Enables all middleware features |
§Middleware Ordering
Middleware execution order matters. A typical recommended order:
RequestIdMiddleware- Generate request ID firstLoggingMiddleware- Log all requestsTracingMiddleware- Start tracing spanSecurityMiddleware- Apply security headersCorsMiddleware- Handle CORS preflightSessionMiddleware- Load sessionAuthenticationMiddleware- Authenticate userCsrfMiddleware- Validate CSRF tokenRateLimitMiddleware- Apply rate limits- Application handlers
Re-exports§
pub use allowed_hosts::AllowedHostsConfig;pub use allowed_hosts::AllowedHostsMiddleware;pub use broken_link::BrokenLinkConfig;pub use broken_link::BrokenLinkEmailsMiddleware;pub use cache::CacheConfig;pub use cache::CacheKeyStrategy;pub use cache::CacheMiddleware;pub use cache::CacheStore;pub use circuit_breaker::CircuitBreakerConfig;pub use circuit_breaker::CircuitBreakerMiddleware;pub use circuit_breaker::CircuitState;pub use common::CommonConfig;pub use common::CommonMiddleware;pub use conditional::ConditionalGetMiddleware;pub use csp::CspConfig;pub use csp::CspMiddleware;pub use csp::CspNonce;pub use csp_helpers::csp_nonce_attr;pub use csp_helpers::get_csp_nonce;pub use csrf::CsrfMiddleware;pub use csrf::CsrfMiddlewareConfig;pub use etag::ETagConfig;pub use etag::ETagMiddleware;pub use flatpages::Flatpage;pub use flatpages::FlatpageStore;pub use flatpages::FlatpagesConfig;pub use flatpages::FlatpagesMiddleware;pub use honeypot::HoneypotError;pub use honeypot::HoneypotField;pub use https_redirect::HttpsRedirectConfig;pub use https_redirect::HttpsRedirectMiddleware;pub use locale::LocaleConfig;pub use locale::LocaleMiddleware;pub use logging::LoggingConfig;pub use logging::LoggingMiddleware;pub use messages::CookieStorage;pub use messages::Message;pub use messages::MessageLevel;pub use messages::MessageStorage;pub use messages::SessionStorage;pub use metrics::MetricsConfig;pub use metrics::MetricsMiddleware;pub use metrics::MetricsStore;pub use redirect_fallback::RedirectFallbackMiddleware;pub use redirect_fallback::RedirectResponseConfig;pub use request_id::REQUEST_ID_HEADER;pub use request_id::RequestIdConfig;pub use request_id::RequestIdMiddleware;pub use session::SessionConfig;pub use session::SessionData;pub use session::SessionMiddleware;pub use session::SessionStore;pub use site::SITE_ID_HEADER;pub use site::Site;pub use site::SiteConfig;pub use site::SiteMiddleware;pub use site::SiteRegistry;pub use timeout::TimeoutConfig;pub use timeout::TimeoutMiddleware;pub use tracing::PARENT_SPAN_ID_HEADER;pub use tracing::SPAN_ID_HEADER;pub use tracing::Span;pub use tracing::SpanStatus;pub use tracing::TRACE_ID_HEADER;pub use tracing::TraceStore;pub use tracing::TracingConfig;pub use tracing::TracingMiddleware;pub use xframe::XFrameOptions;pub use xframe::XFrameOptionsMiddleware;pub use xss::XssConfig;pub use xss::XssError;pub use xss::XssProtector;
Modules§
- allowed_
hosts - Allowed Hosts Middleware
- auth
- Session-based authentication middleware (requires
sessionsfeature). - broken_
link - Broken link detection middleware
- cache
- Cache Middleware
- circuit_
breaker - Circuit Breaker Middleware
- common
- Common middleware utilities
- conditional
- Conditional GET Middleware
- csp
- Content Security Policy (CSP) Middleware
- csp_
helpers - CSP Helper Functions
- csrf
- CSRF (Cross-Site Request Forgery) protection middleware for Reinhardt
- etag
- ETag Middleware
- flatpages
- Flatpages middleware
- honeypot
- Honeypot field for bot detection
- https_
redirect - HTTPS Redirect Middleware
- locale
- Locale detection middleware
- logging
- Structured request/response logging with configurable formats.
- messages
- Messages middleware
- metrics
- Metrics middleware
- redirect_
fallback - Redirect fallback middleware
- request_
id - Request ID middleware
- session
- Session Middleware
- site
- Site middleware
- timeout
- Timeout middleware for limiting request processing time
- tracing
- Tracing middleware
- xframe
- X-Frame-Options Middleware
- xss
- XSS (Cross-Site Scripting) protection utilities
Structs§
- Csrf
Config - CSRF configuration
- Csrf
Meta - CSRF metadata
- Csrf
Token - CSRF token
- Invalid
Token Format - Invalid token format error
- Middleware
Chain - Middleware chain - composes multiple middleware into a single handler.
- Reject
Request - CSRF token validation error
Enums§
- Same
Site - SameSite cookie attribute
Constants§
- CSRF_
ALLOWED_ CHARS - Allowed characters for CSRF tokens (alphanumeric)
- CSRF_
SECRET_ LENGTH - CSRF secret length (32 characters)
- CSRF_
SESSION_ KEY - CSRF session key
- CSRF_
TOKEN_ LENGTH - CSRF token length (64 characters)
- REASON_
BAD_ ORIGIN - Rejection reason: Origin header does not match any trusted origins.
- REASON_
BAD_ REFERER - Rejection reason: Referer header does not match any trusted origins.
- REASON_
CSRF_ TOKEN_ MISSING - Rejection reason: CSRF token is missing from the request.
- REASON_
INCORRECT_ LENGTH - Rejection reason: CSRF token has an incorrect length.
- REASON_
INSECURE_ REFERER - Rejection reason: Referer uses HTTP while the host uses HTTPS.
- REASON_
INVALID_ CHARACTERS - Rejection reason: CSRF token contains invalid characters.
- REASON_
MALFORMED_ REFERER - Rejection reason: Referer header is malformed.
- REASON_
NO_ CSRF_ COOKIE - Rejection reason: CSRF cookie is not set.
- REASON_
NO_ REFERER - Rejection reason: Referer header is missing.
Traits§
- Handler
- Handler trait for processing requests.
- Middleware
- Middleware trait for request/response processing.
Functions§
- check_
origin - Check origin header
- check_
referer - Check referer header
- check_
token - Check HMAC-based CSRF token validity
- get_
secret - Get CSRF secret as bytes (32 bytes)
- get_
token - Get CSRF token using HMAC-SHA256
- is_
same_ domain - Check if two domains are the same