/** * Controllers: Users */ const jwt = require(`jsonwebtoken`); const { users } = require(`../models`); const { comparePassword } = require(`../utils`); /** * Save * @param {*} req * @param {*} res * @param {*} next */ const register = async (req, res, next) => { try { await users.register(req.body); } catch (error) { return res.status(400).json({ error: error.message }); } let user; try { user = await users.getByEmail(req.body.email); } catch (error) { console.log(error); return next(error, null); } const token = jwt.sign( users.convertToPublicFormat(user), process.env.tokenSecret, { expiresIn: 604800, // 1 week } ); res.json({ message: `Authentication successful`, token, }); }; /** * Sign a user in * @param {*} req * @param {*} res * @param {*} next */ const login = async (req, res, next) => { let user; try { user = await users.getByEmail(req.body.email); } catch (error) { console.log(error); return next(error, null); } if (!user) { return res .status(404) .send({ error: `Authentication failed. User not found.` }); } const isCorrect = comparePassword(req.body.password, user.password); if (!isCorrect) { return res .status(401) .send({ error: `Authentication failed. Wrong password.` }); } const token = jwt.sign( users.convertToPublicFormat(user), process.env.tokenSecret, { expiresIn: 604800, // 1 week } ); res.json({ message: `Authentication successful`, token, }); }; /** * Get a user * @param {*} req * @param {*} res * @param {*} next */ const get = async (req, res) => { const user = users.convertToPublicFormat(req.user); res.json({ user }); }; module.exports = { register, login, get, };