use crate::authenticators::ApplicationName;
use log::error;
use parsec_interface::requests::{ProviderID, ResponseStatus};
use serde::Deserialize;
use std::fmt;
pub mod on_disk_manager;
#[derive(Copy, Clone, Deserialize, Debug)]
pub enum KeyIdManagerType {
OnDisk,
}
#[derive(Deserialize, Debug)]
pub struct KeyIdManagerConfig {
pub name: String,
pub manager_type: KeyIdManagerType,
pub store_path: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct KeyTriple {
app_name: ApplicationName,
provider_id: ProviderID,
key_name: String,
}
impl fmt::Display for KeyTriple {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"Application Name: \"{}\", Provider ID: {}, Key Name: \"{}\"",
self.app_name, self.provider_id, self.key_name
)
}
}
impl KeyTriple {
pub fn new(app_name: ApplicationName, provider_id: ProviderID, key_name: String) -> KeyTriple {
KeyTriple {
app_name,
provider_id,
key_name,
}
}
pub fn belongs_to_provider(&self, provider_id: ProviderID) -> bool {
self.provider_id == provider_id
}
}
pub fn to_response_status(error_string: String) -> ResponseStatus {
error!(
"Converting error string \"{}\" to ResponseStatus:KeyIDManagerError.",
error_string
);
ResponseStatus::KeyIDManagerError
}
pub trait ManageKeyIDs {
fn get(&self, key_triple: &KeyTriple) -> Result<Option<&[u8]>, String>;
fn get_all(&self, provider_id: ProviderID) -> Result<Vec<&KeyTriple>, String>;
fn insert(&mut self, key_triple: KeyTriple, key_id: Vec<u8>)
-> Result<Option<Vec<u8>>, String>;
fn remove(&mut self, key_triple: &KeyTriple) -> Result<Option<Vec<u8>>, String>;
fn exists(&self, key_triple: &KeyTriple) -> Result<bool, String>;
}