Skip to content

Commit a81b921

Browse files
Support ADA RFC 002 Data Agreement protocol
Messages supported in ADA RFC 002 are: 1. read-data-agreement 2. read-data-agreement-response 3. problem-report Signed-off-by: George J Padayatti <[email protected]>
1 parent e33eaf1 commit a81b921

File tree

8 files changed

+607
-111
lines changed

8 files changed

+607
-111
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from aries_cloudagent.messaging.base_handler import BaseHandler, BaseResponder, RequestContext
2+
3+
from ..messages.problem_report import DataAgreementProblemReport
4+
from ..manager import ADAManager
5+
6+
import json
7+
8+
9+
class DataAgreementProblemReportHandler(BaseHandler):
10+
"""Handle for data-agreements/1.0/problem-report message"""
11+
12+
async def handle(self, context: RequestContext, responder: BaseResponder):
13+
"""
14+
Message handler logic for data-agreements/1.0/problem-report message.
15+
"""
16+
17+
# Assert if received message is of type DataAgreementProblemReport
18+
assert isinstance(context.message, DataAgreementProblemReport)
19+
20+
self._logger.info(
21+
"Received create-did message: \n%s",
22+
json.dumps(context.message.serialize(), indent=4)
23+
)
24+
25+
# Initialize ADA manager
26+
ada_manager = ADAManager(context)
27+
28+
await ada_manager.process_data_agreement_problem_report_message(
29+
data_agreement_problem_report_message=context.message,
30+
receipt=context.message_receipt,
31+
)

mydata_did/v1_0/handlers/read_data_agreement_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ async def handle(self, context: RequestContext, responder: BaseResponder):
1919
self._logger.info("Received read data agreement message: %s", json.dumps(context.message.serialize(), indent=4))
2020

2121
mgr : ADAManager= ADAManager(context)
22-
await mgr.process_read_data_agreement_message(context.message, context.message_receipt)
22+
await mgr.process_read_data_agreement_message(read_data_agreement_message=context.message, receipt=context.message_receipt)

mydata_did/v1_0/manager.py

Lines changed: 369 additions & 48 deletions
Large diffs are not rendered by default.

mydata_did/v1_0/messages/problem_report.py

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -132,29 +132,11 @@ class Meta:
132132
class DataAgreementProblemReportReason(str, Enum):
133133
"""Supported reason codes."""
134134

135-
# Triggered when creation of data agreement failed.
136-
FAILED_TO_CREATE_DATA_AGREEMENT = "failed_to_create_data_agreement"
137-
138-
# Triggered when failed to read data agreement.
139-
FAILED_TO_READ_DATA_AGREEMENT = "failed_to_read_data_agreement"
140-
141-
# Triggered when failed to update data agreeement.
142-
FAILED_TO_UPDATE_DATA_AGREEMENT = "failed_to_update_data_agreement"
143-
144-
# Triggered when failed to delete data agreement.
145-
FAILED_TO_DELETE_DATA_AGREEMENT = "failed_to_delete_data_agreement"
146-
147135
# Triggered when data agreement was not found.
148136
DATA_AGREEMENT_NOT_FOUND = "data_agreement_not_found"
149137

150-
# Triggered when data agreement is already revoked.
151-
DATA_AGREEMENT_REVOKED = "data_agreement_revoked"
152-
153-
# Triggered when data agreement is invalid.
154-
DATA_AGREEMENT_INVALID = "invalid_data_agreement"
155-
156-
# Triggered when data agreement is expired.
157-
DATA_AGREEMENT_EXPIRED = "data_agreement_expired"
138+
# Triggered when read-data-agreement failed due to processing error.
139+
READ_DATA_AGREEMENT_FAILED = "read_data_agreement_failed"
158140

159141

160142
class DataAgreementProblemReport(AgentMessage):
@@ -172,17 +154,13 @@ def __init__(
172154
*,
173155
problem_code: str = None,
174156
explain: str = None,
175-
from_did,
176-
to_did,
177-
created_time,
157+
from_did: str = None,
158+
to_did: str = None,
159+
created_time: str = None,
178160
**kwargs
179161
):
180162
"""
181163
Initialize a DataAgreementProblemReport message instance.
182-
183-
Args:
184-
explain: The localized error explanation
185-
problem_code: The standard error identifier
186164
"""
187165
super().__init__(**kwargs)
188166
self.explain = explain
@@ -216,7 +194,7 @@ class Meta:
216194
choices=[dapr.value for dapr in DataAgreementProblemReportReason],
217195
error="Value {input} must be one of {choices}.",
218196
),
219-
example=DataAgreementProblemReportReason.FAILED_TO_CREATE_DATA_AGREEMENT.value,
197+
example=DataAgreementProblemReportReason.DATA_AGREEMENT_NOT_FOUND.value,
220198
)
221199

