pub mod bounds;
pub mod csrf;
pub mod headers;
pub mod hsts;
pub mod ip_filter;
pub mod redirect;
pub mod resource_limits;
pub mod utils;
pub mod xss;
pub use bounds::CheckedArithmeticError;
pub use csrf::{CsrfConfig, CsrfMiddleware, CsrfToken};
pub use headers::{ContentSecurityPolicy, SecurityHeadersConfig, SecurityHeadersMiddleware};
pub use hsts::{HstsConfig, HstsMiddleware};
pub use ip_filter::{IpFilterConfig, IpFilterMiddleware, IpFilterMode};
pub use redirect::{RedirectValidationError, is_safe_redirect, validate_redirect_url};
pub use resource_limits::{LimitExceeded, ResourceLimits};
#[allow(deprecated)]
pub use xss::{
escape_css_selector, escape_html, escape_html_content, sanitize_html, strip_tags_safe,
validate_css_selector, validate_html_attr_name,
};
use thiserror::Error;
pub type SecurityResult<T> = Result<T, SecurityError>;
#[non_exhaustive]
#[derive(Debug, Error)]
pub enum SecurityError {
#[error("CSRF validation failed: {0}")]
CsrfValidationFailed(String),
#[error("Missing CSRF token")]
MissingCsrfToken,
#[error("Invalid security configuration: {0}")]
InvalidConfiguration(String),
#[error("Potential XSS detected: {0}")]
XssDetected(String),
}
pub use csrf::{
CSRF_SECRET_LENGTH, CSRF_SESSION_KEY, CSRF_TOKEN_LENGTH, REASON_BAD_ORIGIN, REASON_BAD_REFERER,
REASON_CSRF_TOKEN_MISSING, REASON_INSECURE_REFERER, REASON_MALFORMED_REFERER,
REASON_NO_REFERER, RejectRequest,
};
pub use csrf::{CsrfMeta, check_origin, check_referer, is_same_domain};
pub use csrf::{
check_token_hmac, generate_token_hmac, get_secret_bytes, get_token_hmac, verify_token_hmac,
};