/** * Controllers: Users */ const jwt = require(`jsonwebtoken`); const users = require(`../models/users`); const { comparePassword } = require(`../utils`); /** * Save * @param {*} req * @param {*} res */ const register = async (req, res) => { await users.create(req.body); let user = await users.getByEmail(req.body.email); 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 */ const login = async (req, res) => { let user = await users.getByEmail(req.body.email); 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 */ const get = async (req, res) => { const user = users.convertToPublicFormat(req.user); res.json({ user }); }; module.exports = { register, login, get, };