Skip to content

Commit

Permalink
Merge pull request #79 from identity-com/bugfix/CCS-884_CC_isMatchCre…
Browse files Browse the repository at this point in the history
…dentialMeta_is_not_properly_matching_by_issuer

bugfix/CCS-884 isMatchCredentialMeta is not properly matching by issuer
  • Loading branch information
saviogrossi authored Feb 19, 2019
2 parents 40beb15 + 5131235 commit 682543e
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 11 deletions.
28 changes: 28 additions & 0 deletions __test__/creds/VerifiableCredential.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,34 @@ describe('Unit tests for Verifiable Credentials', () => {
expect(VC.isMatchCredentialMeta(vcMeta, constraints)).toBeTruthy();
});

it('Should not match credential on constraints.meta with wrong issuer', () => {
const vcMeta = {
id: '123456789',
identifier: 'credential-cvc:Email-v1',
issuer: 'did:ethr:0x00000',
issuanceDate: '2018-09-27T01:14:41.287Z',
expirationDate: '2028-09-26T11:22:21.287Z',
version: '1',
type: [
'Credential',
'credential-cvc:Email-v1',
],
};

const constraints = {
meta: {
credential: 'credential-cvc:Email-v1',
issuer: {
is: {
$eq: 'did:ethr:0xaf9482c84De4e2a961B98176C9f295F9b6008BfD',
},
},
},
};

expect(VC.isMatchCredentialMeta(vcMeta, constraints)).toBeFalsy();
});

it('Should match credential on constraints.meta with multiple fileds', () => {
const vcMeta = {
id: '123456789',
Expand Down
36 changes: 25 additions & 11 deletions src/creds/VerifiableCredential.js
Original file line number Diff line number Diff line change
Expand Up @@ -550,14 +550,28 @@ const getCredentialMeta = vc => _.pick(vc, CREDENTIAL_META_FIELDS);
* @param {*} constraintsMeta
*/
function transformMetaConstraint(constraintsMeta) {
const siftConstraint = {};
const resultConstraints = [];

// handle special field constraints.meta.credential
const constraintsMetaCredential = _.get(constraintsMeta, 'meta.credential');
if (constraintsMetaCredential) {
return { identifier: constraintsMetaCredential };
}
return siftConstraint;
// const constraintsMetaCredential = _.get(constraintsMeta, 'meta.credential');
// if (constraintsMetaCredential) {
// return { identifier: constraintsMetaCredential };
// }
const constraintsMetaKeys = _.keys(constraintsMeta.meta);
_.forEach(constraintsMetaKeys, (constraintKey) => {
const constraint = constraintsMeta.meta[constraintKey];
const siftConstraint = {};
// handle special field constraints.meta.credential
if (constraintKey === 'credential') {
siftConstraint.identifier = constraint;
} else if (constraint.is) {
siftConstraint[constraintKey] = constraint.is;
} else {
throw new Error(`Malformed meta contraint "${constraintKey}": missing the IS`);
}
resultConstraints.push(siftConstraint);
});
return resultConstraints;
}

/**
Expand All @@ -573,11 +587,11 @@ function transformMetaConstraint(constraintsMeta) {
* // }
*/
const isMatchCredentialMeta = (credentialMeta, constraintsMeta) => {
const metaConstraint = transformMetaConstraint(constraintsMeta);
let result = false;
if (!_.isEmpty(metaConstraint)) {
result = sift.indexOf(metaConstraint, [credentialMeta]) > -1;
}
const siftConstraints = transformMetaConstraint(constraintsMeta);
let result = !_.isEmpty(siftConstraints) && true;
_.forEach(siftConstraints, (constraint) => {
result = (sift.indexOf(constraint, [credentialMeta]) > -1) && result;
});
return result;
};

Expand Down

0 comments on commit 682543e

Please sign in to comment.