pub struct PersistentSecretsStore { /* private fields */ }Expand description
Persistent secrets store backed by SQLite with encryption.
Secrets are encrypted using XChaCha20-Poly1305 before storage. Metadata is stored alongside secrets for inspection and auditing.
The store uses SQLite with WAL mode for concurrent access.
Implementations§
Source§impl PersistentSecretsStore
impl PersistentSecretsStore
Sourcepub async fn open(path: impl AsRef<Path>, key: EncryptionKey) -> Result<Self>
pub async fn open(path: impl AsRef<Path>, key: EncryptionKey) -> Result<Self>
Opens or creates a persistent secrets store at the given path.
If path is a directory, the database file will be created as
secrets.sqlite inside that directory. If path is a file path,
it will be used directly.
§Arguments
path- Path to the database file or directorykey- Encryption key for encrypting/decrypting secrets
§Errors
Returns SecretsError::Storage if:
- The database cannot be created or opened
- Schema initialization fails
Trait Implementations§
Source§impl SecretsProvider for PersistentSecretsStore
impl SecretsProvider for PersistentSecretsStore
Source§fn get_secret<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Secret>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn get_secret<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Secret>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Retrieve a single secret by scope and name. Read more
Source§fn get_secrets<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
names: &'life2 [&'life3 str],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, Secret>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn get_secrets<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
names: &'life2 [&'life3 str],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, Secret>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Retrieve multiple secrets by scope and names. Read more
Source§fn list_secrets<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<SecretMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_secrets<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<SecretMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List metadata for all secrets in a scope. Read more
Source§fn exists<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn exists<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Check if a secret exists in the given scope. Read more
Source§impl SecretsStore for PersistentSecretsStore
impl SecretsStore for PersistentSecretsStore
Source§fn set_secret<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn set_secret<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Store or update a secret. Read more
Source§fn delete_secret<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_secret<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Delete a secret from the store. Read more
Source§fn rotate_secret<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
) -> Pin<Box<dyn Future<Output = Result<RotationResult>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn rotate_secret<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
) -> Pin<Box<dyn Future<Output = Result<RotationResult>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Rotate a secret: overwrite with a new value and return the version before+after. Read more
Source§fn set_secret_with_affinity<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
_node_affinity: Option<&'life4 NodeAffinity>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn set_secret_with_affinity<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
_node_affinity: Option<&'life4 NodeAffinity>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Store a secret along with an optional
NodeAffinity selector. Read moreSource§fn rotate_secret_with_affinity<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
_node_affinity: Option<&'life4 NodeAffinity>,
) -> Pin<Box<dyn Future<Output = Result<RotationResult>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn rotate_secret_with_affinity<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
scope: &'life1 str,
name: &'life2 str,
value: &'life3 Secret,
_node_affinity: Option<&'life4 NodeAffinity>,
) -> Pin<Box<dyn Future<Output = Result<RotationResult>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Rotate a secret, optionally updating its
NodeAffinity selector. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for PersistentSecretsStore
impl !UnwindSafe for PersistentSecretsStore
impl Freeze for PersistentSecretsStore
impl Send for PersistentSecretsStore
impl Sync for PersistentSecretsStore
impl Unpin for PersistentSecretsStore
impl UnsafeUnpin for PersistentSecretsStore
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more
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>
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 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>
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