/** * 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(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) { return done(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(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, next) => { const user = users.convertToPublicFormat(req.user) res.json({ user }) } module.exports = { register, login, get, }