From d11271d75a3d59aa5b1cda8fdaad87013d64891a Mon Sep 17 00:00:00 2001 From: Denyse <73523419+dmutoni@users.noreply.github.com> Date: Tue, 27 Jul 2021 12:05:39 +0200 Subject: [PATCH] added victim login features --- config/config.env | 2 +- controllers/users.controller.js | 39 ------- controllers/victims.controller.js | 43 ++++--- routes/victims.js | 188 +----------------------------- utils/functions/functions.js | 4 +- utils/tokens/generateToken.js | 5 +- 6 files changed, 39 insertions(+), 242 deletions(-) diff --git a/config/config.env b/config/config.env index e77941a..a2ffd7b 100644 --- a/config/config.env +++ b/config/config.env @@ -1,5 +1,5 @@ NODE_ENV=development PORT=6000 -TOKEN_SECRET = $%secret()0*!RDFDShusr +TOKEN_SECRET = $%secret()0*!RDFDShusrfa%@9da(*$#) PASSWORD = maniraguha EMAIL = mutoni2222@gmail.com \ No newline at end of file diff --git a/controllers/users.controller.js b/controllers/users.controller.js index 32c6077..4bcabdb 100644 --- a/controllers/users.controller.js +++ b/controllers/users.controller.js @@ -97,7 +97,6 @@ module.exports.createUser = asyncHandler(async (req, res) => { res.status(422).send(validation.errors); } else if (matched) { const hashedPassword = await hashPassword(req.body.password); - console.log("password ", hashedPassword) let inserts = [ uuidv4(), req.body.first_name, @@ -119,14 +118,11 @@ module.exports.createUser = asyncHandler(async (req, res) => { res.status(401).send({error: err.sqlMessage}) // throw err; } else { - console.log(results) - // results.send("row inserted"); return res.status(201).send({ error: false, data: results, message: 'New user has been created successfully.' }); - // console.log("Row inserted: "+ results.affectedRows); } }); } @@ -134,7 +130,6 @@ module.exports.createUser = asyncHandler(async (req, res) => { }) }) module.exports.getTotalUsers = asyncHandler(async (req, res) => { - console.log("reached"); try { await dbConnection.query("SELECT COUNT(*) AS totalUsers FROM dms_users", (err, rows, fields) => { if (!err) { @@ -144,7 +139,6 @@ module.exports.getTotalUsers = asyncHandler(async (req, res) => { } }) } catch (error) { - console.log(error); return res.status(500).send({error: "internal server error"}) } }) @@ -161,7 +155,6 @@ module.exports.getUsersBySector = asyncHandler(async (req, res) => { res.send({status: false, data: err}) } }) - // console.log(report_id) }) module.exports.getTotalUsersByDistrictID = asyncHandler(async (req, res) => { @@ -202,11 +195,9 @@ module.exports.getUsersByDistrict = asyncHandler(async (req, res) => { res.send({status: false, data: err}) } }) - // console.log(report_id) }) module.exports.updateUser = asyncHandler(async (req, res) => { let user_id = req.params['id']; - console.log(user_id) user_id.trim(); // let ii_id = req.params.iid; @@ -225,7 +216,6 @@ module.exports.updateUser = asyncHandler(async (req, res) => { if (!matched) { res.status(422).send(validation.errors); } else if (matched) { - // console.log(user); let inserts = { first_name: req.body.first_name, last_name: req.body.last_name, @@ -238,7 +228,6 @@ module.exports.updateUser = asyncHandler(async (req, res) => { user_type: req.body.user_type, user_status: req.body.user_status } - console.log(inserts); if (!user_id || !inserts) { return res.status(400).send({error: user, message: 'Please provide user and user id'}); } @@ -257,12 +246,9 @@ module.exports.updateUser = asyncHandler(async (req, res) => { } }) - // return res.status( 201 ).send( {error: false, data: inserts, user_id , message: 'user has been updated successfully.'} ); - // console.log("Row inserted: "+ results.affectedRows); } ; }) - console.log(printQuery); } }); }); @@ -275,10 +261,7 @@ module.exports.deleteUser = asyncHandler(async (req, res) => { await dbConnection.query("UPDATE dms_users SET user_status = ? WHERE user_id = ?", [status, user_id], function (error, results, fields) { if (error) throw error; else { - console.log(results) - // results.send("row inserted"); return res.status(201).send({error: false, data: results, message: 'user has been delete successfully.'}); - // console.l } }); }) @@ -296,8 +279,6 @@ const readFiles = (req, res) => { } module.exports.createUSerSignature = async (req, res) => { - console.log("something") - console.log(req.body.signatures) if (!req.params) { return res.status(400).send({success: false, data: "no provided id"}) } @@ -313,14 +294,11 @@ module.exports.createUSerSignature = async (req, res) => { let inserts = { user_signature: req.file.filename } - // console.log() await dbConnection.query("UPDATE dms_users SET ? where user_id = ?", [inserts, user_id], function (error, results, fields) { if (error) { - // deleteFile() res.status(401).send({error: error.sqlMessage}) throw err; } else { - console.log(results); return res.status(201).send({error: false, data: inserts, message: 'user has been updated successfully.'}); } ; @@ -332,16 +310,9 @@ let userWithSameCategory = []; const updateNationalUsers = (req, res) => { dbConnection.query("UPDATE dms_users SET ? where user_type = 'NATIONAL' ", [readFiles(req, res)], function (error, results, fields) { if (error) { - // fs.unlink('images' + req.file.filename, () => { - // return res.status(404).send({ message: "error occurred" }) - // }) deleteFile(req.file.filename) return res.status(500).send({success: false, message: "error occurred"}); - // res.status(401).send({ error: error.sqlMessage }) - throw error; } else { - console.log("files ", readFiles(req, res)); - return res.status(201).send({ error: false, data: readFiles(req, res), @@ -357,16 +328,8 @@ const updateUsersWithTheSameId = (req, res, index) => { dbConnection.query("UPDATE dms_users SET ? where user_id = ? ", [readFiles(req, res), index], function (error, results, fields) { if (error) { - // fs.unlink('images' + req.file.filename, () => { - // return res.status(404).send({ message: "error occurred" }) - // }) deleteFile(req.file.filename) - // return res.status(500).send({message: "error occurred"}); - // res.status(401).send({ error: error.sqlMessage }) throw error; - } else { - console.log(results); - // return res.status(201).send({ error: false, data: results, message: 'user has been updated successfully.' }); } ; }) @@ -431,8 +394,6 @@ module.exports.createLevelSignature = async (req, res) => { } } exports.login = async (req, res) => { - // let user_id = req.params['id']; - // user_id.trim(); console.log(req.body) dbConnection.query("SELECT * FROM dms_users JOIN dms_sectors ON (dms_sectors.sector_id = dms_users.sector_id) JOIN dms_districts ON (dms_districts.district_id = dms_sectors.district_id) JOIN dms_provinces ON (dms_provinces.province_id=dms_districts.province_id) WHERE email = ?", [req.body.email], async (err, rowsFound, fields) => { diff --git a/controllers/victims.controller.js b/controllers/victims.controller.js index 3649328..a60534a 100644 --- a/controllers/victims.controller.js +++ b/controllers/victims.controller.js @@ -1,10 +1,13 @@ const app = require('express'); const asyncHandler = require('../middleware/async'); -const {v4: uuidv4} = require('uuid'); +const { v4: uuidv4 } = require('uuid'); const Router = app.Router(); const dbConnection = require('../config/db.config'); -const {Validator} = require('node-input-validator'); +const { Validator } = require('node-input-validator'); +const { generateVictimPin } = require('../utils/functions/functions'); +const {generateAuthToken} = require('../utils/tokens/generateToken') + // let payloadChecker = require('payload-validator'); // Router.get("/getAllVictims", (req, res) => { @@ -20,7 +23,7 @@ const {Validator} = require('node-input-validator'); module.exports.getVictims = asyncHandler(async (req, res) => { await dbConnection.query("SELECT * FROM dms_victims", (err, rows, fields) => { if (!err) { - res.status(200).json({success: true, data: rows}); + res.status(200).json({ success: true, data: rows }); } else { console.log(err); } @@ -34,9 +37,9 @@ module.exports.getVictimById = asyncHandler(async (req, res) => { dbConnection.query("SELECT * FROM dms_victims WHERE victim_id = ?", [victim_id], function (err, rowsFound, fields) { if (!err) { - return res.send({success: true, data: rowsFound}); + return res.send({ success: true, data: rowsFound }); } else { - return res.send({success: false, data: err}) + return res.send({ success: false, data: err }) } }) }) @@ -62,10 +65,9 @@ module.exports.createVictim = asyncHandler(async (req, res) => { validation.check().then(async (matched) => { if (!matched) { - res.status(422).send({success: false, data: validation.errors}); + res.status(422).send({ success: false, data: validation.errors }); } else if (matched) { - let victim_pin = req.body.village_id - + let victim_pin = generateVictimPin(); let inserts = [ uuidv4(), victim_pin, @@ -82,11 +84,10 @@ module.exports.createVictim = asyncHandler(async (req, res) => { req.body.isibo, req.body.village_id ] - console.log("reaching"); let sql = "INSERT INTO dms_victims(victim_id,victim_pin, first_name, last_name, gender, marital_status,family_members, primary_phone_number, secondary_phone_number, national_id, is_employed, ikiciro_ubudehe, isibo, village_id) VALUES (?);"; await dbConnection.query(sql, [inserts], (err, results, fields) => { if (err) { - res.status(401).send({error: err.sqlMessage}) + res.status(401).send({ error: err.sqlMessage }) // throw err; } else { let returnValues = { @@ -118,6 +119,20 @@ module.exports.createVictim = asyncHandler(async (req, res) => { }) }) +module.exports.loginVictim = async (req, res) => { + dbConnection.query("SELECT * FROM dms_victims WHERE victim_pin = ? AND primary_phone_number = ?", + [req.body.victim_pin, req.body.primary_phone_number], async (err, rowsFound, fields) => { + if (!err) { + + if (!rowsFound.length > 0) return res.status(400).send({success: false, data: "invalid credentials "}); + const userId = rowsFound[0].user_id; + const userUniqueness = rowsFound[0].primary_phone_number + return res.status(201).send({success: true, token: generateAuthToken(userId,userUniqueness )}) + } else { + return res.send({success: false, data: err}) + } + }) +} module.exports.updateVictim = asyncHandler(async (req, res) => { let victim_id = req.params['id']; victim_id.trim(); @@ -159,11 +174,11 @@ module.exports.updateVictim = asyncHandler(async (req, res) => { console.log(inserts); if (!victim_id || !inserts) { - return res.status(400).send({error: victim, message: 'Please provide victim and victim id'}); + return res.status(400).send({ error: victim, message: 'Please provide victim and victim id' }); } await dbConnection.query("UPDATE dms_victims SET ? WHERE victim_id = ?", [inserts, victim_id], function (error, results, fields) { if (error) throw error; - return res.send({error: false, data: results, message: 'victim has been updated successfully.'}); + return res.send({ error: false, data: results, message: 'victim has been updated successfully.' }); }) } }); @@ -172,11 +187,11 @@ module.exports.deleteVictim = asyncHandler(async (req, res) => { let victim_id = req.params['id']; victim_id.trim(); if (!victim_id) { - return res.status(400).send({error: true, message: 'Please provide a user id'}); + return res.status(400).send({ error: true, message: 'Please provide a user id' }); } await dbConnection.query('DELETE FROM dms_victims WHERE victim_id = ?', [victim_id], function (error, results, fields) { if (error) throw error; - return res.send({error: false, data: results, message: 'victim has been delete successfully.'}); + return res.send({ error: false, data: results, message: 'victim has been delete successfully.' }); }); }) diff --git a/routes/victims.js b/routes/victims.js index d1c12cf..0ff3113 100644 --- a/routes/victims.js +++ b/routes/victims.js @@ -4,204 +4,24 @@ const { createVictim, updateVictim, deleteVictim, + loginVictim, getVictimById, getVictim } = require('../controllers/victims.controller') // const { route } = require('./VictimTypes') const { protect,authorize } = require('../middleware/auth') - /** - * @swagger - * definitions: - * victims: - * required: - * - first_name - * - last_name - * - gender - * - age - * - marital_status - * - last_name - * - family_members - * - primary_phone_number - * - national_id - * - is_employed - * - ikiciro_ubudehe - * - isibo - * - village_id - * properties: - * victim_pin: - * type: string - * first_name: - * type: string - * last_name: - * type: string - * gender: - * type: string - * enum: [FEMALE,MALE] - * age: - * type: number - * marital_status: - * type: string - * enum: [SINGLE,MARRIED,DIVORCED] - * default: SINGLE - * family_members: - * type: number - * primary_phone_number: - * type: string - * secondary_phone_number: - * type: string - * national_id: - * type: number - * is_employed: - * type: boolean - * ikiciro_ubudehe: - * type: string - * isibo: - * type: string - * village_id: - * type: string - * done_on: - * type: string - */ - const router = express.Router({ mergeParams: true }) -/** - * @swagger - * /api/v1/victims: - * get: - * tags: - * - victims - * description: Get all victims - * responses: - * 200: - * description: OK - * 404: - * description: Not found - * 500: - * description: Internal Server error - */ router.route('/').get(getVictims) -/** - * @swagger - * /api/v1/victims: - * post: - * tags: - * - victims - * description: Create a victim - * consumes: - * - "application/json" - * - "application/xml" - * produces: - * - "application/xml" - * - "application/json" - * parameters: - * - name: body - * description: Fields for a victim - * in: body - * required: true - * schema: - * $ref: '#/definitions/victims' - * responses: - * 201: - * description: created - * 404: - * description: Not found - * 500: - * description: Internal Server error - */ + router.route('/').post(createVictim) -/** - * @swagger - * /api/v1/victims/{victim_id}: - * put: - * tags: - * - victims - * description: Update a victim - * consumes: - * - "application/json" - * - "application/xml" - * produces: - * - "application/xml" - * - "application/json" - * parameters: - * - name: victim_id - * in: path - * required: true - * - name: body - * description: Fields for a victim - * in: body - * required: true - * schema: - * $ref: '#/definitions/victims' - * responses: - * 201: - * description: updated - * 404: - * description: Not found - * 500: - * description: Internal Server error - */ + +router.route('/login').post(loginVictim) router.route('/:id').put(updateVictim) -/** - * @swagger - * /api/v1/victims/{victim_id}: - * delete: - * tags: - * - victims - * description: Update a victim - * consumes: - * - "application/json" - * - "application/xml" - * produces: - * - "application/xml" - * - "application/json" - * parameters: - * - name: "victim_id" - * in: path - * required: true - * schema: - * $ref: '#/definitions/victims' - * responses: - * 201: - * description: deleted - * 404: - * description: Not found - * 500: - * description: Internal Server error - */ router.route('/:id').delete(deleteVictim) - router.route('/getVictimById:id').get(getVictimById) -/** - * @swagger - * /api/v1/reports/getVictimById/{victim_id}: - * get: - * tags: - * - victims - * description: get victim by id - * consumes: - * - "application/json" - * - "application/xml" - * produces: - * - "application/xml" - * - "application/json" - * parameters: - * - name: "victim_id" - * in: path - * required: true - * schema: - * $ref: '#/definitions/victims' - * responses: - * 201: - * description: deleted - * 404: - * description: Not found - * 500: - * description: Internal Server error - */ - module.exports = router diff --git a/utils/functions/functions.js b/utils/functions/functions.js index ad6cf38..9a839e4 100644 --- a/utils/functions/functions.js +++ b/utils/functions/functions.js @@ -4,7 +4,9 @@ exports.validObjectId = (id) => { return ((ObjectId.isValid(id))); }; - +exports.generateVictimPin = () => { + return Math.floor(100000 + Math.random() * 900000); +} /** * GET API RESPONSE diff --git a/utils/tokens/generateToken.js b/utils/tokens/generateToken.js index 4297fdd..9d891cd 100644 --- a/utils/tokens/generateToken.js +++ b/utils/tokens/generateToken.js @@ -1,6 +1,5 @@ const jwt = require('jsonwebtoken'); -exports.generateAuthToken = function (user_id) { - console.log(process.env.TOKEN_SECRET) - return jwt.sign({id: user_id}, process.env.TOKEN_SECRET,{expiresIn: '1h'}) +exports.generateAuthToken = function (user_id, userUniqueness) { + return jwt.sign({id: user_id, userUniqueness: userUniqueness}, process.env.TOKEN_SECRET,{expiresIn: '1h'}) } \ No newline at end of file