From b3586e460b89431565cc7ac6ea98ce46c514719e Mon Sep 17 00:00:00 2001 From: Spencer Ofwiti Date: Tue, 27 Apr 2021 14:20:18 +0300 Subject: [PATCH] Add validation for account info coming from and going into the meta service. --- package-lock.json | 65 ++++++++++++++++++++++++--- package.json | 1 + src/app/_helpers/index.ts | 1 + src/app/_helpers/schema-validation.ts | 22 +++++++++ src/app/_services/user.service.ts | 3 ++ 5 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 src/app/_helpers/schema-validation.ts diff --git a/package-lock.json b/package-lock.json index ebea1d4..93b4642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -619,6 +619,16 @@ "tslib": "^2.0.0" } }, + "@apidevtools/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "requires": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", @@ -2233,6 +2243,11 @@ "schema-utils": "^2.7.0" } }, + "@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" + }, "@ngtools/webpack": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz", @@ -4194,6 +4209,11 @@ "get-intrinsic": "^1.0.2" } }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -4770,6 +4790,33 @@ } } }, + "cic-schemas-data-validator": { + "version": "1.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/cic-schemas-data-validator/-/cic-schemas-data-validator-1.0.0-alpha.2.tgz", + "integrity": "sha512-CYOAuKUUEaVWmWZ1/WFhc1jsJGs35r57A1UPXZhq7nUUDACRR8LXPAqv5qNjZoA3P+f/9uBxXh/Ds9qnzZveKw==", + "requires": { + "@apidevtools/json-schema-ref-parser": "^9.0.7", + "ajv": "^8.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, "cids": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", @@ -8922,7 +8969,6 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9657,9 +9703,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "requires": { "figgy-pudding": "^3.5.1" } @@ -11649,9 +11695,9 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "requires": { "figgy-pudding": "^3.5.1" } @@ -13446,6 +13492,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", diff --git a/package.json b/package.json index a118aab..93d1277 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "chart.js": "^2.9.4", "cic-client": "0.1.4", "cic-client-meta": "0.0.7-alpha.6", + "cic-schemas-data-validator": "^1.0.0-alpha.2", "datatables.net": "^1.10.22", "datatables.net-dt": "^1.10.22", "ethers": "^5.0.31", diff --git a/src/app/_helpers/index.ts b/src/app/_helpers/index.ts index 384ff38..28fb61f 100644 --- a/src/app/_helpers/index.ts +++ b/src/app/_helpers/index.ts @@ -7,3 +7,4 @@ export * from '@app/_helpers/global-error-handler'; export * from '@app/_helpers/export-csv'; export * from '@app/_helpers/read-csv'; export * from '@app/_helpers/clipboard-copy'; +export * from '@app/_helpers/schema-validation'; diff --git a/src/app/_helpers/schema-validation.ts b/src/app/_helpers/schema-validation.ts new file mode 100644 index 0000000..d130398 --- /dev/null +++ b/src/app/_helpers/schema-validation.ts @@ -0,0 +1,22 @@ +import { validatePerson, validateVcard } from 'cic-schemas-data-validator'; + +async function personValidation(person: any): Promise { + const personValidationErrors = await validatePerson(person); + + if (personValidationErrors) { + personValidationErrors.map(error => console.log(`${error.message}`)); + } +} + +async function vcardValidation(vcard: any): Promise { + const vcardValidationErrors = await validateVcard(vcard); + + if (vcardValidationErrors) { + vcardValidationErrors.map(error => console.log(`${error.message}`)); + } +} + +export { + personValidation, + vcardValidation, +}; diff --git a/src/app/_services/user.service.ts b/src/app/_services/user.service.ts index 02dd4b3..f5248ea 100644 --- a/src/app/_services/user.service.ts +++ b/src/app/_services/user.service.ts @@ -12,6 +12,7 @@ import {MutableKeyStore, PGPSigner, Signer} from '@app/_pgp'; import {RegistryService} from '@app/_services/registry.service'; import {CICRegistry} from 'cic-client'; import {AuthService} from './auth.service'; +import {personValidation} from '@app/_helpers'; const vCard = require('vcard-parser'); @Injectable({ @@ -88,6 +89,7 @@ export class UserService { accountInfo.location.area_name = userLocation; accountInfo.location.area_type = locationType; accountInfo.vcard = btoa(vCard.generate(accountInfo.vcard)); + await personValidation(accountInfo); const accountKey = await User.toKey(address); this.getAccountDetailsFromMeta(accountKey).pipe(first()).subscribe(async res => { const syncableAccount: Syncable = Envelope.fromJSON(JSON.stringify(res)).unwrap(); @@ -183,6 +185,7 @@ export class UserService { const account = Envelope.fromJSON(JSON.stringify(res)).unwrap(); this.accountsMeta.push(account); const accountInfo = account.m.data; + await personValidation(accountInfo); accountInfo.balance = await this.tokenService.getTokenBalance(accountInfo.identities.evm['bloxberg:8996'][0]); accountInfo.vcard = vCard.parse(atob(accountInfo.vcard)); this.accounts.unshift(accountInfo);