Skip to main content

PostgresTlsConfig

Struct PostgresTlsConfig 

Source
pub struct PostgresTlsConfig {
    pub mode: Option<PostgresSslMode>,
    pub ca_bundle_path: Option<PathBuf>,
}
Expand description

Transport security settings for a PostgreSQL connection pool.

Fields§

§mode: Option<PostgresSslMode>

How much transport security to demand, or None to let the connection URL decide.

None is not the same as Some(Prefer). An unset mode leaves the driver to read ?sslmode= out of the URL; forcing Prefer in its place would override an operator’s explicit ?sslmode=require and silently downgrade it to opportunistic encryption. The URL form was the one surface that already failed loudly here, so a config default must not be allowed to quietly outrank it.

§ca_bundle_path: Option<PathBuf>

PEM bundle of certificate authorities to trust when verifying the server.

When set, these roots replace the platform trust store rather than adding to it — a managed-database CA (RDS, Cloud SQL) is normally not in the system store, and an operator who names a CA file means “this CA”, not “this CA or any of the several hundred the OS ships”.

Only consulted by PostgresSslMode::VerifyFull; the weaker modes verify nothing, so supplying a bundle alongside them is rejected by validate rather than silently ignored.

Implementations§

Source§

impl PostgresTlsConfig

Source

pub const fn new(mode: PostgresSslMode) -> PostgresTlsConfig

Settings that explicitly demand mode, using the platform trust store.

Source

pub fn effective_mode(&self) -> PostgresSslMode

The mode the connector should enforce, treating “unset” as libpq’s default.

Used to decide verification, which must be settled before the handshake. An unset mode cannot be verify-full, because the only thing that could have set it is the URL and ?sslmode= tops out at require.

Source

pub fn validate(&self) -> Result<(), FraiseQLError>

Reject combinations whose parts contradict each other.

§Errors

Returns FraiseQLError::Configuration when a CA bundle is supplied for a mode that never verifies a certificate. Accepting it would leave the operator believing the named CA was pinned while the connection authenticated nothing — the shape of defect this module exists to remove.

Source

pub fn warn_if_unverified(&self)

Emit a startup warning when the configured mode encrypts without authenticating the peer.

Scoped to require, which is the mode an operator chooses in order to get transport security and which therefore carries the false confidence: “encrypted” and “encrypted to the right server” are the two things most easily conflated, so the boot log separates them. prefer is the default and promises nothing, so warning on it would be noise on every boot.

Source

pub fn connector(&self) -> Result<PostgresConnector, FraiseQLError>

Build the connector deadpool should create connections with.

§Errors

Returns FraiseQLError::Configuration if the settings contradict themselves, if the CA bundle cannot be read or contains no usable certificate, or if no trust anchors are available for a verifying mode.

Trait Implementations§

Source§

impl Clone for PostgresTlsConfig

Source§

fn clone(&self) -> PostgresTlsConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PostgresTlsConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for PostgresTlsConfig

Source§

fn default() -> PostgresTlsConfig

Returns the “default value” for a type. Read more
Source§

impl Eq for PostgresTlsConfig

Source§

impl PartialEq for PostgresTlsConfig

Source§

fn eq(&self, other: &PostgresTlsConfig) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for PostgresTlsConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more