Skip to content

Commit 25b6ec6

Browse files
committed
feat: add base wallet route manager
Necessary for actions specific to just the base wallet for route management tasks Signed-off-by: Daniel Bluhm <dbluhm@pm.me>
1 parent f0ba7da commit 25b6ec6

6 files changed

Lines changed: 40 additions & 11 deletions

File tree

aries_cloudagent/multitenant/route_manager.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
from ..protocols.coordinate_mediation.v1_0.models.mediation_record import (
1212
MediationRecord,
1313
)
14-
from ..protocols.coordinate_mediation.v1_0.route_manager import RouteManager
14+
from ..protocols.coordinate_mediation.v1_0.normalization import normalize_from_did_key
15+
from ..protocols.coordinate_mediation.v1_0.route_manager import (
16+
CoordinateMediationV1RouteManager,
17+
RouteManager,
18+
)
1519
from ..protocols.routing.v1_0.manager import RoutingManager
1620
from ..protocols.routing.v1_0.models.route_record import RouteRecord
1721
from ..storage.error import StorageNotFoundError
@@ -106,6 +110,10 @@ async def routing_info(
106110

107111
return routing_keys, my_endpoint
108112

113+
114+
class BaseWalletRouteManager(CoordinateMediationV1RouteManager):
115+
"""Route manager for operations specific to the base wallet."""
116+
109117
async def connection_from_recipient_key(
110118
self, profile: Profile, recipient_key: str
111119
) -> ConnRecord:
@@ -117,9 +125,13 @@ async def connection_from_recipient_key(
117125
for sub wallets, we check the sub wallet's connections before the base
118126
wallet.
119127
"""
120-
manager = self.root_profile.inject(BaseMultitenantManager)
128+
LOGGER.debug("Retrieving connection for recipient key for multitenant wallet")
129+
manager = profile.inject(BaseMultitenantManager)
121130
profile_to_search = (
122-
await manager.get_profile_for_key(profile.context, recipient_key) or profile
131+
await manager.get_profile_for_key(
132+
profile.context, normalize_from_did_key(recipient_key)
133+
)
134+
or profile
123135
)
124136

125137
return await super().connection_from_recipient_key(

aries_cloudagent/multitenant/tests/test_route_manager.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from ...protocols.routing.v1_0.models.route_record import RouteRecord
1414
from ...storage.error import StorageNotFoundError
1515
from ..base import BaseMultitenantManager
16-
from ..route_manager import MultitenantRouteManager
16+
from ..route_manager import BaseWalletRouteManager, MultitenantRouteManager
1717

1818
TEST_RECORD_VERKEY = "3Dn1SJNPaCXcvvJvSbsFWP2xaCjMom3can8CQNhWrTRx"
1919
TEST_VERKEY = "did:key:z6Mkgg342Ycpuk263R9d8Aq6MUaxPn1DDeHyGo38EefXmgDL"
@@ -57,6 +57,11 @@ def route_manager(root_profile: Profile, sub_profile: Profile, wallet_id: str):
5757
yield MultitenantRouteManager(root_profile)
5858

5959

60+
@pytest.fixture
61+
def base_route_manager(root_profile: Profile, sub_profile: Profile, wallet_id: str):
62+
yield BaseWalletRouteManager(root_profile)
63+
64+
6065
@pytest.mark.asyncio
6166
async def test_route_for_key_sub_mediator_no_base_mediator(
6267
route_manager: MultitenantRouteManager,
@@ -366,7 +371,7 @@ async def test_routing_info_with_base_mediator_and_sub_mediator(
366371

367372
@pytest.mark.asyncio
368373
async def test_connection_from_recipient_key(
369-
sub_profile: Profile, route_manager: MultitenantRouteManager
374+
sub_profile: Profile, base_route_manager: MultitenantRouteManager
370375
):
371376
manager = mock.MagicMock()
372377
manager.get_profile_for_key = mock.CoroutineMock(return_value=sub_profile)

aries_cloudagent/protocols/coordinate_mediation/v1_0/handlers/keylist_update_response_handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ async def notify_keylist_updated(
3737
):
3838
"""Notify of keylist update response received."""
3939
route_manager = profile.inject(RouteManager)
40+
self._logger.debug(
41+
"Retrieving connection ID from route manager of type %s",
42+
type(route_manager).__name__,
43+
)
4044
try:
4145
key_to_connection = {
4246
updated.recipient_key: await route_manager.connection_from_recipient_key(

aries_cloudagent/protocols/coordinate_mediation/v1_0/manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,8 @@ async def store_update_results(
538538
session: An active profile session
539539
540540
"""
541+
# TODO The stored recipient keys are did:key!
542+
541543
to_save: Sequence[RouteRecord] = []
542544
to_remove: Sequence[RouteRecord] = []
543545

aries_cloudagent/protocols/coordinate_mediation/v1_0/route_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ async def connection_from_recipient_key(
253253
async with profile.session() as session:
254254
wallet = session.inject(BaseWallet)
255255
try:
256-
conn = await ConnRecord.retrieve_by_invitation_key(
257-
session, invitation_key=normalize_from_did_key(recipient_key)
256+
conn = await ConnRecord.retrieve_by_tag_filter(
257+
session, {"invitation_key": normalize_from_did_key(recipient_key)}
258258
)
259259
except StorageNotFoundError:
260260
did_info = await wallet.get_local_did_for_verkey(

aries_cloudagent/protocols/coordinate_mediation/v1_0/route_manager_provider.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
from ....config.base import BaseInjector, BaseProvider, BaseSettings
33
from ....core.profile import Profile
44
from ....multitenant.base import BaseMultitenantManager
5-
from ....multitenant.route_manager import MultitenantRouteManager
5+
from ....multitenant.route_manager import (
6+
MultitenantRouteManager,
7+
BaseWalletRouteManager,
8+
)
69
from .route_manager import CoordinateMediationV1RouteManager
710

811

@@ -19,8 +22,11 @@ def __init__(self, root_profile: Profile):
1922
def provide(self, settings: BaseSettings, injector: BaseInjector):
2023
"""Create the appropriate route manager instance."""
2124
wallet_id = settings.get("wallet.id")
22-
multitenant_mgr = injector.inject_or(BaseMultitenantManager)
23-
if multitenant_mgr and wallet_id:
24-
return MultitenantRouteManager(self.root_profile)
25+
multitenant_mgr = self.root_profile.inject_or(BaseMultitenantManager)
26+
if multitenant_mgr:
27+
if wallet_id:
28+
return MultitenantRouteManager(self.root_profile)
29+
else:
30+
return BaseWalletRouteManager()
2531

2632
return CoordinateMediationV1RouteManager()

0 commit comments

Comments
 (0)