Skip to content

Commit f0c62cb

Browse files
authored
Fix Class import for AnonCreds Registry routes (openwallet-foundation#3495)
* Import the anoncreds revocation registry ID validator for the anoncreds routes Signed-off-by: PatStLouis <[email protected]> * Linting Signed-off-by: PatStLouis <[email protected]> * Add AnonCreds Cred Rev ID values Signed-off-by: PatStLouis <[email protected]> * rename anoncreds revocation openapi classes Signed-off-by: PatStLouis <[email protected]> * linting Signed-off-by: PatStLouis <[email protected]> * rename anoncreds revocation openapi classes Signed-off-by: PatStLouis <[email protected]> * update test fixtures Signed-off-by: PatStLouis <[email protected]> * Lint Signed-off-by: PatStLouis <[email protected]> --------- Signed-off-by: PatStLouis <[email protected]>
1 parent 457eee0 commit f0c62cb

File tree

4 files changed

+65
-43
lines changed

4 files changed

+65
-43
lines changed

acapy_agent/anoncreds/routes.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
ANONCREDS_CRED_DEF_ID_EXAMPLE,
2222
ANONCREDS_DID_EXAMPLE,
2323
ANONCREDS_REV_REG_ID_EXAMPLE,
24+
ANONCREDS_REV_REG_ID_VALIDATE,
2425
ANONCREDS_SCHEMA_ID_EXAMPLE,
2526
UUIDFour,
2627
)
2728
from ..revocation.error import RevocationNotSupportedError
28-
from ..revocation.routes import RevocationModuleResponseSchema, RevRegIdMatchInfoSchema
2929
from ..storage.error import StorageNotFoundError
3030
from ..utils.profiles import is_not_anoncreds_profile_raise_web_exception
3131
from .base import (
@@ -62,6 +62,23 @@
6262
)
6363

6464

65+
class AnoncredsRevocationModuleResponseSchema(OpenAPISchema):
66+
"""Response schema for Revocation Module."""
67+
68+
69+
class AnonCredsRevRegIdMatchInfoSchema(OpenAPISchema):
70+
"""Path parameters and validators for request taking rev reg id."""
71+
72+
rev_reg_id = fields.Str(
73+
required=True,
74+
validate=ANONCREDS_REV_REG_ID_VALIDATE,
75+
metadata={
76+
"description": "Revocation Registry identifier",
77+
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
78+
},
79+
)
80+
81+
6582
class SchemaIdMatchInfo(OpenAPISchema):
6683
"""Path parameters and validators for request taking schema id."""
6784

@@ -699,8 +716,8 @@ async def rev_list_post(request: web.BaseRequest):
699716
tags=["anoncreds - revocation"],
700717
summary="Upload local tails file to server",
701718
)
702-
@match_info_schema(RevRegIdMatchInfoSchema())
703-
@response_schema(RevocationModuleResponseSchema(), description="")
719+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
720+
@response_schema(AnoncredsRevocationModuleResponseSchema(), description="")
704721
@tenant_authentication
705722
async def upload_tails_file(request: web.BaseRequest):
706723
"""Request handler to upload local tails file for revocation registry.
@@ -735,8 +752,8 @@ async def upload_tails_file(request: web.BaseRequest):
735752
tags=["anoncreds - revocation"],
736753
summary="Update the active registry",
737754
)
738-
@match_info_schema(RevRegIdMatchInfoSchema())
739-
@response_schema(RevocationModuleResponseSchema(), description="")
755+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
756+
@response_schema(AnoncredsRevocationModuleResponseSchema(), description="")
740757
@tenant_authentication
741758
async def set_active_registry(request: web.BaseRequest):
742759
"""Request handler to set the active registry.

acapy_agent/messaging/valid.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,21 @@ def __init__(self):
592592
)
593593

594594

