diff --git a/package.json b/package.json index 34774d0..1c053d3 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,8 @@ "lodash.get": "^4.4.2", "lodash.merge": "^4.6.0", "lodash.set": "^4.3.2", - "node-fetch": "2.0.0-alpha.9" + "node-fetch": "2.0.0-alpha.9", + "syncano-validator": "^0.0.1" }, "devDependencies": { "babel-cli": "^6.26.0", diff --git a/src/server.js b/src/server.js index a9e48e7..9b1b30e 100644 --- a/src/server.js +++ b/src/server.js @@ -9,38 +9,49 @@ import Logger from './logger' import Channel from './channel' import Class from './class' import Settings from './settings' +import Validator from 'syncano-validator' const server = (ctx = {}) => { + ctx.args = ctx.args || {} + ctx.meta = ctx.meta || {} + ctx.meta.metadata = ctx.meta.metadata || {} + const settings = new Settings(ctx) const getConfig = className => Object.assign({className}, settings) const config = getConfig() - const _class = new Class(config) - const users = new Users(config) - const event = new Event(config) - const channel = new Channel(config) - const socket = new Socket(config) const response = new Response(config) - const account = new Account(config) - const instance = new Instance(config) - const logger = new Logger(config) + + if (ctx.meta.metadata.validate !== false) { + validateParameters(ctx, response) + } return { - _class, - users, - account, - instance, - event, - channel, - socket, + _class: new Class(config), + users: new Users(config), + event: new Event(config), + channel: new Channel(config), + socket: new Socket(config), response, - logger, + account: new Account(config), + instance: new Instance(config), + logger: new Logger(config), data: new Proxy(new Data(settings), { get(target, className) { return new Data(getConfig(className)) } }) } + + function validateParameters(ctx, response) { + const validator = new Validator(ctx) + + validator.validateRequest().catch(err => { + response.json({message: err}, 400) + + process.exit(0) + }) + } } export default server diff --git a/yarn.lock b/yarn.lock index 85648e8..5cc1050 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,6 +35,15 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -1588,6 +1597,14 @@ extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +faker@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -2325,6 +2342,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -3653,6 +3674,13 @@ symbol-observable@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +syncano-validator@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/syncano-validator/-/syncano-validator-0.0.1.tgz#0aa76508f81ce3a479868b31c7eecc91011355f9" + dependencies: + ajv "^5.2.3" + faker "^4.1.0" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"