121 lines
2.8 KiB
JavaScript
121 lines
2.8 KiB
JavaScript
const config = require("../config/auth.config");
|
||
const db = require("../models");
|
||
const User = db.user;
|
||
const Role = db.role;
|
||
|
||
var jwt = require("jsonwebtoken");
|
||
var bcrypt = require("bcryptjs");
|
||
|
||
exports.signup = (req, res) => {
|
||
const user = new User({
|
||
username: req.body.username,
|
||
email: req.body.email,
|
||
password: bcrypt.hashSync(req.body.password, 8),
|
||
active: false,
|
||
balance: 0,
|
||
walletid: null
|
||
});
|
||
|
||
user.save((err, user) => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
if (req.body.roles) {
|
||
Role.find(
|
||
{
|
||
name: { $in: req.body.roles }
|
||
},
|
||
(err, roles) => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
user.roles = roles.map(role => role._id);
|
||
user.save(err => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
res.send({ message: "l'utilisateur à été créé avec succès" });
|
||
});
|
||
}
|
||
);
|
||
} else {
|
||
Role.findOne({ name: "user" }, (err, role) => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
user.roles = [role._id];
|
||
user.save(err => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
res.send({ message: "l'utilisateur à été créé avec succès. vous pouvez maintenant vous identifiez" });
|
||
});
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
exports.signin = (req, res) => {
|
||
User.findOne({
|
||
username: req.body.username
|
||
})
|
||
.populate("roles", "-__v")
|
||
.exec((err, user) => {
|
||
if (err) {
|
||
res.status(500).send({ message: err });
|
||
return;
|
||
}
|
||
|
||
if (!user) {
|
||
return res.status(404).send({ message: "rip utilisateur introuvable" });
|
||
}
|
||
|
||
var passwordIsValid = bcrypt.compareSync(
|
||
req.body.password,
|
||
user.password
|
||
);
|
||
|
||
|
||
if (!passwordIsValid) {
|
||
return res.status(401).send({
|
||
accessToken: null,
|
||
message: "oof! mauvais mot de passe"
|
||
});
|
||
}
|
||
|
||
if (!user.active) {
|
||
return res.status(401).send({
|
||
accessToken: null,
|
||
message: "oof! ta pas activé ton compte my brother in christ"
|
||
});
|
||
}
|
||
|
||
var token = jwt.sign({ id: user.id, name: user.username }, config.secret, {
|
||
expiresIn: 86400 // 24 hours
|
||
});
|
||
|
||
var authorities = [];
|
||
|
||
for (let i = 0; i < user.roles.length; i++) {
|
||
authorities.push("ROLE_" + user.roles[i].name.toUpperCase());
|
||
}
|
||
res.status(200).send({
|
||
id: user._id,
|
||
username: user.username,
|
||
email: user.email,
|
||
roles: authorities,
|
||
accessToken: token,
|
||
message: "utilisateur authentifié"
|
||
});
|
||
});
|
||
}; |