595+
class AnonCredsCredRevId(Regexp):
596+
"""Validate value against anoncreds credential revocation identifier specification."""
597+
598+
EXAMPLE = "12345"
599+
PATTERN = r"^[1-9][0-9]*$"
600+
601+
def __init__(self):
602+
"""Initialize the instance."""
603+
604+
super().__init__(
605+
AnonCredsCredRevId.PATTERN,
606+
error="Value {input} is not an anoncreds credential revocation identifier",
607+
)
608+
609+
595610
class Predicate(OneOf):
596611
"""Validate value against predicate."""
597612

@@ -1053,6 +1068,9 @@ def __init__(
10531068
INDY_CRED_REV_ID_VALIDATE = IndyCredRevId()
10541069
INDY_CRED_REV_ID_EXAMPLE = IndyCredRevId.EXAMPLE
10551070

1071+
ANONCREDS_CRED_REV_ID_VALIDATE = AnonCredsCredRevId()
1072+
ANONCREDS_CRED_REV_ID_EXAMPLE = AnonCredsCredRevId.EXAMPLE
1073+
10561074
MAJOR_MINOR_VERSION_VALIDATE = MajorMinorVersion()
10571075
MAJOR_MINOR_VERSION_EXAMPLE = MajorMinorVersion.EXAMPLE
10581076

acapy_agent/revocation_anoncreds/routes.py

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
from ..anoncreds.routes import (
3030
create_transaction_for_endorser_description,
3131
endorser_connection_id_description,
32+
AnonCredsRevRegIdMatchInfoSchema,
33+
AnoncredsRevocationModuleResponseSchema,
3234
)
3335
from ..askar.profile_anon import AskarAnoncredsProfile
3436
from ..indy.issuer import IndyIssuerError
@@ -40,8 +42,8 @@
4042
from ..messaging.valid import (
4143
ANONCREDS_CRED_DEF_ID_EXAMPLE,
4244
ANONCREDS_CRED_DEF_ID_VALIDATE,
43-
INDY_CRED_REV_ID_EXAMPLE,
44-
INDY_CRED_REV_ID_VALIDATE,
45+
ANONCREDS_CRED_REV_ID_EXAMPLE,
46+
ANONCREDS_CRED_REV_ID_VALIDATE,
4547
ANONCREDS_REV_REG_ID_EXAMPLE,
4648
ANONCREDS_REV_REG_ID_VALIDATE,
4749
UUID4_EXAMPLE,
@@ -68,10 +70,6 @@
6870
TAG_TITLE = "anoncreds - revocation"
6971

7072

71-
class RevocationAnoncredsModuleResponseSchema(OpenAPISchema):
72-
"""Response schema for Revocation Module."""
73-
74-
7573
class RevRegResultSchemaAnoncreds(OpenAPISchema):
7674
"""Result schema for revocation registry creation request."""
7775

@@ -107,10 +105,10 @@ def validate_fields(self, data, **kwargs):
107105
)
108106
cred_rev_id = fields.Str(
109107
required=False,
110-
validate=INDY_CRED_REV_ID_VALIDATE,
108+
validate=ANONCREDS_CRED_REV_ID_VALIDATE,
111109
metadata={
112110
"description": "Credential revocation identifier",
113-
"example": INDY_CRED_REV_ID_EXAMPLE,
111+
"example": ANONCREDS_CRED_REV_ID_EXAMPLE,
114112
},
115113
)
116114
cred_ex_id = fields.Str(
@@ -279,19 +277,6 @@ class SetRevRegStateQueryStringSchema(OpenAPISchema):
279277
)
280278

281279

282-
class RevRegIdMatchInfoSchema(OpenAPISchema):
283-
"""Path parameters and validators for request taking rev reg id."""
284-
285-
rev_reg_id = fields.Str(
286-
required=True,
287-
validate=ANONCREDS_REV_REG_ID_VALIDATE,
288-
metadata={
289-
"description": "Revocation Registry identifier",
290-
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
291-
},
292-
)
293-
294-
295280
class RevocationCredDefIdMatchInfoSchema(OpenAPISchema):
296281
"""Path parameters and validators for request taking cred def id."""
297282

@@ -351,10 +336,10 @@ class PublishRevocationsSchemaAnoncreds(OpenAPISchema):
351336
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
352337
values=fields.List(
353338
fields.Str(
354-
validate=INDY_CRED_REV_ID_VALIDATE,
339+
validate=ANONCREDS_CRED_REV_ID_VALIDATE,
355340
metadata={
356341
"description": "Credential revocation identifier",
357-
"example": INDY_CRED_REV_ID_EXAMPLE,
342+
"example": ANONCREDS_CRED_REV_ID_EXAMPLE,
358343
},
359344
)
360345
),
@@ -371,10 +356,10 @@ class PublishRevocationsResultSchemaAnoncreds(OpenAPISchema):
371356
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
372357
values=fields.List(
373358
fields.Str(
374-
validate=INDY_CRED_REV_ID_VALIDATE,
359+
validate=ANONCREDS_CRED_REV_ID_VALIDATE,
375360
metadata={
376361
"description": "Credential revocation identifier",
377-
"example": INDY_CRED_REV_ID_EXAMPLE,
362+
"example": ANONCREDS_CRED_REV_ID_EXAMPLE,
378363
},
379364
)
380365
),
@@ -455,7 +440,7 @@ def validate_fields(self, data, **kwargs):
455440
summary="Revoke an issued credential",
456441
)
457442
@request_schema(RevokeRequestSchemaAnoncreds())
458-
@response_schema(RevocationAnoncredsModuleResponseSchema(), description="")
443+
@response_schema(AnoncredsRevocationModuleResponseSchema(), description="")
459444
@tenant_authentication
460445
async def revoke(request: web.BaseRequest):
461446
"""Request handler for storing a credential revocation.
@@ -585,7 +570,7 @@ async def get_rev_regs(request: web.BaseRequest):
585570
tags=[TAG_TITLE],
586571
summary="Get revocation registry by revocation registry id",
587572
)
588-
@match_info_schema(RevRegIdMatchInfoSchema())
573+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
589574
@response_schema(RevRegResultSchemaAnoncreds(), 200, description="")
590575
@tenant_authentication
591576
async def get_rev_reg(request: web.BaseRequest):
@@ -723,7 +708,7 @@ async def rotate_rev_reg(request: web.BaseRequest):
723708
tags=[TAG_TITLE],
724709
summary="Get number of credentials issued against revocation registry",
725710
)
726-
@match_info_schema(RevRegIdMatchInfoSchema())
711+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
727712
@response_schema(RevRegIssuedResultSchemaAnoncreds(), 200, description="")
728713
@tenant_authentication
729714
async def get_rev_reg_issued_count(request: web.BaseRequest):
@@ -764,7 +749,7 @@ async def get_rev_reg_issued_count(request: web.BaseRequest):
764749
tags=[TAG_TITLE],
765750
summary="Get details of credentials issued against revocation registry",
766751
)
767-
@match_info_schema(RevRegIdMatchInfoSchema())
752+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
768753
@response_schema(CredRevRecordDetailsResultSchemaAnoncreds(), 200, description="")
769754
@tenant_authentication
770755
async def get_rev_reg_issued(request: web.BaseRequest):
@@ -806,7 +791,7 @@ async def get_rev_reg_issued(request: web.BaseRequest):
806791
tags=[TAG_TITLE],
807792
summary="Get details of revoked credentials from ledger",
808793
)
809-
@match_info_schema(RevRegIdMatchInfoSchema())
794+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
810795
@response_schema(CredRevIndyRecordsResultSchemaAnoncreds(), 200, description="")
811796
@tenant_authentication
812797
async def get_rev_reg_indy_recs(request: web.BaseRequest):
@@ -851,7 +836,7 @@ async def get_rev_reg_indy_recs(request: web.BaseRequest):
851836
tags=[TAG_TITLE],
852837
summary="Fix revocation state in wallet and return number of updated entries",
853838
)
854-
@match_info_schema(RevRegIdMatchInfoSchema())
839+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
855840
@querystring_schema(RevRegUpdateRequestMatchInfoSchema())
856841
@response_schema(RevRegWalletUpdatedResultSchemaAnoncreds(), 200, description="")
857842
@tenant_authentication
@@ -992,8 +977,8 @@ async def get_cred_rev_record(request: web.BaseRequest):
992977
summary="Download tails file",
993978
produces=["application/octet-stream"],
994979
)
995-
@match_info_schema(RevRegIdMatchInfoSchema())
996-
@response_schema(RevocationAnoncredsModuleResponseSchema, description="tails file")
980+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
981+
@response_schema(AnoncredsRevocationModuleResponseSchema, description="tails file")
997982
@tenant_authentication
998983
async def get_tails_file(request: web.BaseRequest) -> web.FileResponse:
999984
"""Request handler to download tails file for revocation registry.
@@ -1030,7 +1015,7 @@ async def get_tails_file(request: web.BaseRequest) -> web.FileResponse:
10301015

