use log::{error, info, warn};
use merka_vault::database::{DatabaseManager, VaultCredentials};
use std::io;
pub fn save_vault_credentials(
db_manager: &DatabaseManager,
credentials: &VaultCredentials,
) -> Result<(), io::Error> {
if credentials.root_token.is_empty() {
warn!("Root token is empty, but saving credentials anyway");
}
match db_manager.save_vault_credentials(credentials) {
Ok(_) => {
info!("✅ Vault credentials successfully saved to database");
info!(" Root token length: {}", credentials.root_token.len());
info!(" Root unseal keys: {}", credentials.root_unseal_keys.len());
info!(" Sub token length: {}", credentials.sub_token.len());
info!(
" Transit token length: {}",
credentials.transit_token.len()
);
Ok(())
}
Err(e) => {
error!("Failed to save credentials to database: {}", e);
Err(io::Error::new(
io::ErrorKind::Other,
format!("Database error: {}", e),
))
}
}
}
pub fn load_vault_credentials(db_manager: &DatabaseManager) -> Result<VaultCredentials, io::Error> {
match db_manager.load_vault_credentials() {
Ok(credentials) => {
info!("Loaded vault credentials from database");
info!(" Root token length: {}", credentials.root_token.len());
info!(" Root unseal keys: {}", credentials.root_unseal_keys.len());
info!(" Sub token length: {}", credentials.sub_token.len());
info!(
" Transit token length: {}",
credentials.transit_token.len()
);
Ok(credentials)
}
Err(e) => {
warn!("Failed to load credentials from database: {}", e);
Err(io::Error::new(
io::ErrorKind::Other,
format!("Database error: {}", e),
))
}
}
}
pub fn setup_test_database(db_name: &str) -> Result<DatabaseManager, io::Error> {
let db_path = format!("{}.db", db_name);
let _ = std::fs::remove_file(&db_path);
DatabaseManager::new(&db_path).map_err(|e| {
error!("Failed to create database manager: {}", e);
io::Error::new(io::ErrorKind::Other, format!("Database error: {}", e))
})
}