Skip to content

Commit

Permalink
Merge pull request #681 from 0xPolygonID/PID-2261-update-create-claim…
Browse files Browse the repository at this point in the history
…-endpoint-to-support-proof-s

chore: add proofs to create claim endpoint
  • Loading branch information
martinsaporiti authored Jun 26, 2024
2 parents 3b5670a + 6c462da commit 7e67052
Show file tree
Hide file tree
Showing 10 changed files with 222 additions and 52 deletions.
7 changes: 7 additions & 0 deletions api/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,13 @@ components:
$ref: '#/components/schemas/RefreshService'
displayMethod:
$ref: '#/components/schemas/DisplayMethod'
proofs:
type: array
items:
type: string
x-omitempty: false
example: "BJJSignature2021"
enum: [ BJJSignature2021, Iden3SparseMerkleTreeProof]
example:
credentialSchema: "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json"
type: "KYCAgeCredential"
Expand Down
32 changes: 21 additions & 11 deletions internal/api/api.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 19 additions & 1 deletion internal/api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,25 @@ func (s *Server) CreateClaim(ctx context.Context, request CreateClaimRequestObje
expiration = common.ToPointer(time.Unix(*request.Body.Expiration, 0))
}

req := ports.NewCreateClaimRequest(did, request.Body.CredentialSchema, request.Body.CredentialSubject, expiration, request.Body.Type, request.Body.Version, request.Body.SubjectPosition, request.Body.MerklizedRootPosition, common.ToPointer(true), common.ToPointer(true), nil, false, s.cfg.CredentialStatus.CredentialStatusType, toVerifiableRefreshService(request.Body.RefreshService), request.Body.RevNonce,
claimRequestProofs := ports.ClaimRequestProofs{}
if request.Body.Proofs == nil {
claimRequestProofs.BJJSignatureProof2021 = true
claimRequestProofs.Iden3SparseMerkleTreeProof = true
} else {
for _, proof := range *request.Body.Proofs {
if string(proof) == string(verifiable.BJJSignatureProofType) {
claimRequestProofs.BJJSignatureProof2021 = true
continue
}
if string(proof) == string(verifiable.Iden3SparseMerkleTreeProofType) {
claimRequestProofs.Iden3SparseMerkleTreeProof = true
continue
}
return CreateClaim400JSONResponse{N400JSONResponse{Message: fmt.Sprintf("unsupported proof type: %s", proof)}}, nil
}
}

req := ports.NewCreateClaimRequest(did, request.Body.CredentialSchema, request.Body.CredentialSubject, expiration, request.Body.Type, request.Body.Version, request.Body.SubjectPosition, request.Body.MerklizedRootPosition, claimRequestProofs, nil, false, s.cfg.CredentialStatus.CredentialStatusType, toVerifiableRefreshService(request.Body.RefreshService), request.Body.RevNonce,
toVerifiableDisplayMethod(request.Body.DisplayMethod))

resp, err := s.claimService.Save(ctx, req)
Expand Down
96 changes: 95 additions & 1 deletion internal/api/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,76 @@ func TestServer_CreateClaim(t *testing.T) {
createCredentialEventsCount: 1,
},
},
{
name: "Happy path with two proofs",
auth: authOk,
did: did,
body: CreateClaimRequest{
CredentialSchema: "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json",
Type: "KYCAgeCredential",
CredentialSubject: map[string]any{
"id": "did:polygonid:polygon:mumbai:2qFDkNkWePjd6URt6kGQX14a7wVKhBZt8bpy7HZJZi",
"birthday": 19960425,
"documentType": 2,
},
Expiration: common.ToPointer(time.Now().Unix()),
Proofs: &[]CreateClaimRequestProofs{
"BJJSignature2021",
"Iden3SparseMerkleTreeProof",
},
},
expected: expected{
response: CreateClaim201JSONResponse{},
httpCode: http.StatusCreated,
createCredentialEventsCount: 1,
},
},
{
name: "Happy path with bjjSignature proof",
auth: authOk,
did: did,
body: CreateClaimRequest{
CredentialSchema: "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json",
Type: "KYCAgeCredential",
CredentialSubject: map[string]any{
"id": "did:polygonid:polygon:mumbai:2qFDkNkWePjd6URt6kGQX14a7wVKhBZt8bpy7HZJZi",
"birthday": 19960425,
"documentType": 2,
},
Expiration: common.ToPointer(time.Now().Unix()),
Proofs: &[]CreateClaimRequestProofs{
"BJJSignature2021",
},
},
expected: expected{
response: CreateClaim201JSONResponse{},
httpCode: http.StatusCreated,
createCredentialEventsCount: 1,
},
},
{
name: "Happy path with Iden3SparseMerkleTreeProof proof",
auth: authOk,
did: did,
body: CreateClaimRequest{
CredentialSchema: "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json",
Type: "KYCAgeCredential",
CredentialSubject: map[string]any{
"id": "did:polygonid:polygon:mumbai:2qFDkNkWePjd6URt6kGQX14a7wVKhBZt8bpy7HZJZi",
"birthday": 19960425,
"documentType": 2,
},
Expiration: common.ToPointer(time.Now().Unix()),
Proofs: &[]CreateClaimRequestProofs{
"Iden3SparseMerkleTreeProof",
},
},
expected: expected{
response: CreateClaim201JSONResponse{},
httpCode: http.StatusCreated,
createCredentialEventsCount: 0,
},
},
{
name: "Happy path with ipfs schema",
auth: authOk,
Expand Down Expand Up @@ -556,6 +626,26 @@ func TestServer_CreateClaim(t *testing.T) {
httpCode: http.StatusUnprocessableEntity,
},
},
{
name: "Wrong proof type",
auth: authOk,
did: did,
body: CreateClaimRequest{
CredentialSchema: "http://www.wrong.url/cannot/get/the/credential",
Type: "KYCAgeCredential",
CredentialSubject: map[string]any{
"id": "did:polygonid:polygon:mumbai:2qE1BZ7gcmEoP2KppvFPCZqyzyb5tK9T6Gec5HFANQ",
"birthday": 19960424,
"documentType": 2,
},
Expiration: common.ToPointer(time.Now().Unix()),
Proofs: &[]CreateClaimRequestProofs{"wrong proof"},
},
expected: expected{
response: CreateClaim400JSONResponse{N400JSONResponse{Message: "unsupported proof type: wrong proof"}},
httpCode: http.StatusBadRequest,
},
},
} {
t.Run(tc.name, func(t *testing.T) {
pubSub.Clear(event.CreateCredentialEvent)
Expand Down Expand Up @@ -1400,7 +1490,11 @@ func TestServer_GetRevocationStatus(t *testing.T) {
typeC := "KYCAgeCredential"

merklizedRootPosition := "value"
claim, err := claimsService.Save(ctx, ports.NewCreateClaimRequest(did, schema, credentialSubject, common.ToPointer(time.Now()), typeC, nil, nil, &merklizedRootPosition, common.ToPointer(true), common.ToPointer(true), nil, false, verifiable.Iden3commRevocationStatusV1, nil, nil, nil))
claimRequestProofs := ports.ClaimRequestProofs{
BJJSignatureProof2021: true,
Iden3SparseMerkleTreeProof: true,
}
claim, err := claimsService.Save(ctx, ports.NewCreateClaimRequest(did, schema, credentialSubject, common.ToPointer(time.Now()), typeC, nil, nil, &merklizedRootPosition, claimRequestProofs, nil, false, verifiable.Iden3commRevocationStatusV1, nil, nil, nil))
assert.NoError(t, err)

type expected struct {
Expand Down
12 changes: 11 additions & 1 deletion internal/api_ui/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,17 @@ func (s *Server) CreateCredential(ctx context.Context, request CreateCredentialR
if request.Body.SignatureProof == nil && request.Body.MtProof == nil {
return CreateCredential400JSONResponse{N400JSONResponse{Message: "you must to provide at least one proof type"}}, nil
}
req := ports.NewCreateClaimRequest(&s.cfg.APIUI.IssuerDID, request.Body.CredentialSchema, request.Body.CredentialSubject, request.Body.Expiration, request.Body.Type, nil, nil, nil, request.Body.SignatureProof, request.Body.MtProof, nil, true, s.cfg.CredentialStatus.CredentialStatusType, toVerifiableRefreshService(request.Body.RefreshService), nil,

claimRequestProofs := ports.ClaimRequestProofs{}
if request.Body.SignatureProof != nil && *request.Body.SignatureProof {
claimRequestProofs.BJJSignatureProof2021 = true
}

if request.Body.MtProof != nil && *request.Body.MtProof {
claimRequestProofs.Iden3SparseMerkleTreeProof = true
}

req := ports.NewCreateClaimRequest(&s.cfg.APIUI.IssuerDID, request.Body.CredentialSchema, request.Body.CredentialSubject, request.Body.Expiration, request.Body.Type, nil, nil, nil, claimRequestProofs, nil, true, s.cfg.CredentialStatus.CredentialStatusType, toVerifiableRefreshService(request.Body.RefreshService), nil,
toDisplayMethodService(request.Body.DisplayMethod))
resp, err := s.claimService.Save(ctx, req)
if err != nil {
Expand Down
Loading

0 comments on commit 7e67052

Please sign in to comment.