Skip to content

Commit 0c67235

Browse files
authored
Merge branch 'main' into webvh-workshop
2 parents 2ad2d9a + 17bb71c commit 0c67235

20 files changed

Lines changed: 491 additions & 76 deletions

File tree

.github/workflows/codeql.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ jobs:
2424

2525
# Initializes the CodeQL tools for scanning.
2626
- name: Initialize CodeQL
27-
uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
27+
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5
2828
with:
2929
languages: python
3030

3131
- name: Perform CodeQL Analysis
32-
uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
32+
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5

.github/workflows/publish-docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
2323
with:
2424
python-version: 3.x
25-
- uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
25+
- uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
2626
with:
2727
key: ${{ github.ref }}
2828
path: .cache

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,6 @@ jobs:
7171
# Upload the results to GitHub's code scanning dashboard (optional).
7272
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
7373
- name: "Upload to code-scanning"
74-
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
74+
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5
7575
with:
7676
sarif_file: results.sarif

.github/workflows/snyk-lts.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@ jobs:
5252
sed -i 's/"security-severity": "null"/"security-severity": "0"/g' snyk.sarif
5353
5454
- name: Upload result to GitHub Code Scanning
55-
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
55+
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5
5656
with:
5757
sarif_file: snyk.sarif

.github/workflows/snyk.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ jobs:
4545
sed -i 's/"security-severity": "null"/"security-severity": "0"/g' snyk.sarif
4646
4747
- name: Upload result to GitHub Code Scanning
48-
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
48+
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3.29.5
4949
with:
5050
sarif_file: snyk.sarif

acapy_agent/anoncreds/default/legacy_indy/registry.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,25 @@ async def get_credential_definition(
358358
{"ledger_id": ledger_id},
359359
)
360360

361+
# Convert seqNo to schema_id if needed
362+
schema_id_from_cred_def = cred_def["schemaId"]
363+
if schema_id_from_cred_def.isdigit():
364+
# schemaId is a seqNo, fetch the actual schema to get its ID
365+
try:
366+
schema = await ledger.fetch_schema_by_seq_no(
367+
int(schema_id_from_cred_def)
368+
)
369+
if schema and schema.get("id"):
370+
schema_id_from_cred_def = schema["id"]
371+
# If schema is None or missing id, fall back to seqNo
372+
except LedgerError:
373+
# If fetching fails, fall back to using seqNo as schemaId
374+
pass
375+
361376
cred_def_value = CredDefValue.deserialize(cred_def["value"])
362377
anoncreds_credential_definition = CredDef(
363378
issuer_id=cred_def["id"].split(":")[0],
364-
schema_id=cred_def["schemaId"],
379+
schema_id=schema_id_from_cred_def,
365380
type=cred_def["type"],
366381
tag=cred_def["tag"],
367382
value=cred_def_value,

acapy_agent/anoncreds/events.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
FIRST_REGISTRY_TAG = str(0) # This tag is used to signify it is the first registry
99

1010

11+
# Schema finished event
12+
SCHEMA_FINISHED_EVENT = "anoncreds::schema::finished"
13+
1114
# Initial credential definition event, kicks off the revocation setup process
1215
CRED_DEF_FINISHED_EVENT = "anoncreds::credential-definition::finished"
1316

@@ -102,6 +105,7 @@ class CredDefFinishedPayload(NamedTuple):
102105
issuer_id: str
103106
support_revocation: bool
104107
max_cred_num: int
108+
tag: str
105109
options: dict
106110

107111

@@ -131,6 +135,7 @@ def with_payload(
131135
issuer_id: str,
132136
support_revocation: bool,
133137
max_cred_num: int,
138+
tag: str,
134139
options: Optional[dict] = None,
135140
):
136141
"""With payload."""
@@ -140,6 +145,7 @@ def with_payload(
140145
issuer_id=issuer_id,
141146
support_revocation=support_revocation,
142147
max_cred_num=max_cred_num,
148+
tag=tag,
143149
options=options or {},
144150
)
145151
return cls(payload)
@@ -150,6 +156,62 @@ def payload(self) -> CredDefFinishedPayload:
150156
return self._payload
151157

152158

159+
class SchemaFinishedPayload(NamedTuple):
160+
"""Payload of schema finished event."""
161+
162+
schema_id: str
163+
issuer_id: str
164+
name: str
165+
version: str
166+
attr_names: list
167+
options: dict
168+
169+
170+
class SchemaFinishedEvent(Event):
171+
"""Event for schema finished."""
172+
173+
event_topic = SCHEMA_FINISHED_EVENT
174+
175+
def __init__(
176+
self,
177+
payload: SchemaFinishedPayload,
178+
):
179+
"""Initialize an instance.
180+
181+
Args:
182+
payload: SchemaFinishedPayload
183+
184+
"""
185+
self._topic = self.event_topic
186+
self._payload = payload
187+
188+
@classmethod
189+
def with_payload(
190+
cls,
191+
schema_id: str,
192+
issuer_id: str,
193+
name: str,
194+
version: str,
195+
attr_names: list,
196+
options: Optional[dict] = None,
197+
):
198+
"""With payload."""
199+
payload = SchemaFinishedPayload(
200+
schema_id=schema_id,
201+
issuer_id=issuer_id,
202+
name=name,
203+
version=version,
204+
attr_names=attr_names,
205+
options=options or {},
206+
)
207+
return cls(payload)
208+
209+
@property
210+
def payload(self) -> SchemaFinishedPayload:
211+
"""Return payload."""
212+
return self._payload
213+
214+
153215
class RevRegDefFinishedPayload(NamedTuple):
154216
"""Payload of rev reg def finished event."""
155217

acapy_agent/anoncreds/issuer.py

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
STATE_FINISHED,
3434
)
3535
from .error_messages import ANONCREDS_PROFILE_REQUIRED_MSG
36-
from .events import CredDefFinishedEvent
36+
from .events import CredDefFinishedEvent, SchemaFinishedEvent
3737
from .models.credential_definition import CredDef, CredDefResult
3838
from .models.schema import AnonCredsSchema, GetSchemaResult, SchemaResult, SchemaState
3939
from .registry import AnonCredsRegistry
@@ -156,6 +156,18 @@ async def store_schema(
156156
"state": result.schema_state.state,
157157
},
158158
)
159+
160+
if result.schema_state.state == STATE_FINISHED:
161+
await self.notify(
162+
SchemaFinishedEvent.with_payload(
163+
schema_id=result.schema_state.schema_id,
164+
issuer_id=result.schema_state.schema.issuer_id,
165+
name=result.schema_state.schema.name,
166+
version=result.schema_state.schema.version,
167+
attr_names=result.schema_state.schema.attr_names,
168+
options={},
169+
)
170+
)
159171
except DBError as err:
160172
raise AnonCredsIssuerError("Error storing schema") from err
161173

