Skip to content

Commit 1cba20c

Browse files
committed
feat(rust): implemented ockam proxy vault
1 parent 2ff3b29 commit 1cba20c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2676
-293
lines changed

Cargo.lock

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

implementations/rust/ockam/ockam_api/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ jaq-interpret = "1"
7474
jaq-parse = "1"
7575
jaq-std = "1"
7676
kafka-protocol = "0.13"
77-
log = "0.4"
7877
miette = { version = "7.2.0", features = ["fancy-no-backtrace"] }
7978
minicbor = { version = "0.25.1", default-features = false, features = ["alloc", "derive"] }
8079
nix = { version = "0.29", features = ["signal"] }

implementations/rust/ockam/ockam_api/src/cli_state/cli_state.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use rand::random;
2-
use std::path::{Path, PathBuf};
3-
use tokio::sync::broadcast::{channel, Receiver, Sender};
4-
51
use ockam::SqlxDatabase;
62
use ockam_core::env::get_env_with_default;
73
use ockam_node::database::{DatabaseConfiguration, OCKAM_SQLITE_IN_MEMORY};
84
use ockam_node::Executor;
5+
use rand::random;
6+
use std::path::{Path, PathBuf};
7+
use tokio::sync::broadcast::{channel, Receiver, Sender};
98

