Format and test fixes

This commit is contained in:
2020-11-18 21:17:29 -06:00
parent 95d7360ee4
commit 172e208edd
8 changed files with 55 additions and 27 deletions

View File

@@ -0,0 +1,86 @@
/**
* Controllers: Users
*/
const jwt = require(`jsonwebtoken`);
const users = require(`../../models/users`);
const { comparePassword } = require(`../../utils`);
const validation = require(`../../validation`);
const schemas = require(`./schemas`);
/**
* 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) => {
validation.validateOrThrow(schemas.login, res.body);
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,
};