222200

mydata_did/v1_0/models/data_agreement_instance_model.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def __init__(
5454
event: typing.List[DataAgreementEvent] = None,
5555
proof_chain: typing.List[DataAgreementProof] = None,
5656
principle_did: str = None,
57+
proof: DataAgreementProof = None,
5758
**kwargs
5859
):
5960
"""Data Agreement instance init"""
@@ -78,6 +79,7 @@ def __init__(
7879
self.proof_chain = proof_chain
7980
self.principle_did = principle_did
8081
self.event = event
82+
self.proof = proof
8183

8284

8385
class DataAgreementInstanceSchema(BaseModelSchema):
@@ -227,3 +229,6 @@ class Meta:
227229
example="did:mydata:123456789abcdefghi",
228230
description="Principle did"
229231
)
232+
233+
# Data agreement proof
234+
proof = fields.Nested(DataAgreementProofSchema, required=False)

mydata_did/v1_0/models/exchange_records/data_agreement_didcomm_transaction_record.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from os import environ
22
from typing import Any
3+
import typing
34

45
from marshmallow import fields, validate
56

@@ -29,7 +30,7 @@ class Meta:
2930
RECORD_TYPE = "data_agreement_crud_didcomm_transaction"
3031
RECORD_ID_NAME = "da_crud_didcomm_tx_id"
3132
WEBHOOK_TOPIC = None
32-
TAG_NAMES = {"~thread_id", "~message_type"}
33+
TAG_NAMES = {"~thread_id", "~message_type", "~connection_id"}
3334

3435
# Message family for the transaction record
3536
# Create Data Agreement message family
@@ -47,13 +48,15 @@ def __init__(
4748
da_crud_didcomm_tx_id: str = None,
4849
thread_id: str = None,
4950
message_type: str = None,
50-
messages_list: dict = None,
51+
messages_list: typing.List[dict] = None,
52+
connection_id: str = None,
5153
**kwargs
5254
):
5355
super().__init__(da_crud_didcomm_tx_id, **kwargs)
5456
self.thread_id = thread_id
5557
self.message_type = message_type
5658
self.messages_list = messages_list
59+
self.connection_id = connection_id
5760

5861
@property
5962
def da_crud_didcomm_tx_id(self) -> str:
@@ -71,6 +74,7 @@ def record_value(self) -> dict:
7174
"thread_id",
7275
"message_type",
7376
"messages_list",
77+
"connection_id",
7478
)
7579
}
7680

@@ -106,3 +110,10 @@ class Meta:
106110
)
107111
# List of messages in the transaction record
108112
messages_list = fields.List(fields.Dict(), required=False, description="Messages list")
113+
114+
# Connection identifier
115+
connection_id = fields.Str(
116+
required=False,
117+
description="Connection identifier",
118+
example=UUIDFour.EXAMPLE,
119+
)

mydata_did/v1_0/models/read_data_agreement_response_model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from typing import List
88

99
from ..utils.regex import MYDATA_DID
10-
from .data_agreement_model import DataAgreementV1, DataAgreementV1Schema
10+
from .data_agreement_instance_model import DataAgreementInstanceSchema, DataAgreementInstance
1111

1212
class ReadDataAgreementResponseBody(BaseModel):
1313
"""ReadDataAgreementResponseBody model class"""
@@ -19,7 +19,7 @@ class Meta:
1919
def __init__(
2020
self,
2121
*,
22-
data_agreement :DataAgreementV1 = None,
22+
data_agreement :DataAgreementInstance = None,
2323
**kwargs,
2424
):
2525
"""
@@ -40,4 +40,4 @@ class Meta:
4040
model_class = ReadDataAgreementResponseBody
4141
unknown = EXCLUDE
4242

43-
data_agreement = fields.Nested(DataAgreementV1Schema())
43+
data_agreement = fields.Nested(DataAgreementInstanceSchema())

0 commit comments

Comments
 (0)