109
use crate::cli_state::error::Result;
1110
use crate::cli_state::CliStateError;
@@ -385,10 +384,10 @@ mod tests {
385384

386385
// create 2 identities
387386
let identity1 = cli
388-
.create_identity_with_name_and_vault("identity1", "vault1")
387+
.create_identity_with_name_and_vault(None, "identity1", "vault1")
389388
.await?;
390389
let identity2 = cli
391-
.create_identity_with_name_and_vault("identity2", "vault2")
390+
.create_identity_with_name_and_vault(None, "identity2", "vault2")
392391
.await?;
393392

394393
// create 2 nodes

implementations/rust/ockam/ockam_api/src/cli_state/identities.rs

+48-18
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use ockam::identity::models::ChangeHistory;
33
use ockam::identity::{Identifier, Identity};
44
use ockam_core::errcode::{Kind, Origin};
55
use ockam_core::Error;
6+
use ockam_node::Context;
67
use ockam_vault::{HandleToSecret, SigningSecretKeyHandle};
78

89
use crate::cli_state::{random_name, CliState, Result};
@@ -31,6 +32,7 @@ impl CliState {
3132
#[instrument(skip_all, fields(name = %name, vault_name = %vault_name))]
3233
pub async fn create_identity_with_name_and_vault(
3334
&self,
35+
context: Option<&Context>,
3436
name: &str,
3537
vault_name: &str,
3638
) -> Result<NamedIdentity> {
@@ -39,7 +41,9 @@ impl CliState {
3941
};
4042

4143
let vault = self.get_named_vault(vault_name).await?;
42-
let identities = self.make_identities(self.make_vault(vault).await?).await?;
44+
let vault = self.make_vault(context, vault).await?;
45+
46+
let identities = self.make_identities(vault).await?;
4347
let identity = identities.identities_creation().create_identity().await?;
4448
let named_identity = self
4549
.store_named_identity(&identity, name, vault_name)
@@ -65,9 +69,13 @@ impl CliState {
6569
/// Create an identity associated with a name, using the default vault
6670
/// If there is already an identity with that name, return its identifier
6771
#[instrument(skip_all, fields(name = %name))]
68-
pub async fn create_identity_with_name(&self, name: &str) -> Result<NamedIdentity> {
72+
pub async fn create_identity_with_name(
73+
&self,
74+
context: Option<&Context>,
75+
name: &str,
76+
) -> Result<NamedIdentity> {
6977
let vault = self.get_or_create_default_named_vault().await?;
70-
self.create_identity_with_name_and_vault(name, &vault.name())
78+
self.create_identity_with_name_and_vault(context, name, &vault.name())
7179
.await
7280
}
7381

@@ -77,6 +85,7 @@ impl CliState {
7785
#[instrument(skip_all, fields(name = %name, vault_name = %vault_name, key_id = %key_id))]
7886
pub async fn create_identity_with_key_id(
7987
&self,
88+
context: Option<&Context>,
8089
name: &str,
8190
vault_name: &str,
8291
key_id: &str,
@@ -96,8 +105,10 @@ impl CliState {
96105
key_id.as_bytes().to_vec(),
97106
));
98107

108+
let vault = self.make_vault(context, vault).await?;
109+
99110
// create the identity
100-
let identities = self.make_identities(self.make_vault(vault).await?).await?;
111+
let identities = self.make_identities(vault).await?;
101112
let identifier = identities
102113
.identities_creation()
103114
.identity_builder()
@@ -154,13 +165,14 @@ impl CliState {
154165
#[instrument(skip_all, fields(name = name.clone()))]
155166
pub async fn get_named_identity_or_default(
156167
&self,
168+
context: Option<&Context>,
157169
name: &Option<String>,
158170
) -> Result<NamedIdentity> {
159171
match name {
160172
// Identity specified.
161173
Some(name) => self.get_named_identity(name).await,
162174
// No identity specified.
163-
None => self.get_or_create_default_named_identity().await,
175+
None => self.get_or_create_default_named_identity(context).await,
164176
}
165177
}
166178

@@ -191,7 +203,11 @@ impl CliState {
191203
/// Return a full identity from its name
192204
/// Use the default identity if no name is given
193205
#[instrument(skip_all, fields(name = name.clone()))]
194-
pub async fn get_identity_by_optional_name(&self, name: &Option<String>) -> Result<Identity> {
206+
pub async fn get_identity_by_optional_name(
207+
&self,
208+
context: Option<&Context>,
209+
name: &Option<String>,
210+
) -> Result<Identity> {
195211
let named_identity = match name {
196212
Some(name) => {
197213
self.identities_repository()
@@ -209,7 +225,7 @@ impl CliState {
209225
Some(identity) => {
210226
let change_history = self.get_change_history(&identity.identifier()).await?;
211227
let named_vault = self.get_named_vault(&identity.vault_name).await?;
212-
let identity_vault = self.make_vault(named_vault).await?;
228+
let identity_vault = self.make_vault(context, named_vault).await?;
213229
Ok(Identity::import_from_change_history(
214230
Some(&identity.identifier()),
215231
change_history,
@@ -243,14 +259,23 @@ impl CliState {
243259
/// Return the name of the default identity.
244260
/// This function creates the default identity if it does not exist!
245261
#[instrument(skip_all)]
246-
pub async fn get_default_identity_name(&self) -> Result<String> {
247-
Ok(self.get_or_create_default_named_identity().await?.name())
262+
pub async fn get_or_create_default_identity_name(
263+
&self,
264+
context: Option<&Context>,
265+
) -> Result<String> {
266+
Ok(self
267+
.get_or_create_default_named_identity(context)
268+
.await?
269+
.name())
248270
}
249271

250272
/// Return the default named identity
251273
/// This function creates the default identity if it does not exist!
252274
#[instrument(skip_all)]
253-
pub async fn get_or_create_default_named_identity(&self) -> Result<NamedIdentity> {
275+
pub async fn get_or_create_default_named_identity(
276+
&self,
277+
context: Option<&Context>,
278+
) -> Result<NamedIdentity> {
254279
match self
255280
.identities_repository()
256281
.get_default_named_identity()
@@ -263,7 +288,8 @@ impl CliState {
263288
self.notify_message(fmt_log!(
264289
"There is no default Identity on this machine, generating one...\n"
265290
));
266-
self.create_identity_with_name(&random_name()).await
291+
self.create_identity_with_name(context, &random_name())
292+
.await
267293
}
268294
}
269295
}
@@ -272,10 +298,14 @@ impl CliState {
272298
/// - the given name if defined
273299
/// - or the name of the default identity (which is created if it does not already exist!)
274300
#[instrument(skip_all, fields(name = name.clone()))]
275-
pub async fn get_identity_name_or_default(&self, name: &Option<String>) -> Result<String> {
301+
pub async fn get_or_create_identity_name_or_default(
302+
&self,
303+
context: Option<&Context>,
304+
name: &Option<String>,
305+
) -> Result<String> {
276306
match name {
277307
Some(name) => Ok(name.clone()),
278-
None => self.get_default_identity_name().await,
308+
None => self.get_or_create_default_identity_name(context).await,
279309
}
280310
}
281311

@@ -472,14 +502,14 @@ mod tests {
472502
// then create an identity
473503
let identity_name = "identity-name";
474504
let identity = cli
475-
.create_identity_with_name_and_vault(identity_name, vault_name)
505+
.create_identity_with_name_and_vault(None, identity_name, vault_name)
476506
.await?;
477507
let expected = cli.get_named_identity(identity_name).await?;
478508
assert_eq!(identity, expected);
479509

480510
// don't recreate the identity if it already exists with that name
481511
let _ = cli
482-
.create_identity_with_name_and_vault(identity_name, vault_name)
512+
.create_identity_with_name_and_vault(None, identity_name, vault_name)
483513
.await?;
484514
let identities = cli.get_named_identities().await?;
485515
assert_eq!(identities.len(), 1);
@@ -493,7 +523,7 @@ mod tests {
493523

494524
// create an identity using the default vault
495525
let identity_name = "identity-name";
496-
let identity = cli.create_identity_with_name(identity_name).await?;
526+
let identity = cli.create_identity_with_name(None, identity_name).await?;
497527
let expected = cli.get_named_identity(identity_name).await?;
498528
assert_eq!(identity, expected);
499529

@@ -509,7 +539,7 @@ mod tests {
509539
let cli = CliState::test().await?;
510540

511541
// when we retrieve the default identity, we create it if it doesn't exist
512-
let identity = cli.get_or_create_default_named_identity().await?;
542+
let identity = cli.get_or_create_default_named_identity(None).await?;
513543

514544
// when the identity is created there is a change history + a named identity
515545
let result = cli.get_change_history(&identity.identifier()).await;
@@ -528,7 +558,7 @@ mod tests {
528558
#[tokio::test]
529559
async fn test_delete_identity() -> Result<()> {
530560
let cli = CliState::test().await?;
531-
let identity = cli.create_identity_with_name("name").await?;
561+
let identity = cli.create_identity_with_name(None, "name").await?;
532562

533563
// when the identity is created there is a change history + a named identity
534564
let result = cli.get_change_history(&identity.identifier()).await;

0 commit comments

Comments
 (0)