Skip to content

Commit 0a1e946

Browse files
authored
refactor: remove connection protocol (openwallet-foundation#3184)
* refactor: drop argparse references to connections proto Signed-off-by: Daniel Bluhm <[email protected]> * refactor: allow overridding BaseConnectionManager Signed-off-by: Daniel Bluhm <[email protected]> * refactor: move routes for connection management Signed-off-by: Daniel Bluhm <[email protected]> * refactor: remove conn proto routes Signed-off-by: Daniel Bluhm <[email protected]> * refactor: base conn manager references to conn proto Signed-off-by: Daniel Bluhm <[email protected]> * refactor: conn record references to conn proto Signed-off-by: Daniel Bluhm <[email protected]> * refactor: conn record tests Signed-off-by: Daniel Bluhm <[email protected]> * refactor: test base manager Signed-off-by: Daniel Bluhm <[email protected]> * refactor: conductor references to conn proto Signed-off-by: Daniel Bluhm <[email protected]> * refactor: test conductor Signed-off-by: Daniel Bluhm <[email protected]> * refactor: test oob processor Signed-off-by: Daniel Bluhm <[email protected]> * refactor: update mediation route ref Signed-off-by: Daniel Bluhm <[email protected]> * refactor: forward invitation message and handler Signed-off-by: Daniel Bluhm <[email protected]> * refactor: forward invitation request Signed-off-by: Daniel Bluhm <[email protected]> * refactor: forward invite handler tests Signed-off-by: Daniel Bluhm <[email protected]> * refactor: introduction proto message tests Signed-off-by: Daniel Bluhm <[email protected]> * refactor: oob manager Signed-off-by: Daniel Bluhm <[email protected]> * refactor: oob invitation message Signed-off-by: Daniel Bluhm <[email protected]> * refactor: oob manager tests Signed-off-by: Daniel Bluhm <[email protected]> * refactor: routing proto conn proto refs Signed-off-by: Daniel Bluhm <[email protected]> * refactor: endorsement setup conn proto refs Signed-off-by: Daniel Bluhm <[email protected]> * refactor: drop conn proto from scenario tests Signed-off-by: Daniel Bluhm <[email protected]> * refactor: delete conn proto Signed-off-by: Daniel Bluhm <[email protected]> * fix: conductor test failure for static conn create Signed-off-by: Daniel Bluhm <[email protected]> --------- Signed-off-by: Daniel Bluhm <[email protected]>
1 parent c849183 commit 0a1e946

Some content is hidden

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

57 files changed

+426
-6182
lines changed

acapy_agent/config/argparse.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -295,15 +295,6 @@ def add_arguments(self, parser: ArgumentParser):
295295
"invitation URL. Default: false."
296296
),
297297
)
298-
parser.add_argument(
299-
"--connections-invite",
300-
action="store_true",
301-
env_var="ACAPY_CONNECTIONS_INVITE",
302-
help=(
303-
"After startup, generate and print a new connections protocol "
304-
"style invitation URL. Default: false."
305-
),
306-
)
307298
parser.add_argument(
308299
"--invite-label",
309300
dest="invite_label",
@@ -441,8 +432,6 @@ def get_settings(self, args: Namespace) -> dict:
441432
settings["debug.seed"] = args.debug_seed
442433
if args.invite:
443434
settings["debug.print_invitation"] = True
444-
if args.connections_invite:
445-
settings["debug.print_connections_invitation"] = True
446435
if args.invite_label:
447436
settings["debug.invite_label"] = args.invite_label
448437
if args.invite_multi_use:
@@ -1463,24 +1452,12 @@ def add_arguments(self, parser: ArgumentParser):
14631452
"and send mediation request and set as default mediator."
14641453
),
14651454
)
1466-
parser.add_argument(
1467-
"--mediator-connections-invite",
1468-
action="store_true",
1469-
env_var="ACAPY_MEDIATION_CONNECTIONS_INVITE",
1470-
help=(
1471-
"Connect to mediator through a connection invitation. "
1472-
"If not specified, connect using an OOB invitation. "
1473-
"Default: false."
1474-
),
1475-
)
14761455

14771456
def get_settings(self, args: Namespace):
14781457
"""Extract mediation invitation settings."""
14791458
settings = {}
14801459
if args.mediator_invitation:
14811460
settings["mediation.invite"] = args.mediator_invitation
1482-
if args.mediator_connections_invite:
1483-
settings["mediation.connections_invite"] = True
14841461

14851462
return settings
14861463

acapy_agent/config/default_context.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
from ..anoncreds.registry import AnonCredsRegistry
44
from ..cache.base import BaseCache
55
from ..cache.in_memory import InMemoryCache
6+
from ..connections.base_manager import BaseConnectionManager
67
from ..core.event_bus import EventBus
78
from ..core.goal_code_registry import GoalCodeRegistry
89
from ..core.plugin_registry import PluginRegistry
9-
from ..core.profile import ProfileManager, ProfileManagerProvider
10+
from ..core.profile import Profile, ProfileManager, ProfileManagerProvider
1011
from ..core.protocol_registry import ProtocolRegistry
1112
from ..protocols.actionmenu.v1_0.base_service import BaseMenuService
1213
from ..protocols.actionmenu.v1_0.driver_service import DriverMenuService
@@ -117,6 +118,12 @@ async def bind_providers(self, context: InjectionContext):
117118
context.injector.bind_instance(BaseMenuService, DriverMenuService(context))
118119
context.injector.bind_instance(BaseIntroductionService, DemoIntroductionService())
119120

