use crate::secure_channel::Role;
use crate::Identifier;
use async_trait::async_trait;
use core::fmt::Debug;
use ockam_core::compat::boxed::Box;
use ockam_core::{Address, Result};
use ockam_vault::AeadSecretKeyHandle;
#[derive(Clone, Eq, Debug, PartialEq)]
pub struct PersistedSecureChannel {
role: Role,
my_identifier: Identifier,
their_identifier: Identifier,
decryptor_remote: Address,
decryptor_api: Address,
decryption_key_handle: AeadSecretKeyHandle,
}
impl PersistedSecureChannel {
pub(crate) fn new(
role: Role,
my_identifier: Identifier,
their_identifier: Identifier,
decryptor_remote: Address,
decryptor_api: Address,
decryption_key_handle: AeadSecretKeyHandle,
) -> Self {
Self {
role,
my_identifier,
their_identifier,
decryptor_remote,
decryptor_api,
decryption_key_handle,
}
}
pub fn role(&self) -> Role {
self.role
}
pub fn my_identifier(&self) -> &Identifier {
&self.my_identifier
}
pub fn their_identifier(&self) -> &Identifier {
&self.their_identifier
}
pub fn decryptor_remote(&self) -> &Address {
&self.decryptor_remote
}
pub fn decryptor_api(&self) -> &Address {
&self.decryptor_api
}
pub fn decryption_key_handle(&self) -> &AeadSecretKeyHandle {
&self.decryption_key_handle
}
}
#[async_trait]
pub trait SecureChannelRepository: Send + Sync + 'static {
async fn get(
&self,
decryptor_remote_address: &Address,
) -> Result<Option<PersistedSecureChannel>>;
async fn put(&self, secure_channel: PersistedSecureChannel) -> Result<()>;
async fn delete(&self, decryptor_remote_address: &Address) -> Result<()>;
}