use ais_keystore_lib::{
get_key_data,
grpc::keystore::{key_store_client::KeyStoreClient, KeyStatus},
key_store::store::generate_new_key,
migrate_key,
shared::consts::{ADDR, PORT},
store_key,
};
use dusa_collection_utils::platform::functions::generate_random_string;
use std::time::{Duration, Instant};
use tonic::transport::Channel;
#[tokio::main]
async fn main() {
let key_id = generate_random_string(10).unwrap();
let key_value = generate_new_key(Some(32));
let addr = format!("http://{}:{}", ADDR, PORT);
let mut client: KeyStoreClient<Channel> = KeyStoreClient::connect(addr).await.unwrap();
store_key(&mut client, key_id.clone(), key_value, Some(60))
.await
.unwrap();
println!("Key '{}' stored with default ttl settings", key_id);
let mut start_time = Instant::now();
loop {
tokio::time::sleep(Duration::from_secs(5)).await;
let elapsed = start_time.elapsed().as_secs();
let key_data = get_key_data(&mut client, key_id.clone(), None)
.await
.unwrap();
{
let status = KeyStatus::try_from(key_data.status).unwrap_or(KeyStatus::Invalid);
println!("Key status: {:?}", status);
let time_left = if key_data.ttl > elapsed {
key_data.ttl - elapsed
} else {
0
};
println!("Time left until expiration: {} seconds", time_left);
if status == KeyStatus::Expired {
println!("Key '{}' has expired. Attempting migration.", key_id);
match migrate_key(&mut client, key_id.clone()).await {
Ok(_) => {
println!("Migration successful");
start_time = Instant::now();
}
Err(_) => {
println!("Unexpected response during migration");
}
}
}
}
}
}