10311016

10321017
@docs(tags=[TAG_TITLE], summary="Set revocation registry state manually")
1033-
@match_info_schema(RevRegIdMatchInfoSchema())
1018+
@match_info_schema(AnonCredsRevRegIdMatchInfoSchema())
10341019
@querystring_schema(SetRevRegStateQueryStringSchema())
10351020
@response_schema(RevRegResultSchemaAnoncreds(), 200, description="")
10361021
@tenant_authentication

acapy_agent/revocation_anoncreds/tests/test_routes.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ async def test_validate_cred_rev_rec_qs_and_revoke_req(self):
4343
req.validate_fields(
4444
{
4545
"rev_reg_id": test_module.ANONCREDS_REV_REG_ID_EXAMPLE,
46-
"cred_rev_id": test_module.INDY_CRED_REV_ID_EXAMPLE,
46+
"cred_rev_id": test_module.ANONCREDS_CRED_REV_ID_EXAMPLE,
4747
}
4848
)
4949
req.validate_fields({"cred_ex_id": test_module.UUID4_EXAMPLE})
@@ -54,7 +54,9 @@ async def test_validate_cred_rev_rec_qs_and_revoke_req(self):
5454
{"rev_reg_id": test_module.ANONCREDS_REV_REG_ID_EXAMPLE}
5555
)
5656
with self.assertRaises(test_module.ValidationError):
57-
req.validate_fields({"cred_rev_id": test_module.INDY_CRED_REV_ID_EXAMPLE})
57+
req.validate_fields(
58+
{"cred_rev_id": test_module.ANONCREDS_CRED_REV_ID_EXAMPLE}
59+
)
5860
with self.assertRaises(test_module.ValidationError):
5961
req.validate_fields(
6062
{
@@ -65,15 +67,15 @@ async def test_validate_cred_rev_rec_qs_and_revoke_req(self):
6567
with self.assertRaises(test_module.ValidationError):
6668
req.validate_fields(
6769
{
68-
"cred_rev_id": test_module.INDY_CRED_REV_ID_EXAMPLE,
70+
"cred_rev_id": test_module.ANONCREDS_CRED_REV_ID_EXAMPLE,
6971
"cred_ex_id": test_module.UUID4_EXAMPLE,
7072
}
7173
)
7274
with self.assertRaises(test_module.ValidationError):
7375
req.validate_fields(
7476
{
7577
"rev_reg_id": test_module.ANONCREDS_REV_REG_ID_EXAMPLE,
76-
"cred_rev_id": test_module.INDY_CRED_REV_ID_EXAMPLE,
78+
"cred_rev_id": test_module.ANONCREDS_CRED_REV_ID_EXAMPLE,
7779
"cred_ex_id": test_module.UUID4_EXAMPLE,
7880
}
7981
)

0 commit comments

Comments
 (0)