pub struct TlsProfileMap { /* private fields */ }Expand description
Bundle of precompiled rustls configs for the peer plane, keyed by datacenter name plus an optional default profile used as a fallback for any DC without an explicit entry.
The map is built once at startup by
TlsProfileMap::build and shared (cheaply, every member
is an Arc under the hood) across the dnode listener and
every per-peer outbound supervisor. Lookups are O(log n) in
the number of DCs.
§Examples
use std::collections::BTreeMap;
use std::path::PathBuf;
use dynomite::net::tls::{TlsProfileMap, TlsProfileSpec};
let mut per_dc = BTreeMap::new();
per_dc.insert(
"dc1".to_string(),
TlsProfileSpec {
cert: PathBuf::from("/etc/dynomite/dc1.pem"),
key: PathBuf::from("/etc/dynomite/dc1.key"),
ca: None,
},
);
let map = TlsProfileMap::build(None, per_dc).unwrap();
assert!(map.client_config_for_dc("dc1").is_some());
assert!(map.client_config_for_dc("dc-without-profile").is_none());Implementations§
Source§impl TlsProfileMap
impl TlsProfileMap
Sourcepub fn build(
default: Option<TlsProfileSpec>,
per_dc: BTreeMap<String, TlsProfileSpec>,
) -> Result<Self, TlsError>
pub fn build( default: Option<TlsProfileSpec>, per_dc: BTreeMap<String, TlsProfileSpec>, ) -> Result<Self, TlsError>
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
True when no profile (default or per-DC) is configured. In this state the peer plane runs plaintext.
Sourcepub fn server_config_for_dc(&self, dc: &str) -> Option<Arc<ServerConfig>>
pub fn server_config_for_dc(&self, dc: &str) -> Option<Arc<ServerConfig>>
Server config to use for a connection negotiated with a
peer in dc. Returns the per-DC entry if present,
otherwise the default profile, otherwise None.
Sourcepub fn client_config_for_dc(&self, dc: &str) -> Option<Arc<ClientConfig>>
pub fn client_config_for_dc(&self, dc: &str) -> Option<Arc<ClientConfig>>
Client config to use when dialing a peer in dc.
Returns the per-DC entry if present, otherwise the
default profile, otherwise None.
Sourcepub fn default_server_config(&self) -> Option<Arc<ServerConfig>>
pub fn default_server_config(&self) -> Option<Arc<ServerConfig>>
Default server config (the legacy / fallback profile).
Sourcepub fn default_client_config(&self) -> Option<Arc<ClientConfig>>
pub fn default_client_config(&self) -> Option<Arc<ClientConfig>>
Default client config (the legacy / fallback profile).
Sourcepub fn requires_client_auth(&self) -> bool
pub fn requires_client_auth(&self) -> bool
True when at least one configured profile carries a CA bundle. When set, the SNI listener requires every inbound peer to present a certificate signed by one of the configured CAs (mTLS).
Sourcepub fn build_sni_acceptor(&self) -> Result<Option<TlsAcceptor>, TlsError>
pub fn build_sni_acceptor(&self) -> Result<Option<TlsAcceptor>, TlsError>
Build a single tokio_rustls::TlsAcceptor whose
ServerConfig picks the certificate by SNI hostname
(dc-<dc-name>.dynomite.local) and falls back to the
default profile when SNI is missing or does not match.
Returns None when Self::is_empty is true.
§Errors
Returns TlsError::Rustls when rustls rejects the
assembled root store / verifier (e.g. a malformed CA
certificate that slipped through the loader).
Trait Implementations§
Source§impl Clone for TlsProfileMap
impl Clone for TlsProfileMap
Source§fn clone(&self) -> TlsProfileMap
fn clone(&self) -> TlsProfileMap
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TlsProfileMap
impl Debug for TlsProfileMap
Source§impl Default for TlsProfileMap
impl Default for TlsProfileMap
Source§fn default() -> TlsProfileMap
fn default() -> TlsProfileMap
Auto Trait Implementations§
impl Freeze for TlsProfileMap
impl !RefUnwindSafe for TlsProfileMap
impl Send for TlsProfileMap
impl Sync for TlsProfileMap
impl Unpin for TlsProfileMap
impl UnsafeUnpin for TlsProfileMap
impl !UnwindSafe for TlsProfileMap
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,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.