diff --git a/package-lock.json b/package-lock.json index 694f854..eedf5c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3438,6 +3438,12 @@ "readable-stream": "^2.0.6" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6144,6 +6150,12 @@ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "diff-sequences": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", @@ -14990,6 +15002,19 @@ } } }, + "ts-node": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz", + "integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "3.1.1" + } + }, "tsconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", @@ -16514,6 +16539,12 @@ "decamelize": "^1.2.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yorkie": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", diff --git a/package.json b/package.json index 6a01503..715f3a2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "serve": "vue-cli-service serve", "build": "vue-cli-service build", "test:unit": "vue-cli-service test:unit", - "lint": "vue-cli-service lint" + "lint": "vue-cli-service lint", + "build-couch-design": "ts-node src/scripts/validate-doc-update.ts" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.25", @@ -57,7 +58,8 @@ "node-sass": "^4.12.0", "sass-loader": "^7.3.1", "ts-jest": "^24.1.0", + "ts-node": "^8.6.2", "typescript": "~3.8.2", "vue-template-compiler": "^2.6.10" } -} +} \ No newline at end of file diff --git a/src/couch-design/validate-doc-update.ts b/src/couch-design/validate-doc-update.ts deleted file mode 100644 index 5af7ffa..0000000 --- a/src/couch-design/validate-doc-update.ts +++ /dev/null @@ -1,21 +0,0 @@ -import IAccount from '@/models/IAccount' -import ITransaction from '@/models/ITransaction' -import IExchange from '@/models/IExchange' - -type Doc = IAccount | ITransaction | IExchange - -interface IUserContext { - db: string - name: string | null - roles: string[] -} - -export default { - validate_doc_update(newDoc: Doc, oldDoc: Doc, userCtx: IUserContext) { - if (newDoc.doctype === 'account' && oldDoc.doctype === 'account') { - if (newDoc.userIds.indexOf(userCtx.name || '') < 0) { - throw { forbidden: 'You do not have rights to update this account' } - } - } - } -} diff --git a/src/scripts/validate-doc-update.ts b/src/scripts/validate-doc-update.ts new file mode 100644 index 0000000..d8b6fb0 --- /dev/null +++ b/src/scripts/validate-doc-update.ts @@ -0,0 +1,31 @@ +import IAccount from '@/models/IAccount' +import ITransaction from '@/models/ITransaction' +import IExchange from '@/models/IExchange' + +type Doc = IAccount | ITransaction | IExchange + +interface IUserContext { + db: string + name: string | null + roles: string[] +} + +// tslint:disable-next-line: variable-name only-arrow-functions +const validate_doc_update = function( + newDoc: Doc, + oldDoc: Doc, + userCtx: IUserContext +) { + if (!userCtx.name) { + throw { forbidden: 'You need to be logged in to update accounts' } + } + + if (newDoc.doctype === 'account' && oldDoc.doctype === 'account') { + if (true) { + throw { forbidden: 'You do not have rights to update this account' } + } + } +} + +// tslint:disable-next-line:no-console +console.info(validate_doc_update.toString().replace(/\n/g, ''))