Files
Triple-C/app/src-tauri/src/storage/secure.rs
Josh Knapp 97a0745ead Initial commit: Triple-C app, container, and CI
Tauri v2 desktop app (React/TypeScript + Rust) for managing
containerized Claude Code environments. Includes Gitea Actions
workflow for building and pushing the sandbox container image,
and a BUILDING.md guide for manual app builds on Linux and Windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 04:29:51 +00:00

39 lines
1.2 KiB
Rust

const SERVICE_NAME: &str = "triple-c";
const API_KEY_USER: &str = "anthropic-api-key";
pub fn store_api_key(key: &str) -> Result<(), String> {
let entry = keyring::Entry::new(SERVICE_NAME, API_KEY_USER)
.map_err(|e| format!("Keyring error: {}", e))?;
entry
.set_password(key)
.map_err(|e| format!("Failed to store API key: {}", e))
}
pub fn get_api_key() -> Result<Option<String>, String> {
let entry = keyring::Entry::new(SERVICE_NAME, API_KEY_USER)
.map_err(|e| format!("Keyring error: {}", e))?;
match entry.get_password() {
Ok(key) => Ok(Some(key)),
Err(keyring::Error::NoEntry) => Ok(None),
Err(e) => Err(format!("Failed to retrieve API key: {}", e)),
}
}
pub fn delete_api_key() -> Result<(), String> {
let entry = keyring::Entry::new(SERVICE_NAME, API_KEY_USER)
.map_err(|e| format!("Keyring error: {}", e))?;
match entry.delete_credential() {
Ok(()) => Ok(()),
Err(keyring::Error::NoEntry) => Ok(()),
Err(e) => Err(format!("Failed to delete API key: {}", e)),
}
}
pub fn has_api_key() -> Result<bool, String> {
match get_api_key() {
Ok(Some(_)) => Ok(true),
Ok(None) => Ok(false),
Err(e) => Err(e),
}
}