From fbae2037b50b27f27828bb2e91a7fcb5b2570804 Mon Sep 17 00:00:00 2001 From: Francesco Esposito <33671357+frsposito@users.noreply.github.com> Date: Tue, 6 Aug 2019 18:43:17 +0200 Subject: [PATCH] add controller: user --- src/controllers/user.js | 81 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/controllers/user.js diff --git a/src/controllers/user.js b/src/controllers/user.js new file mode 100644 index 0000000..6d9f697 --- /dev/null +++ b/src/controllers/user.js @@ -0,0 +1,81 @@ + +import bcrypt from 'bcrypt'; +import jwt from 'jsonwebtoken'; + +import userModel from '../models/user'; + + +export const authenticate = (req, res, next) => { + const { email, password } = req.body; + + if (!email || !password) { + res.status(400).json({ + success: false, + message: 'Parameters invalid', + }); + return; + } + + userModel.findOne({ email }, (err, user) => { + if (err) { + next(err); + } + + if (user) { + if (bcrypt.compareSync(password, user.password || 0)) { + const token = jwt.sign({ email }, req.app.get('secretKey'), { + expiresIn: '1h', + }); + + res.json({ + success: true, + message: 'Auth OK', + data: { + name: user.name, + token, + }, + }); + } else { + res.status(401).json({ + success: false, + message: 'Invalid email/password', + }); + } + } else { + res.status(401).json({ + success: false, + message: 'Invalid email/password', + }); + } + }); +}; + + +export const changePassword = (req, res, next) => { + const { newPassword } = req.body; + + if (!newPassword) { + res.status(400).json({ + success: false, + message: 'Parameters invalid', + }); + return; + } + + const encryptedPassword = bcrypt.hashSync(newPassword, 10); + + const pass = { + password: encryptedPassword, + }; + + userModel.findOneAndUpdate({}, pass, { new: true }, (err, user) => { + if (err) { + next(err); + } + + res.json({ + status: 'success', + message: 'Password updated', + }); + }); +};