pub struct AppState {Show 17 fields
pub config: Arc<Config>,
pub secrets: Arc<ResolvedSecrets>,
pub db: AnyPool,
pub db_ro: AnyPool,
pub db_kind: DbKind,
pub cas: Arc<IndexMap<String, Arc<CaState>>>,
pub default_ca_id: Arc<String>,
pub otp_store: Option<Arc<OtpStore>>,
pub hsm: Option<Arc<HsmContext>>,
pub audit: Arc<AuditState>,
pub failure_tracker: Arc<FailureTracker>,
pub ha_manager: Option<Arc<HaManager>>,
pub gss_cred: Option<Arc<dyn Any + Send + Sync>>,
pub gssapi_require_crypto: bool,
pub dogtag: Option<Arc<DogtagPool>>,
pub star_manager: Option<Arc<StarManager>>,
pub startup_time: Instant,
}Expand description
Top-level application state cloned into every axum handler.
Fields§
§config: Arc<Config>Parsed and validated configuration.
secrets: Arc<ResolvedSecrets>Resolved secrets (never serialized to disk).
db: AnyPoolPrimary database connection pool (read-write).
db_ro: AnyPoolRead-only database connection pool.
For SQLite WAL mode, this is a ?mode=ro pool that never acquires
the write lock, enabling concurrent reads during writes. For
PostgreSQL/MariaDB, this is a clone of db (MVCC handles
concurrency natively).
db_kind: DbKindDatabase backend discriminant (drives BEGIN IMMEDIATE for SQLite).
cas: Arc<IndexMap<String, Arc<CaState>>>All CAs keyed by their id, in config declaration order.
default_ca_id: Arc<String>The CA designated as the default for unlabeled EST requests.
otp_store: Option<Arc<OtpStore>>OTP store (present when [otp] is enabled).
hsm: Option<Arc<HsmContext>>HSM context (present when [hsm] is configured).
audit: Arc<AuditState>Shared audit state (overflow flag, alarm counter).
failure_tracker: Arc<FailureTracker>Authentication failure tracker / lockout enforcer (FIA_AFL.1).
Always present; a max_failures = 0 policy makes every operation a
no-op so the control can be disabled without a None branch at call
sites.
ha_manager: Option<Arc<HaManager>>HA manager for multi-CA failover (present when HA is configured).
gss_cred: Option<Arc<dyn Any + Send + Sync>>Server-side GSSAPI credential for SPNEGO authentication.
None when GSSAPI is not configured. When present, the auth
layer uses it to validate Authorization: Negotiate tokens.
gssapi_require_crypto: boolWhether GSSAPI requires cryptographic ticket verification.
When true (the default), structural-only parsing of Kerberos
tokens is rejected — libgssapi integration is required. When
false, the server accepts structural parsing and returns a
krb5-sname: prefixed identity (the service name from the ticket,
not a verified client identity).
dogtag: Option<Arc<DogtagPool>>Dogtag PKI client pool (present when [dogtag] is configured).
Routes enrollment, CMC, and key generation requests to Dogtag CA/KRA backends when configured as an alternative to direct signing.
star_manager: Option<Arc<StarManager>>STAR certificate manager (present when [star] is enabled).
Manages active STAR orders and their renewal state (RFC 8739).
startup_time: InstantTimestamp when the server process started.
Used for uptime reporting in health endpoints and session expiry calculations.
Implementations§
Source§impl AppState
impl AppState
Sourcepub fn default_ca(&self) -> &Arc<CaState> ⓘ
pub fn default_ca(&self) -> &Arc<CaState> ⓘ
Return the default CA state.
§Panics
Panics if default_ca_id is not present in cas. This indicates
a bug in the startup code — Config::validate() ensures the
default CA exists.
Sourcepub fn get_ca(&self, ca_id: &str) -> Option<&Arc<CaState>>
pub fn get_ca(&self, ca_id: &str) -> Option<&Arc<CaState>>
Look up a CA by its identifier. Returns None for unknown IDs.
Sourcepub fn default_ca_cert_der(&self) -> Option<Vec<u8>>
pub fn default_ca_cert_der(&self) -> Option<Vec<u8>>
Returns the DER-encoded certificate of the default CA.
Used by the OCSP client (RFC 6960) to build CertID structures for
revocation checking of client certificates (RHELBU-3536 R21).
Returns None if no default CA is configured or the cert is empty.
Sourcepub async fn admit_enrollment(
&self,
identity: &str,
operation: &str,
) -> Result<(), KipukaError>
pub async fn admit_enrollment( &self, identity: &str, operation: &str, ) -> Result<(), KipukaError>
Required durable admission event before any certificate/key mutation.
Sourcepub async fn record_audit_event(&self, event_type: &str, detail: &str)
pub async fn record_audit_event(&self, event_type: &str, detail: &str)
Record an audit event, logging (but not propagating) any DB error.
Convenience wrapper that bundles the DB pool and audit state so call sites only need to pass the event type and detail.
Sourcepub async fn record_audit_event_with_actor(
&self,
event_type: &str,
actor: &str,
detail: &str,
)
pub async fn record_audit_event_with_actor( &self, event_type: &str, actor: &str, detail: &str, )
Record an audit event that carries a responsible actor identity.
Populates the actor column (via AuditEvent::with_operator) so the
FAU_SAR.1 review endpoint can filter by actor. Used where the
responsible principal is known — enrollment-authorization denials
(FDP_ACF.1) and audit-trail review — so those events are attributable
rather than leaving actor NULL and the filter inert.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AppState
impl !RefUnwindSafe for AppState
impl Send for AppState
impl Sync for AppState
impl Unpin for AppState
impl UnsafeUnpin for AppState
impl !UnwindSafe for AppState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more