@@ -3,6 +3,7 @@ use ockam::identity::models::ChangeHistory;
3
3
use ockam:: identity:: { Identifier , Identity } ;
4
4
use ockam_core:: errcode:: { Kind , Origin } ;
5
5
use ockam_core:: Error ;
6
+ use ockam_node:: Context ;
6
7
use ockam_vault:: { HandleToSecret , SigningSecretKeyHandle } ;
7
8
8
9
use crate :: cli_state:: { random_name, CliState , Result } ;
@@ -31,6 +32,7 @@ impl CliState {
31
32
#[ instrument( skip_all, fields( name = %name, vault_name = %vault_name) ) ]
32
33
pub async fn create_identity_with_name_and_vault (
33
34
& self ,
35
+ context : Option < & Context > ,
34
36
name : & str ,
35
37
vault_name : & str ,
36
38
) -> Result < NamedIdentity > {
@@ -39,7 +41,9 @@ impl CliState {
39
41
} ;
40
42
41
43
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 ?;
43
47
let identity = identities. identities_creation ( ) . create_identity ( ) . await ?;
44
48
let named_identity = self
45
49
. store_named_identity ( & identity, name, vault_name)
@@ -65,9 +69,13 @@ impl CliState {
65
69
/// Create an identity associated with a name, using the default vault
66
70
/// If there is already an identity with that name, return its identifier
67
71
#[ 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 > {
69
77
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 ( ) )
71
79
. await
72
80
}
73
81
@@ -77,6 +85,7 @@ impl CliState {
77
85
#[ instrument( skip_all, fields( name = %name, vault_name = %vault_name, key_id = %key_id) ) ]
78
86
pub async fn create_identity_with_key_id (
79
87
& self ,
88
+ context : Option < & Context > ,
80
89
name : & str ,
81
90
vault_name : & str ,
82
91
key_id : & str ,
@@ -96,8 +105,10 @@ impl CliState {
96
105
key_id. as_bytes ( ) . to_vec ( ) ,
97
106
) ) ;
98
107
108
+ let vault = self . make_vault ( context, vault) . await ?;
109
+
99
110
// create the identity
100
- let identities = self . make_identities ( self . make_vault ( vault) . await ? ) . await ?;
111
+ let identities = self . make_identities ( vault) . await ?;
101
112
let identifier = identities
102
113
. identities_creation ( )
103
114
. identity_builder ( )
@@ -154,13 +165,14 @@ impl CliState {
154
165
#[ instrument( skip_all, fields( name = name. clone( ) ) ) ]
155
166
pub async fn get_named_identity_or_default (
156
167
& self ,
168
+ context : Option < & Context > ,
157
169
name : & Option < String > ,
158
170
) -> Result < NamedIdentity > {
159
171
match name {
160
172
// Identity specified.
161
173
Some ( name) => self . get_named_identity ( name) . await ,
162
174
// No identity specified.
163
- None => self . get_or_create_default_named_identity ( ) . await ,
175
+ None => self . get_or_create_default_named_identity ( context ) . await ,
164
176
}
165
177
}
166
178
@@ -191,7 +203,11 @@ impl CliState {
191
203
/// Return a full identity from its name
192
204
/// Use the default identity if no name is given
193
205
#[ 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 > {
195
211
let named_identity = match name {
196
212
Some ( name) => {
197
213
self . identities_repository ( )
@@ -209,7 +225,7 @@ impl CliState {
209
225
Some ( identity) => {
210
226
let change_history = self . get_change_history ( & identity. identifier ( ) ) . await ?;
211
227
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 ?;
213
229
Ok ( Identity :: import_from_change_history (
214
230
Some ( & identity. identifier ( ) ) ,
215
231
change_history,
@@ -243,14 +259,23 @@ impl CliState {
243
259
/// Return the name of the default identity.
244
260
/// This function creates the default identity if it does not exist!
245
261
#[ 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 ( ) )
248
270
}
249
271
250
272
/// Return the default named identity
251
273
/// This function creates the default identity if it does not exist!
252
274
#[ 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 > {
254
279
match self
255
280
. identities_repository ( )
256
281
. get_default_named_identity ( )
@@ -263,7 +288,8 @@ impl CliState {
263
288
self . notify_message ( fmt_log ! (
264
289
"There is no default Identity on this machine, generating one...\n "
265
290
) ) ;
266
- self . create_identity_with_name ( & random_name ( ) ) . await
291
+ self . create_identity_with_name ( context, & random_name ( ) )
292
+ . await
267
293
}
268
294
}
269
295
}
@@ -272,10 +298,14 @@ impl CliState {
272
298
/// - the given name if defined
273
299
/// - or the name of the default identity (which is created if it does not already exist!)
274
300
#[ 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 > {
276
306
match name {
277
307
Some ( name) => Ok ( name. clone ( ) ) ,
278
- None => self . get_default_identity_name ( ) . await ,
308
+ None => self . get_or_create_default_identity_name ( context ) . await ,
279
309
}
280
310
}
281
311
@@ -472,14 +502,14 @@ mod tests {
472
502
// then create an identity
473
503
let identity_name = "identity-name" ;
474
504
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)
476
506
. await ?;
477
507
let expected = cli. get_named_identity ( identity_name) . await ?;
478
508
assert_eq ! ( identity, expected) ;
479
509
480
510
// don't recreate the identity if it already exists with that name
481
511
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)
483
513
. await ?;
484
514
let identities = cli. get_named_identities ( ) . await ?;
485
515
assert_eq ! ( identities. len( ) , 1 ) ;
@@ -493,7 +523,7 @@ mod tests {
493
523
494
524
// create an identity using the default vault
495
525
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 ?;
497
527
let expected = cli. get_named_identity ( identity_name) . await ?;
498
528
assert_eq ! ( identity, expected) ;
499
529
@@ -509,7 +539,7 @@ mod tests {
509
539
let cli = CliState :: test ( ) . await ?;
510
540
511
541
// 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 ?;
513
543
514
544
// when the identity is created there is a change history + a named identity
515
545
let result = cli. get_change_history ( & identity. identifier ( ) ) . await ;
@@ -528,7 +558,7 @@ mod tests {
528
558
#[ tokio:: test]
529
559
async fn test_delete_identity ( ) -> Result < ( ) > {
530
560
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 ?;
532
562
533
563
// when the identity is created there is a change history + a named identity
534
564
let result = cli. get_change_history ( & identity. identifier ( ) ) . await ;
0 commit comments