78 lines
1.5 KiB
JavaScript
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,
|
|
};
|