pub struct AdminConfig {
pub bind: String,
pub tls: AdminTlsConfig,
pub rbac: Option<AdminRbacConfig>,
pub api_tokens: Option<AdminApiTokensConfig>,
pub audit: Option<AdminAuditConfig>,
}Expand description
Admin listener configuration (DW-022).
Fields§
§bind: StringBind address of the admin listener. Default 127.0.0.1:2019
(loopback-only; frozen decision 6) — override only to place the
admin API on a dedicated management interface, and rely on mTLS
for access control: there is no token layer in v1 (the client
certificate IS the auth).
tls: AdminTlsConfigmTLS material for the admin listener; all three files are required.
rbac: Option<AdminRbacConfig>SEC-01: RBAC bindings for mTLS-authenticated admin clients. Maps client certificate fingerprints (SHA-256 of the cert DER) to roles. When present, a valid client certificate with NO binding is denied (fail-closed: no implicit admin). When absent (the default), any CA-valid client certificate is treated as full admin (the v1 behavior — backward compatible).
api_tokens: Option<AdminApiTokensConfig>SEC-01: API token authentication. When present, the admin API
accepts an Authorization: Bearer <token> header in addition
to mTLS. Tokens are hashed (SHA-256) at rest; the config lists
token hashes, not plaintext tokens. When absent (the default),
only mTLS is accepted (the v1 behavior).
audit: Option<AdminAuditConfig>SEC-01: Admin audit log. When present, all mutating admin actions (PATCH /config, purge) are recorded in an append-only audit table in the state store. Each entry includes the actor (cert fingerprint or token hash), the action, the before/after config hash, and a timestamp. When absent (the default), no audit log is kept.
Trait Implementations§
Source§impl Clone for AdminConfig
impl Clone for AdminConfig
Source§fn clone(&self) -> AdminConfig
fn clone(&self) -> AdminConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AdminConfig
impl Debug for AdminConfig
Source§impl<'de> Deserialize<'de> for AdminConfig
impl<'de> Deserialize<'de> for AdminConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for AdminConfig
impl JsonSchema for AdminConfig
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for AdminConfig
impl PartialEq for AdminConfig
Source§impl Serialize for AdminConfig
impl Serialize for AdminConfig
impl StructuralPartialEq for AdminConfig
Auto Trait Implementations§
impl Freeze for AdminConfig
impl RefUnwindSafe for AdminConfig
impl Send for AdminConfig
impl Sync for AdminConfig
impl Unpin for AdminConfig
impl UnwindSafe for AdminConfig
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§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