Skip to content

Commit

Permalink
Update validator interface
Browse files Browse the repository at this point in the history
  • Loading branch information
OR13 committed Jul 2, 2024
1 parent 8528a1d commit e505e84
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 36 deletions.
11 changes: 5 additions & 6 deletions src/cr1/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,17 +255,16 @@ export type ConformanceWarningMessage = {

export type SchemaValidation = 'succeeded' | 'failed' | 'ignored'


export type StatusCheckResult = {
set: boolean,
purpose: string,
errors?: StatusListError[]
} & Record<string, any>
} & Record<string, any> // because of enumerations.

export type SchemaCheckResult = { validation?: SchemaValidation, errors?: JsonSchemaError[], }

export type ValidationResult = {
valid: boolean
verified: boolean
content: VerifiableCredential
schema: Record<string, { validation?: SchemaValidation, errors?: JsonSchemaError[], }>
schema: Record<string, SchemaCheckResult>
status: Record<string, StatusCheckResult>
warnings: ConformanceWarningMessage[]
}
Expand Down
12 changes: 3 additions & 9 deletions src/cr1/validator/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const validator = ({ resolver }: RequestValidator) => {
validate: async <T = TraceablePresentationValidationResult>({ type, content }: SecuredContentType) => {
const verified = await verifier({ resolver }).verify<VerifiableCredential>({ type, content })
const validation: ValidationResult = {
valid: true,
verified: true,
content: verified,
schema: {},
status: {},
Expand Down Expand Up @@ -65,7 +65,6 @@ export const validator = ({ resolver }: RequestValidator) => {
}
validation.schema[schema.id] = { validation: valid ? 'succeeded' : 'failed' }
if (!valid) {
validation.valid = false
validation.schema[schema.id].errors = compiledSchemaValidator.errors as JsonSchemaError[]
}
}
Expand All @@ -84,20 +83,15 @@ export const validator = ({ resolver }: RequestValidator) => {
const verified = await verifier({ resolver }).verify<BitstringStatusListCredential>(statusListCredential)
// confirm purpose matches
if (status.statusPurpose !== verified.credentialSubject.statusPurpose) {
validation.valid = false
validation.status[`${status.id}`] = {
set: false,
purpose: status.statusPurpose,
[status.statusPurpose]: false,
errors: [{
message: 'status list purpose does not match credential status'
}]
}
} else {
const bit = bs(verified.credentialSubject.encodedList).get(parseInt(status.statusListIndex, 10))
if (bit) {
validation.valid = false
}
validation.status[`${status.id}`] = { set: bit, purpose: status.statusPurpose, [status.statusPurpose]: bit }
validation.status[`${status.id}`] = { [status.statusPurpose]: bit }
}

}
Expand Down
2 changes: 1 addition & 1 deletion test/json-schema-tests/better-schema-errors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ credentialSubject:
type: "application/vc+ld+json+jwt",
content: issued,
});
expect(validation1.valid).toBe(false);
expect(validation1.verified).toBe(true);
expect(validation1.schema).toEqual({
"https://vendor.example/api/schemas/product-passport": {
"validation": "failed",
Expand Down
4 changes: 2 additions & 2 deletions test/json-schema-tests/json-schema-tests.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,12 +221,12 @@ credentialSubject:
type: "application/vc+ld+json+jwt",
content: issued,
});
expect(valid1.valid).toBe(true);
expect(valid1.verified).toBe(true);

const valid2 = await validator.validate({
type: "application/vc+ld+json+jwt",
content: issued,
});
expect(valid2.valid).toBe(true);
expect(valid2.verified).toBe(true);
});
});
2 changes: 1 addition & 1 deletion test/json-schema-tests/optional-schema-validation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ it("can disable schema validation", async () => {
type: "application/vc+ld+json+jwt",
content: issued,
});
expect(validation1.valid).toBe(true);
expect(validation1.verified).toBe(true);
// console.log(JSON.stringify(validation1, null, 2))
expect(validation1.schema['https://vendor.example/api/schemas/product-passport'].validation).toBe('ignored')
});
6 changes: 3 additions & 3 deletions test/jwt-product-passports/integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,10 @@ credentialSubject:
type: 'application/vc+ld+json+jwt',
content: issued,
})
expect(validated.valid).toBe(true)
expect(validated.verified).toBe(true)
expect(validated.schema[`${baseURL}/schemas/product-passport`].validation).toBe('succeeded')
expect(validated.status[`${baseURL}/credentials/status/3#${revocationIndex}`]).toEqual({ "purpose": "revocation", "revocation": false, "set": false })
expect(validated.status[`${baseURL}/credentials/status/4#${suspensionIndex}`]).toEqual({ "purpose": "suspension", "suspension": false, "set": false })
expect(validated.status[`${baseURL}/credentials/status/3#${revocationIndex}`]).toEqual({ "revocation": false, })
expect(validated.status[`${baseURL}/credentials/status/4#${suspensionIndex}`]).toEqual({ "suspension": false, })


const vp = await transmute
Expand Down
4 changes: 2 additions & 2 deletions test/w3c-cr-1/3-schema.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(true);
expect(validation.verified).toBe(true);
expect(validation.schema).toEqual({ 'https://issuer.example/schemas/42': { validation: 'succeeded' } });
})

Expand Down Expand Up @@ -154,7 +154,7 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(false);
expect(validation.verified).toBe(true);
expect(validation.schema).toEqual({
"https://issuer.example/schemas/52": {
"validation": 'failed',
Expand Down
16 changes: 4 additions & 12 deletions test/w3c-cr-1/4-status.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,9 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(true);
expect(validation.verified).toBe(true);
expect(validation.status['https://example.com/credentials/status/3#94567']).toEqual({
"purpose": "revocation",
"revocation": false,
"set": false
});

})
Expand Down Expand Up @@ -186,11 +184,9 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(false);
expect(validation.verified).toBe(true);
expect(validation.status['https://example.com/credentials/status/3#94567']).toEqual({
"purpose": "revocation",
"revocation": true,
"set": true
});
})
})
Expand Down Expand Up @@ -265,10 +261,8 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(true);
expect(validation.verified).toBe(true);
expect(validation.status['https://example.com/credentials/status/3#94567']).toEqual({
"set": false,
"purpose": "suspension",
"suspension": false
});

Expand Down Expand Up @@ -355,10 +349,8 @@ credentialSubject:
`)
}),
})
expect(validation.valid).toBe(false);
expect(validation.verified).toBe(true);
expect(validation.status['https://example.com/credentials/status/3#94567']).toEqual({
"set": true,
"purpose": "suspension",
"suspension": true
});

Expand Down

0 comments on commit e505e84

Please sign in to comment.