121+
# Allow BaseConnectionManager to be overridden
122+
context.injector.bind_provider(
123+
BaseConnectionManager,
124+
ClassProvider(BaseConnectionManager, ClassProvider.Inject(Profile)),
125+
)
126+
120127
async def load_plugins(self, context: InjectionContext):
121128
"""Set up plugin registry and load plugins."""
122129

@@ -135,6 +142,7 @@ async def load_plugins(self, context: InjectionContext):
135142

136143
plugin_registry.register_plugin("acapy_agent.ledger")
137144

145+
plugin_registry.register_plugin("acapy_agent.connections")
138146
plugin_registry.register_plugin("acapy_agent.messaging.jsonld")
139147
plugin_registry.register_plugin("acapy_agent.resolver")
140148
plugin_registry.register_plugin("acapy_agent.settings")

acapy_agent/connections/base_manager.py

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import json
77
import logging
88
from typing import Dict, List, Optional, Sequence, Text, Tuple, Union
9+
import warnings
910

1011
import pydid
1112
from base58 import b58decode
@@ -28,10 +29,7 @@
2829
from ..core.profile import Profile
2930
from ..did.did_key import DIDKey
3031
from ..multitenant.base import BaseMultitenantManager
31-
from ..protocols.connections.v1_0.message_types import ARIES_PROTOCOL as CONN_PROTO
32-
from ..protocols.connections.v1_0.messages.connection_invitation import (
33-
ConnectionInvitation,
34-
)
32+
from ..protocols.didexchange.v1_0.message_types import ARIES_PROTOCOL as CONN_PROTO
3533
from ..protocols.coordinate_mediation.v1_0.models.mediation_record import (
3634
MediationRecord,
3735
)
@@ -301,6 +299,8 @@ async def create_did_document(
301299
) -> DIDDoc:
302300
"""Create our DID doc for a given DID.
303301
302+
This method is deprecated and will be removed.
303+
304304
Args:
305305
did_info (DIDInfo): The DID information (DID and verkey) used in the
306306
connection.
@@ -313,6 +313,7 @@ async def create_did_document(
313313
DIDDoc: The prepared `DIDDoc` instance.
314314
315315
"""
316+
warnings.warn("create_did_document is deprecated and will be removed soon")
316317
did_doc = DIDDoc(did=did_info.did)
317318
did_controller = did_info.did
318319
did_key = did_info.verkey
@@ -615,7 +616,7 @@ def _extract_key_material_in_base58_format(method: VerificationMethod) -> str:
615616
async def _fetch_connection_targets_for_invitation(
616617
self,
617618
connection: ConnRecord,
618-
invitation: Union[ConnectionInvitation, InvitationMessage],
619+
invitation: InvitationMessage,
619620
sender_verkey: str,
620621
) -> Sequence[ConnectionTarget]:
621622
"""Get a list of connection targets for an invitation.
@@ -625,48 +626,31 @@ async def _fetch_connection_targets_for_invitation(
625626
626627
Args:
627628
connection (ConnRecord): The connection record associated with the invitation.
628-
invitation (Union[ConnectionInvitation, InvitationMessage]): The connection
629+
invitation (InvitationMessage): The connection
629630
or OOB invitation retrieved from the connection record.
630631
sender_verkey (str): The sender's verification key.
631632
632633
Returns:
633634
Sequence[ConnectionTarget]: A list of `ConnectionTarget` objects
634635
representing the connection targets for the invitation.
635636
"""
636-
if isinstance(invitation, ConnectionInvitation):
637-
# conn protocol invitation
638-
if invitation.did:
639-
did = invitation.did
640-
(
641-
endpoint,
642-
recipient_keys,
643-
routing_keys,
644-
) = await self.resolve_invitation(did)
637+
assert invitation.services, "Schema requires services in invitation"
638+
oob_service_item = invitation.services[0]
639+
if isinstance(oob_service_item, str):
640+
(
641+
endpoint,
642+
recipient_keys,
643+
routing_keys,
644+
) = await self.resolve_invitation(oob_service_item)
645645

