mirror of
https://github.com/openai/codex.git
synced 2026-04-24 14:45:27 +00:00
refactor(secrets): add backend trait
This commit is contained in:
@@ -88,9 +88,16 @@ impl Default for SecretsBackendKind {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub trait SecretsBackend: Send + Sync {
|
||||
fn set(&self, scope: &SecretScope, name: &SecretName, value: &str) -> Result<()>;
|
||||
fn get(&self, scope: &SecretScope, name: &SecretName) -> Result<Option<String>>;
|
||||
fn delete(&self, scope: &SecretScope, name: &SecretName) -> Result<bool>;
|
||||
fn list(&self, scope_filter: Option<&SecretScope>) -> Result<Vec<SecretListEntry>>;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct SecretsManager {
|
||||
backend: Arc<LocalSecretsBackend>,
|
||||
backend: Arc<dyn SecretsBackend>,
|
||||
}
|
||||
|
||||
impl SecretsManager {
|
||||
@@ -104,11 +111,12 @@ impl SecretsManager {
|
||||
backend_kind: SecretsBackendKind,
|
||||
keyring_store: Arc<dyn KeyringStore>,
|
||||
) -> Self {
|
||||
match backend_kind {
|
||||
SecretsBackendKind::Local => Self {
|
||||
backend: Arc::new(LocalSecretsBackend::new(codex_home, keyring_store)),
|
||||
},
|
||||
}
|
||||
let backend: Arc<dyn SecretsBackend> = match backend_kind {
|
||||
SecretsBackendKind::Local => {
|
||||
Arc::new(LocalSecretsBackend::new(codex_home, keyring_store))
|
||||
}
|
||||
};
|
||||
Self { backend }
|
||||
}
|
||||
|
||||
pub fn set(&self, scope: &SecretScope, name: &SecretName, value: &str) -> Result<()> {
|
||||
|
||||
@@ -25,6 +25,7 @@ use tracing::warn;
|
||||
use super::SecretListEntry;
|
||||
use super::SecretName;
|
||||
use super::SecretScope;
|
||||
use super::SecretsBackend;
|
||||
use super::compute_keyring_account;
|
||||
use super::keyring_service;
|
||||
|
||||
@@ -169,6 +170,24 @@ impl LocalSecretsBackend {
|
||||
}
|
||||
}
|
||||
|
||||
impl SecretsBackend for LocalSecretsBackend {
|
||||
fn set(&self, scope: &SecretScope, name: &SecretName, value: &str) -> Result<()> {
|
||||
LocalSecretsBackend::set(self, scope, name, value)
|
||||
}
|
||||
|
||||
fn get(&self, scope: &SecretScope, name: &SecretName) -> Result<Option<String>> {
|
||||
LocalSecretsBackend::get(self, scope, name)
|
||||
}
|
||||
|
||||
fn delete(&self, scope: &SecretScope, name: &SecretName) -> Result<bool> {
|
||||
LocalSecretsBackend::delete(self, scope, name)
|
||||
}
|
||||
|
||||
fn list(&self, scope_filter: Option<&SecretScope>) -> Result<Vec<SecretListEntry>> {
|
||||
LocalSecretsBackend::list(self, scope_filter)
|
||||
}
|
||||
}
|
||||
|
||||
fn generate_passphrase() -> Result<SecretString> {
|
||||
let mut bytes = [0_u8; 32];
|
||||
let mut rng = OsRng;
|
||||
|
||||
Reference in New Issue
Block a user