Skip to content

Commit 08395ba

Browse files
authored
Make wallet_handle injectable when creating connection (#525)
Signed-off-by: Patrik Stas <patrik.stas@absa.africa>
1 parent bc81b06 commit 08395ba

File tree

5 files changed

+19
-52
lines changed

5 files changed

+19
-52
lines changed

aries_vcx/src/handlers/connection/connection.rs

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,9 @@ pub enum Actor {
8080
}
8181

8282
impl Connection {
83-
pub async fn create(source_id: &str, autohop_enabled: bool, agency_client: &AgencyClient) -> VcxResult<Self> {
83+
pub async fn create(source_id: &str, wallet_handle: WalletHandle, agency_client: &AgencyClient, autohop_enabled: bool) -> VcxResult<Self> {
8484
trace!("Connection::create >>> source_id: {}", source_id);
85-
// todo: Would be cleaner to pass wallet_handle as argument instead of reading off AgencyClient
86-
let pairwise_info = PairwiseInfo::create(agency_client.get_wallet_handle()).await?;
85+
let pairwise_info = PairwiseInfo::create(wallet_handle).await?;
8786
let cloud_agent_info = CloudAgentInfo::create(agency_client, &pairwise_info).await?;
8887
Ok(Self {
8988
cloud_agent_info,
@@ -92,9 +91,9 @@ impl Connection {
9291
})
9392
}
9493

95-
pub async fn create_with_invite(source_id: &str, invitation: Invitation, autohop_enabled: bool, agency_client: &AgencyClient) -> VcxResult<Self> {
94+
pub async fn create_with_invite(source_id: &str, wallet_handle: WalletHandle, agency_client: &AgencyClient, invitation: Invitation, autohop_enabled: bool) -> VcxResult<Self> {
9695
trace!("Connection::create_with_invite >>> source_id: {}, invitation: {:?}", source_id, invitation);
97-
let pairwise_info = PairwiseInfo::create(agency_client.get_wallet_handle()).await?;
96+
let pairwise_info = PairwiseInfo::create(wallet_handle).await?;
9897
let cloud_agent_info = CloudAgentInfo::create(agency_client, &pairwise_info).await?;
9998
let mut connection = Self {
10099
cloud_agent_info,
@@ -183,15 +182,6 @@ impl Connection {
183182
self.cloud_agent_info.clone()
184183
}
185184

186-
// pub fn bootstrap_agent_info(&self) -> Option<&PairwiseInfo> {
187-
// match &self.connection_sm {
188-
// SmConnection::Inviter(sm_inviter) => {
189-
// sm_inviter.prev_agent_info()
190-
// }
191-
// SmConnection::Invitee(_sm_invitee) => None
192-
// }
193-
// }
194-
195185
pub fn remote_did(&self) -> VcxResult<String> {
196186
match &self.connection_sm {
197187
SmConnection::Inviter(sm_inviter) => {
@@ -355,19 +345,6 @@ impl Connection {
355345
}
356346
}
357347

358-
// fn _get_bootstrap_agent_messages(&self, remote_vk: VcxResult<String>, bootstrap_agent_info: Option<&PairwiseInfo>) -> VcxResult<Option<(HashMap<String, A2AMessage>, PairwiseInfo)>> {
359-
// let expected_sender_vk = match remote_vk {
360-
// Ok(vk) => vk,
361-
// Err(_) => return Ok(None)
362-
// };
363-
// if let Some(bootstrap_agent_info) = bootstrap_agent_info {
364-
// trace!("Connection::_get_bootstrap_agent_messages >>> Inviter found no message to handle on main connection agent. Will check bootstrap agent.");
365-
// let messages = bootstrap_agent_info.get_messages(&expected_sender_vk)?;
366-
// return Ok(Some((messages, bootstrap_agent_info.clone())));
367-
// }
368-
// Ok(None)
369-
// }
370-
371348
fn _update_state(&mut self, wallet_handle: WalletHandle, message: Option<A2AMessage>, agency_client: AgencyClient) -> BoxFuture<'_, VcxResult<()>> {
372349
Box::pin(async move {
373350
let (new_connection_sm, can_autohop) = match &self.connection_sm {
@@ -404,18 +381,8 @@ impl Connection {
404381
self.cloud_agent_info().clone().update_message_status(agency_client, self.pairwise_info(), uid).await?;
405382
}
406383
None => {
407-
// Todo: Restore lookup into bootstrap cloud agent
408-
// self.bootstrap_agent_info()
409-
// if let Some((messages, bootstrap_agent_info)) = self._get_bootstrap_agent_messages(self.remote_vk(), )? {
410-
// if let Some((uid, message)) = self.find_message_to_handle(messages) {
411-
// trace!("Connection::update_state >>> handling message found on bootstrap agent uid: {:?}", uid);
412-
// self._update_state(Some(message))?;
413-
// bootstrap_agent_info.update_message_status(uid)?;
414-
// }
415-
// } else {
416384
trace!("Connection::update_state >>> trying to update state without message");
417385
self._update_state(wallet_handle, None, agency_client.clone()).await?;
418-
// }
419386
}
420387
}
421388
Ok(())
@@ -851,7 +818,7 @@ mod tests {
851818
let _setup = SetupMocks::init();
852819
let agency_client = AgencyClient::new();
853820
enable_agency_mocks();
854-
let connection = Connection::create_with_invite("abc", Invitation::Pairwise(_pairwise_invitation()), true, &agency_client).await.unwrap();
821+
let connection = Connection::create_with_invite("abc", WalletHandle(0), &agency_client, Invitation::Pairwise(_pairwise_invitation()), true).await.unwrap();
855822
assert_eq!(connection.get_state(), ConnectionState::Invitee(InviteeState::Invited));
856823
}
857824

@@ -860,7 +827,7 @@ mod tests {
860827
let _setup = SetupMocks::init();
861828
let agency_client = AgencyClient::new();
862829
enable_agency_mocks();
863-
let connection = Connection::create_with_invite("abc", Invitation::Public(_public_invitation()), true, &agency_client).await.unwrap();
830+
let connection = Connection::create_with_invite("abc", WalletHandle(0), &agency_client, Invitation::Public(_public_invitation()), true).await.unwrap();
864831
assert_eq!(connection.get_state(), ConnectionState::Invitee(InviteeState::Invited));
865832
}
866833

@@ -871,13 +838,13 @@ mod tests {
871838
enable_agency_mocks();
872839

873840
let pub_inv = _public_invitation_random_id();
874-
let mut connection = Connection::create_with_invite("abcd", Invitation::Public(pub_inv.clone()), true, &agency_client).await.unwrap();
841+
let mut connection = Connection::create_with_invite("abcd", WalletHandle(0), &agency_client, Invitation::Public(pub_inv.clone()), true).await.unwrap();
875842
connection.connect(WalletHandle(0), &agency_client).await.unwrap();
876843
assert_eq!(connection.get_state(), ConnectionState::Invitee(InviteeState::Requested));
877844
assert_ne!(connection.get_thread_id(), pub_inv.id.0);
878845

879846
let pw_inv = _pairwise_invitation_random_id();
880-
let mut connection = Connection::create_with_invite("dcba", Invitation::Pairwise(pw_inv.clone()), true, &agency_client).await.unwrap();
847+
let mut connection = Connection::create_with_invite("dcba", WalletHandle(0), &agency_client, Invitation::Pairwise(pw_inv.clone()), true).await.unwrap();
881848
connection.connect(WalletHandle(0), &agency_client).await.unwrap();
882849
assert_eq!(connection.get_state(), ConnectionState::Invitee(InviteeState::Requested));
883850
assert_eq!(connection.get_thread_id(), pw_inv.id.0);
@@ -934,7 +901,7 @@ mod tests {
934901
async fn test_serialize_deserialize() {
935902
let _setup = SetupMocks::init();
936903

937-
let connection = Connection::create("test_serialize_deserialize", true, &_dummy_agency_client()).await.unwrap();
904+
let connection = Connection::create("test_serialize_deserialize", WalletHandle(0), &_dummy_agency_client(), true).await.unwrap();
938905
let first_string = connection.to_string().unwrap();
939906

940907
let connection2 = Connection::from_string(&first_string).unwrap();
@@ -947,7 +914,7 @@ mod tests {
947914
async fn test_serialize_deserialize_serde() {
948915
let _setup = SetupMocks::init();
949916

950-
let connection = Connection::create("test_serialize_deserialize", true, &_dummy_agency_client()).await.unwrap();
917+
let connection = Connection::create("test_serialize_deserialize", WalletHandle(0), &_dummy_agency_client(), true).await.unwrap();
951918
let first_string = serde_json::to_string(&connection).unwrap();
952919

953920
let connection: Connection = serde_json::from_str(&first_string).unwrap();

aries_vcx/src/handlers/out_of_band/receiver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ impl OutOfBandReceiver {
9696

9797
pub async fn build_connection(&self, agency_client: &AgencyClient, autohop_enabled: bool) -> VcxResult<Connection> {
9898
trace!("OutOfBandReceiver::build_connection >>> autohop_enabled: {}", autohop_enabled);
99-
Connection::create_with_invite(&self.oob.id.0, Invitation::OutOfBand(self.oob.clone()), autohop_enabled, agency_client).await
99+
Connection::create_with_invite(&self.oob.id.0, agency_client.get_wallet_handle(), agency_client, Invitation::OutOfBand(self.oob.clone()), autohop_enabled).await
100100
}
101101

102102
pub fn to_a2a_message(&self) -> A2AMessage {

aries_vcx/tests/utils/devsetup_agent.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ pub mod test_utils {
159159
init_issuer_config(&config_issuer).unwrap();
160160
let mut agency_client = AgencyClient::new();
161161
let config_agency = provision_cloud_agent(&mut agency_client, wallet_handle, &config_provision_agent).await.unwrap();
162-
let connection = Connection::create("faber", true, &agency_client).await.unwrap();
162+
let connection = Connection::create("faber", agency_client.get_wallet_handle(), &agency_client, true).await.unwrap();
163163
let agent = PublicAgent::create(wallet_handle, &agency_client, "faber", &config_issuer.institution_did).await.unwrap();
164164
let faber = Faber {
165165
wallet_handle,
@@ -354,7 +354,7 @@ pub mod test_utils {
354354
let wallet_handle = open_wallet(&config_wallet).await.unwrap();
355355
let mut agency_client = AgencyClient::new();
356356
let config_agency = provision_cloud_agent(&mut agency_client, wallet_handle, &config_provision_agent).await.unwrap();
357-
let connection = Connection::create("tmp_empoty", true, &agency_client).await.unwrap();
357+
let connection = Connection::create("tmp_empoty", agency_client.get_wallet_handle(), &agency_client, true).await.unwrap();
358358
let alice = Alice {
359359
wallet_handle,
360360
agency_client,
@@ -370,7 +370,7 @@ pub mod test_utils {
370370

371371
pub async fn accept_invite(&mut self, invite: &str) {
372372
self.activate().await.unwrap();
373-
self.connection = Connection::create_with_invite("faber", serde_json::from_str(invite).unwrap(), true, &self.agency_client).await.unwrap();
373+
self.connection = Connection::create_with_invite("faber", self.wallet_handle, &self.agency_client, serde_json::from_str(invite).unwrap(), true).await.unwrap();
374374
self.connection.connect(self.wallet_handle, &self.agency_client).await.unwrap();
375375
self.connection.update_state(self.wallet_handle, &self.agency_client).await.unwrap();
376376
assert_eq!(ConnectionState::Invitee(InviteeState::Requested), self.connection.get_state());

aries_vcx/tests/utils/scenarios.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ pub mod test_utils {
590590
let public_invite: Invitation = serde_json::from_str(&public_invite_json).unwrap();
591591

592592
alice.activate().await.unwrap();
593-
let mut consumer_to_institution = Connection::create_with_invite("institution", public_invite, true, &alice.agency_client).await.unwrap();
593+
let mut consumer_to_institution = Connection::create_with_invite("institution", alice.wallet_handle, &alice.agency_client, public_invite, true).await.unwrap();
594594
consumer_to_institution.connect(alice.wallet_handle, &alice.agency_client).await.unwrap();
595595
consumer_to_institution.update_state(alice.wallet_handle, &alice.agency_client).await.unwrap();
596596

@@ -602,13 +602,13 @@ pub mod test_utils {
602602
pub async fn create_connected_connections(alice: &mut Alice, faber: &mut Faber) -> (Connection, Connection) {
603603
debug!("Institution is going to create connection.");
604604
faber.activate().await.unwrap();
605-
let mut institution_to_consumer = Connection::create("consumer", true, &faber.agency_client).await.unwrap();
605+
let mut institution_to_consumer = Connection::create("consumer", faber.wallet_handle, &faber.agency_client, true).await.unwrap();
606606
institution_to_consumer.connect(faber.wallet_handle, &faber.agency_client).await.unwrap();
607607
let details = institution_to_consumer.get_invite_details().unwrap();
608608

609609
alice.activate().await.unwrap();
610610
debug!("Consumer is going to accept connection invitation.");
611-
let mut consumer_to_institution = Connection::create_with_invite("institution", details.clone(), true, &alice.agency_client).await.unwrap();
611+
let mut consumer_to_institution = Connection::create_with_invite("institution", alice.wallet_handle, &alice.agency_client, details.clone(), true).await.unwrap();
612612

613613
consumer_to_institution.connect(alice.wallet_handle, &alice.agency_client).await.unwrap();
614614
consumer_to_institution.update_state(alice.wallet_handle, &alice.agency_client).await.unwrap();

libvcx/src/api_lib/api_handle/connection.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ pub fn store_connection(connection: Connection) -> VcxResult<u32> {
9696

9797
pub async fn create_connection(source_id: &str) -> VcxResult<u32> {
9898
trace!("create_connection >>> source_id: {}", source_id);
99-
let connection = Connection::create(source_id, true, &get_main_agency_client().unwrap()).await?;
99+
let connection = Connection::create(source_id, get_main_wallet_handle(), &get_main_agency_client().unwrap(), true).await?;
100100
store_connection(connection)
101101
}
102102

103103
pub async fn create_connection_with_invite(source_id: &str, details: &str) -> VcxResult<u32> {
104104
debug!("create connection {} with invite {}", source_id, details);
105105
if let Some(invitation) = serde_json::from_str::<InvitationV3>(details).ok() {
106-
let connection = Connection::create_with_invite(source_id, invitation, true, &get_main_agency_client().unwrap()).await?;
106+
let connection = Connection::create_with_invite(source_id, get_main_wallet_handle(), &get_main_agency_client().unwrap(), invitation, true).await?;
107107
store_connection(connection)
108108
} else {
109109
Err(VcxError::from_msg(VcxErrorKind::InvalidJson, "Used invite has invalid structure")) // TODO: Specific error type

0 commit comments

Comments
 (0)