646-
else:
647-
endpoint = invitation.endpoint
648-
recipient_keys = invitation.recipient_keys
649-
routing_keys = invitation.routing_keys
650646
else:
651-
# out-of-band invitation
652-
oob_service_item = invitation.services[0]
653-
if isinstance(oob_service_item, str):
654-
(
655-
endpoint,
656-
recipient_keys,
657-
routing_keys,
658-
) = await self.resolve_invitation(oob_service_item)
659-
660-
else:
661-
endpoint = oob_service_item.service_endpoint
662-
recipient_keys = [
663-
DIDKey.from_did(k).public_key_b58
664-
for k in oob_service_item.recipient_keys
665-
]
666-
routing_keys = [
667-
DIDKey.from_did(k).public_key_b58
668-
for k in oob_service_item.routing_keys
669-
]
647+
endpoint = oob_service_item.service_endpoint
648+
recipient_keys = [
649+
DIDKey.from_did(k).public_key_b58 for k in oob_service_item.recipient_keys
650+
]
651+
routing_keys = [
652+
DIDKey.from_did(k).public_key_b58 for k in oob_service_item.routing_keys
653+
]
670654

671655
return [
672656
ConnectionTarget(

acapy_agent/connections/models/conn_record.py

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@
1515
RAW_ED25519_2018_PUBLIC_KEY_VALIDATE,
1616
UUID4_EXAMPLE,
1717
)
18-
from ...protocols.connections.v1_0.message_types import ARIES_PROTOCOL as CONN_PROTO
19-
from ...protocols.connections.v1_0.message_types import (
20-
CONNECTION_INVITATION,
21-
CONNECTION_REQUEST,
22-
)
23-
from ...protocols.connections.v1_0.messages.connection_invitation import (
24-
ConnectionInvitation,
25-
)
26-
from ...protocols.connections.v1_0.messages.connection_request import ConnectionRequest
27-
from ...protocols.didcomm_prefix import DIDCommPrefix
2818
from ...protocols.didexchange.v1_0.message_types import ARIES_PROTOCOL as DIDEX_1_1
2919
from ...protocols.didexchange.v1_0.message_types import DIDEX_1_0
3020
from ...protocols.didexchange.v1_0.messages.request import DIDXRequest
@@ -44,7 +34,7 @@ class Meta:
4434

4535
schema_class = "MaybeStoredConnRecordSchema"
4636

47-
SUPPORTED_PROTOCOLS = (CONN_PROTO, DIDEX_1_0, DIDEX_1_1)
37+
SUPPORTED_PROTOCOLS = (DIDEX_1_0, DIDEX_1_1)
4838

4939
class Role(Enum):
5040
"""RFC 160 (inviter, invitee) = RFC 23 (responder, requester)."""
@@ -430,7 +420,7 @@ async def retrieve_by_alias(cls, session: ProfileSession, alias: str) -> "ConnRe
430420
async def attach_invitation(
431421
self,
432422
session: ProfileSession,
433-
invitation: Union[ConnectionInvitation, OOBInvitation],
423+
invitation: OOBInvitation,
434424
):
435425
"""Persist the related connection invitation to storage.
436426
@@ -447,9 +437,7 @@ async def attach_invitation(
447437
storage = session.inject(BaseStorage)
448438
await storage.add_record(record)
449439

450-
async def retrieve_invitation(
451-
self, session: ProfileSession
452-
) -> Union[ConnectionInvitation, OOBInvitation]:
440+
async def retrieve_invitation(self, session: ProfileSession) -> OOBInvitation:
453441
"""Retrieve the related connection invitation.
454442
455443
Args:
@@ -462,16 +450,12 @@ async def retrieve_invitation(
462450
{"connection_id": self.connection_id},
463451
)
464452
ser = json.loads(result.value)
465-
return (
466-
ConnectionInvitation
467-
if DIDCommPrefix.unqualify(ser["@type"]) == CONNECTION_INVITATION
468-
else OOBInvitation
469-
).deserialize(ser)
453+
return OOBInvitation.deserialize(ser)
470454

471455
async def attach_request(
472456
self,
473457
session: ProfileSession,
474-
request: Union[ConnectionRequest, DIDXRequest],
458+
request: DIDXRequest,
475459
):
476460
"""Persist the related connection request to storage.
477461
@@ -491,7 +475,7 @@ async def attach_request(
491475
async def retrieve_request(
492476
self,
493477
session: ProfileSession,
494-
) -> Union[ConnectionRequest, DIDXRequest]:
478+
) -> DIDXRequest:
495479
"""Retrieve the related connection invitation.
496480
497481
Args:
@@ -503,11 +487,7 @@ async def retrieve_request(
503487
self.RECORD_TYPE_REQUEST, {"connection_id": self.connection_id}
504488
)
505489
ser = json.loads(result.value)
506-
return (
507-
ConnectionRequest
508-
if DIDCommPrefix.unqualify(ser["@type"]) == CONNECTION_REQUEST
509-
else DIDXRequest
510-
).deserialize(ser)
490+
return DIDXRequest.deserialize(ser)
511491

512492
@property
513493
def is_ready(self) -> str:
@@ -709,7 +689,7 @@ class Meta:
709689
validate=validate.OneOf(ConnRecord.SUPPORTED_PROTOCOLS),
710690
metadata={
711691
"description": "Connection protocol used",
712-
"example": "connections/1.0",
692+
"example": "didexchange/1.1",
713693
},
714694
)
715695
rfc23_state = fields.Str(

0 commit comments

Comments
 (0)