#![forbid(unsafe_code)]
#![warn(missing_docs)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#[cfg(feature = "aide")]
#[cfg_attr(docsrs, doc(cfg(feature = "aide")))]
pub mod aide;
#[cfg(feature = "axum")]
#[cfg_attr(docsrs, doc(cfg(feature = "axum")))]
pub mod axum;
pub mod checks;
pub mod client;
pub mod clock;
pub mod config;
pub mod cookie;
pub mod error;
pub mod event;
pub mod fingerprint;
mod guard;
pub mod intel;
pub mod risk;
pub mod store;
pub mod subject;
mod telemetry;
#[cfg(any(test, feature = "testing"))]
#[cfg_attr(docsrs, doc(cfg(feature = "testing")))]
pub mod testing;
pub mod token;
#[cfg(feature = "testing")]
#[doc(hidden)]
pub mod __bench {
use crate::{ClientContext, Fingerprint, IpInfo, fingerprint::UaCache};
#[derive(Debug)]
pub struct CachedCapture(UaCache);
impl CachedCapture {
pub fn new(capacity: usize) -> Self {
Self(UaCache::new(capacity))
}
pub fn capture(&self, ctx: &ClientContext, info: IpInfo) -> Fingerprint {
Fingerprint::capture_cached(ctx, info, &self.0)
}
}
}
#[cfg(feature = "axum")]
#[cfg_attr(docsrs, doc(cfg(feature = "axum")))]
pub use crate::axum::{GuardLayer, GuardService, Sessions};
pub use checks::{Check, Checks, Decision, Thresholds, UnknownCheck};
pub use client::{ClientContext, HeaderSource, canonical_ip, resolve_client_ip};
pub use clock::{Clock, ManualClock, SystemClock};
pub use config::{GuardConfig, GuardConfigBuilder, Mode, RotationConfig, StepUpPolicy};
pub use cookie::{CookieConfig, SameSite, find_cookie};
pub use error::{ConfigError, GuardError, StoreError};
pub use event::{EventKind, SessionEvent};
pub use fingerprint::{Baseline, Fingerprint, ip_prefix};
pub use guard::{
AuthSession, Authenticated, Guard, GuardBuilder, IssuedToken, NewSession, Outcome, PurgeReport, Rejection,
SessionInfo, StepUpOutcome,
};
pub use intel::{IpInfo, IpIntel, NoIpIntel};
#[cfg(feature = "maxmind")]
#[cfg_attr(docsrs, doc(cfg(feature = "maxmind")))]
pub use intel::{MaxMindDatabase, MaxMindError, MaxMindIntel};
pub use risk::{Assessment, assess};
#[cfg(feature = "postgres")]
#[cfg_attr(docsrs, doc(cfg(feature = "postgres")))]
pub use store::PgStore;
#[cfg(feature = "valkey")]
#[cfg_attr(docsrs, doc(cfg(feature = "valkey")))]
pub use store::ValkeyStore;
pub use store::{
MemoryStore, Rotation, SessionRecord, SessionStore, SessionUpdate, Supersede, TokenLookup, TokenRecord,
};
pub use subject::Subject;
pub use token::{SessionToken, TOKEN_LEN, TokenHash, is_well_formed};
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
struct ReadmeDoctests;