Files
forgetmenot-django/api/controllers/users/index.js

78 lines
1.5 KiB
JavaScript

/**
* 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,
};