From 79d6b5cd23b67d165d63f78a1d060cf05e3dac02 Mon Sep 17 00:00:00 2001 From: Taha Date: Fri, 14 Oct 2022 22:35:37 +0330 Subject: [PATCH] add Joi validation for user register route --- api/package.json | 3 ++- api/route.js | 32 ++++++++++++++++++++++++-------- api/yarn.lock | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/api/package.json b/api/package.json index 680dd8bb..865f71e2 100644 --- a/api/package.json +++ b/api/package.json @@ -15,9 +15,10 @@ "body-parser": "^1.18.3", "cors": "^2.8.5", "express": "^4.16.4", + "joi": "^17.6.3", "mongoose": "^5.4.8" }, "devDependencies": { "nodemon": "^1.18.9" } -} \ No newline at end of file +} diff --git a/api/route.js b/api/route.js index 876b36ff..4ee24a5a 100644 --- a/api/route.js +++ b/api/route.js @@ -3,16 +3,32 @@ const registrationRoutes = express.Router(); const bcrypt = require('bcryptjs'); let Registration = require('./schema/User'); let RouteNames = require("./constants/constants"); +const Joi = require('joi') + +//Joi user request data validation +const Schema = Joi.object({ + first_name: Joi.string().required().min(1).max(30), + last_name: Joi.string().required().min(1).max(60), + user_name: Joi.string().required().alphanum().min(3).max(30), + password: Joi.string().required().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')), +}) + + //NOTE Registration route registrationRoutes.route(RouteNames.register).post(function(req, res) { - let register = new Registration(req.body); - register.save() - .then(reg => { - res.sendStatus(200); - }) - .catch(err => { - res.status(400).send("Failed to store to database"); - }); + const {error} = Schema.validate(req.body) + if (!error){ + let register = new Registration(req.body); + register.save() + .then(reg => { + res.sendStatus(200); + }) + .catch(err => { + res.status(400).send("Failed to store to database"); + }); + } + res.status(400).send(error.message) + }); // Login Router diff --git a/api/yarn.lock b/api/yarn.lock index 627d4681..cb0278e0 100644 --- a/api/yarn.lock +++ b/api/yarn.lock @@ -2,6 +2,35 @@ # yarn lockfile v1 +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -886,6 +915,17 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +joi@^17.6.3: + version "17.6.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.3.tgz#b8e9e143f0188884563e6de50f8b23ddcd3cb2f5" + integrity sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + kareem@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.0.tgz#ef33c42e9024dce511eeaf440cd684f3af1fc769"