1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use crate::{Vault, VaultRequestMessage, VaultResponseMessage, VaultTrait};
use ockam_core::{Address, Result, ResultMessage, Route};
use ockam_node::{block_future, Context};
use rand::random;
use tracing::debug;
use zeroize::Zeroize;
mod asymmetric_vault;
mod hasher;
mod key_id_vault;
mod secret_vault;
mod signer;
mod symmetric_vault;
mod verifier;
pub use asymmetric_vault::*;
pub use hasher::*;
pub use key_id_vault::*;
pub use secret_vault::*;
pub use signer::*;
pub use symmetric_vault::*;
pub use verifier::*;
pub struct VaultSync {
ctx: Context,
vault_worker_address: Address,
}
impl VaultSync {
pub(crate) async fn send_message(&self, m: VaultRequestMessage) -> Result<()> {
self.ctx
.send(Route::new().append(self.vault_worker_address.clone()), m)
.await
}
pub(crate) async fn receive_message(&mut self) -> Result<VaultResponseMessage> {
self.ctx
.receive::<ResultMessage<VaultResponseMessage>>()
.await?
.take()
.body()
.into()
}
}
impl Clone for VaultSync {
fn clone(&self) -> Self {
self.start_another().unwrap()
}
}
impl VaultSync {
pub fn start_another(&self) -> Result<Self> {
let vault_worker_address = self.vault_worker_address.clone();
let clone = VaultSync::create_with_worker(&self.ctx, &vault_worker_address)?;
Ok(clone)
}
}
impl Zeroize for VaultSync {
fn zeroize(&mut self) {}
}
impl VaultSync {
pub fn create_with_worker(ctx: &Context, vault: &Address) -> Result<Self> {
let address: Address = random();
debug!("Starting VaultSync at {}", &address);
let ctx = block_future(
&ctx.runtime(),
async move { ctx.new_context(address).await },
)?;
Ok(Self {
ctx,
vault_worker_address: vault.clone(),
})
}
pub fn create<T: VaultTrait>(ctx: &Context, vault: T) -> Result<Self> {
let vault_address = Vault::create_with_inner(ctx, vault)?;
Self::create_with_worker(ctx, &vault_address)
}
}