@@ -240,9 +252,25 @@ async def create_and_register_schema(
240252
async def finish_schema(self, job_id: str, schema_id: str) -> None:
241253
"""Mark a schema as finished."""
242254
async with self.profile.transaction() as txn:
243-
await self._finish_registration(txn, CATEGORY_SCHEMA, job_id, schema_id)
255+
entry = await self._finish_registration(
256+
txn, CATEGORY_SCHEMA, job_id, schema_id
257+
)
244258
await txn.commit()
245259

260+
from .models.schema import AnonCredsSchema
261+
262+
schema = AnonCredsSchema.from_json(entry.value)
263+
await self.notify(
264+
SchemaFinishedEvent.with_payload(
265+
schema_id=schema_id,
266+
issuer_id=schema.issuer_id,
267+
name=schema.name,
268+
version=schema.version,
269+
attr_names=schema.attr_names,
270+
options={},
271+
)
272+
)
273+
246274
async def get_created_schemas(
247275
self,
248276
name: Optional[str] = None,
@@ -434,13 +462,17 @@ async def store_credential_definition(
434462
await txn.commit()
435463

436464
if cred_def_result.credential_definition_state.state == STATE_FINISHED:
465+
cred_def = (
466+
cred_def_result.credential_definition_state.credential_definition
467+
)
437468
await self.notify(
438469
CredDefFinishedEvent.with_payload(
439470
schema_id=schema_result.schema_id,
440471
cred_def_id=identifier,
441-
issuer_id=cred_def_result.credential_definition_state.credential_definition.issuer_id,
472+
issuer_id=cred_def.issuer_id,
442473
support_revocation=support_revocation,
443474
max_cred_num=max_cred_num,
475+
tag=cred_def.tag,
444476
options=options,
445477
)
446478
)
@@ -477,6 +509,7 @@ async def finish_cred_def(
477509
issuer_id=cred_def.issuer_id,
478510
support_revocation=support_revocation,
479511
max_cred_num=max_cred_num,
512+
tag=cred_def.tag,
480513
options=options,
481514
)
482515
)

0 commit comments

Comments
 (0)