/** * Controllers: Users */ const schemas = require(`./schemas`); const base = require(`../base`); const userUtils = require(`./utils`); /** * Save * @param {*} req * @param {*} res */ const register = async (req, res) => { const config = { validationSchema: schemas.create, getObjectKey: () => req.body.email, buildDbObject: () => { return { hk: req.body.email, password: userUtils.hashPassword(req.body.password) }; }, dbKind: `user`, buildResponseBody: createdUser => { return { message: `Authentication successful`, token: userUtils.getToken(createdUser), }; } }; await base.createAction(req, res, config); }; /** * Sign a user in * @param {*} req * @param {*} res */ const login = async (req, res) => { const config = { validationSchema: schemas.login, getObjectKey: () => req.body.email, notFoundMessage: `Authentication failed. User not found.`, buildResponseBody: user => { const isCorrect = userUtils.comparePassword(req.body.password, user.password); if (!isCorrect) { return res .status(401) .send({ error: `Authentication failed. Wrong password.` }); } return { message: `Authentication successful`, token: userUtils.getToken(user), }; } }; await base.getByKeyAction(req, res, config); }; /** * Get a user * @param {*} req * @param {*} res */ const get = async (req, res) => { const user = userUtils.convertToPublicFormat(req.user); res.json({ user }); }; module.exports = { register, login, get, };