Files
2021-09-24 20:24:39 -05:00

87 lines
1.7 KiB
JavaScript

/**
* Controllers: Users
*/
const jwt = require("jsonwebtoken");
const { users } = require("../models");
const { comparePassword } = require("../utils");
/**
* Save
* @param {*} req
* @param {*} res
* @param {*} next
*/
const register = async (req, res, next) => {
try {
await users.register(req.body);
} catch (error) {
return res.status(400).json({ error: error.message });
}
let user;
try {
user = await users.getByEmail(req.body.email);
} catch (error) {
console.log(error);
return next(error, null);
}
const token = jwt.sign(user, process.env.tokenSecret, {
expiresIn: 604800, // 1 week
});
res.json({ message: "Authentication successful", token });
};
/**
* Sign a user in
* @param {*} req
* @param {*} res
* @param {*} next
*/
const login = async (req, res, next) => {
let user;
try {
user = await users.getByEmail(req.body.email);
} catch (error) {
return done(error, null);
}
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(user, process.env.tokenSecret, {
expiresIn: 604800, // 1 week
});
res.json({ message: "Authentication successful", token });
};
/**
* Get a user
* @param {*} req
* @param {*} res
* @param {*} next
*/
const get = async (req, res, next) => {
const user = users.convertToPublicFormat(req.user);
res.json({ user });
};
module.exports = {
register,
login,
get,
};