Skip to main content

SecretBuilder

Struct SecretBuilder 

Source
pub struct SecretBuilder { /* private fields */ }
Expand description

Fluent builder for a single SecretEntry.

ⓘ
SecretBuilder::new()
    .env("OPENAI_API_KEY")
    .value(api_key)
    .allow("api.openai.com")
    .build()

Implementations§

Source§

impl SecretBuilder

Source

pub fn new() -> Self

Start building a secret.

Source

pub fn env(self, var: impl Into<String>) -> Self

Set the environment variable to expose the placeholder as (required).

Names must be non-empty and must not contain = or NUL. They are not restricted to shell-identifier syntax.

Source

pub fn value(self, value: impl Into<String>) -> Self

Set the secret value inline (mutually exclusive with source).

Prefer source for durable configs: an inline value is persisted verbatim in the sandbox spec, whereas a source reference is resolved host-side at spawn time and never stored at rest.

Source

pub fn source(self, source: SecretSource) -> Self

Resolve the value from a host-side source reference at spawn time (mutually exclusive with value).

The durable config records only the reference; the plaintext is read from the host environment when the sandbox starts, so it never lands in the database.

Source

pub fn placeholder(self, placeholder: impl Into<String>) -> Self

Set a custom placeholder string.

Placeholders must be non-empty, at most 1024 bytes, and must not contain NUL, CR, or LF. If not set, auto-generated as $MSB_<env_var>.

Source

pub fn allow(self, host: impl AsRef<str>) -> Self

Add a host allowed to receive the substituted secret value.

Once the secret’s host and TLS identity checks pass, this host may also receive unchanged placeholders outside enabled substitution locations.

*.example.com matches the domain and its subdomains. Use allow_any_host_dangerous for *.

Source

pub fn allow_any_host_dangerous(self, i_understand_the_risk: bool) -> Self

Allow for any host. Dangerous: secret can be exfiltrated to any destination. Requires explicit acknowledgment.

Source

pub fn allow_placeholder_for(self, host: impl AsRef<str>) -> Self

Allow a host to receive the unchanged placeholder where substitution does not apply.

Exact hosts, *.example.com, and * are accepted. Repeated calls are additive. Enabled substitution locations still receive the real secret on allowed hosts.

Source

pub fn allow_passthrough_for(self, host: impl AsRef<str>) -> Self

👎Deprecated:

use allow_placeholder_for instead

Deprecated alias for allow_placeholder_for.

Source

pub fn violation_action(self, action: SecretViolationAction) -> Self

Set the blocking action for this secret.

Source

pub fn require_tls_identity(self, enabled: bool) -> Self

Require verified TLS identity before substituting (default: true).

Source

pub fn substitute_in_headers(self, enabled: bool) -> Self

Configure header substitution (default: true).

Source

pub fn substitute_in_header_fields( self, fields: impl IntoIterator<Item = impl Into<String>>, ) -> Self

Restrict header substitution to specific header field names.

Enables header substitution and substitutes the placeholder only in the named fields (matched ASCII case-insensitively). Passing an empty list restores the default of substituting in every header field. Names must be valid HTTP field names.

Prefer restricting to the intended credential header (for example authorization). Substituting in every header lets an untrusted guest put the placeholder in a header the upstream host echoes back, which can leak the real secret to the guest through that response.

Source

pub fn substitute_in_query(self, enabled: bool) -> Self

Configure query parameter substitution (default: false).

Source

pub fn substitute_in_body(self, enabled: bool) -> Self

Configure HTTP/1 body substitution (default: false).

Fixed-length bodies up to 16 MiB update Content-Length; larger fixed-length bodies are blocked. Chunked bodies are decoded and re-encoded with fresh chunk sizes. Encoded bodies pass through unchanged.

Source

pub fn build(self) -> SecretEntry

Consume the builder and return a SecretEntry.

Exactly one of value or source must be set. A source-backed entry carries an empty durable value; it is resolved host-side at spawn time.

§Panics

Panics if env or at least one allowed host was not set, or if neither (or both) of value/source was set.

Trait Implementations§

Source§

impl Default for SecretBuilder

Source§

fn default() -> Self

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

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_mut_any(&mut self) -> &mut (dyn Any + 'static)

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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