Skip to content

Commit 2b423f6

Browse files
committed
feat: Support purpose claim
1 parent 6fb6b6a commit 2b423f6

4 files changed

Lines changed: 35 additions & 2 deletions

File tree

packages/uma/config/credentials/verifiers/default.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
"@type": "TypedVerifier",
99
"metaType": "urn:solidlab:uma:claims:formats:meta",
1010
"verifiers": [
11+
{
12+
"TypedVerifier:_verifiers_key": "http://www.w3.org/ns/odrl/2/purpose",
13+
"TypedVerifier:_verifiers_value": {
14+
"@id": "urn:uma:default:KeyValueVerifier",
15+
"@type": "KeyValueVerifier"
16+
}
17+
},
1118
{
1219
"TypedVerifier:_verifiers_key": "urn:solidlab:uma:claims:formats:webid",
1320
"TypedVerifier:_verifiers_value": {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { getLoggerFor } from '@solid/community-server';
2+
import { ClaimSet } from '../ClaimSet';
3+
import { Credential } from '../Credential';
4+
import { Verifier } from './Verifier';
5+
6+
/**
7+
* A verifier that assigns the credential token value as claims value, with the format being used as claims key.
8+
*/
9+
export class KeyValueVerifier implements Verifier {
10+
protected readonly logger = getLoggerFor(this);
11+
12+
constructor() {
13+
this.logger.warn("You are using an KeyValueVerifier. DO NOT USE THIS IN PRODUCTION !!!");
14+
}
15+
16+
public async verify(credential: Credential): Promise<ClaimSet> {
17+
return {
18+
[credential.format]: credential.token
19+
}
20+
}
21+
}

packages/uma/src/credentials/verify/TypedVerifier.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ export class TypedVerifier implements Verifier {
2323
// Recursively verify in case of a meta credential token
2424
if (credential.format === this.metaType) {
2525
const metaClaims = {};
26-
for (const [ format, token ] of Object.entries(credential.token)) {
27-
Object.assign(metaClaims, await this.verify({ format, token }));
26+
const metaToken = JSON.parse(credential.token);
27+
for (const [ format, token ] of Object.entries(metaToken)) {
28+
Object.assign(metaClaims, await this.verify({ format, token: token as string }));
2829
}
30+
31+
this.logger.info(`Combined verified claims into ${JSON.stringify(metaClaims)}`);
32+
2933
return metaClaims;
3034
}
3135

packages/uma/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export * from './credentials/verify/TypedVerifier';
1010
export * from './credentials/verify/UnsecureVerifier';
1111
export * from './credentials/verify/SolidOidcVerifier';
1212
export * from './credentials/verify/JwtVerifier';
13+
export * from './credentials/verify/KeyValueVerifier';
1314

1415
// Dialog
1516
export * from './dialog/Input';

0 commit comments

Comments
 (0)