Cantilever-Labs/controllers/auth.js

173 lines
4.5 KiB
JavaScript

const bcrypt = require("bcryptjs");
const User = require("../models/User");
const Student = require("../models/Student");
const jwt = require("jsonwebtoken");
const JWT_secret = "Cantileverlabs";
const messagebird = require("messagebird")("llVKD53ve6QRpbCKOHzWBADaS");
module.exports.Protected = async (req, res, next) => {
res.send("Hello User");
};
module.exports.postSignup = async (req, res, next) => {
try {
//we need firstName , lastName , email , password as input
let firstName = req.body.firstName || " ";
let lastName = req.body.lastName || " ";
let email = req.body.email;
let password = req.body.password;
let user = await User.findOne({ email: email });
if (user) {
res.json({
message: "User already exist",
type: "error",
});
} else {
const hashedPass = await bcrypt.hash(password, 12);
user = new User({
firstName: firstName,
lastName: lastName,
email: email,
password: hashedPass,
isAdmin: false,
});
user = await user.save();
await Student.deleteOne({ user: user._id });
let student = new Student({
user: user._id,
});
student = await student.save();
user.student = student._id;
await user.save();
res.json({
message: "Successfully signed Up",
type: "success",
});
}
} catch (err) {
console.log(err);
}
};
module.exports.postSignin = async (req, res, next) => {
try {
//we need email and password as input
let email = req.body.email;
let password = req.body.password;
let user = await User.findOne({ email: email });
if (user) {
const isMatched = await bcrypt.compare(password, user.password);
if (isMatched) {
const token = jwt.sign({ _id: user._id }, JWT_secret);
res.json({
token: token,
});
} else {
res.json({
message: "email and password doesn't match",
type: "error",
});
}
} else {
res.json({
message: "No user with this email exists",
type: "error",
});
}
} catch (err) {
console.log(err);
}
};
module.exports.sendOTP = (req, res, next) => {
//uNNYosMopvvCW9RTR1tRWJmYC test
//llVKD53ve6QRpbCKOHzWBADaS live
try {
const { phoneNumber } = req.body;
if (!phoneNumber) {
res.status(422).json({ message: "Please Add All Required Fields" });
return;
} else {
messagebird.verify.create(
phoneNumber,
module.exports.postSignin = async (req , res , next) => {
try
{
//we need email and password as input
let email = req.body.email ;
let password = req.body.password ;
let user = await User.findOne({email : email}) ;
if(user)
{
const isMatched = await bcrypt.compare(password , user.password) ;
if(isMatched)
{
const token = jwt.sign({_id:user._id},JWT_secret)
if(!user.numLoggedIn)
{
user.numLoggedIn = 0 ;
}
user.numLoggedIn = user.numLoggedIn + 1 ;
res.json(
{
token:token ,
isAdmin : user.isAdmin
}
)
await user.save() ;
}
else
{
res.json({
message:"email and password doesn't match" ,
type:"error"
})
}
}
else
{
template: "Your verification code is %token",
},
function (err, response) {
if (err) {
console.log(err);
res.status(422).json({ message: err.errors[0].description });
} else {
console.log(response);
res.json({ id: response.id });
}
}
);
}
} catch (err) {
console.log(err);
}
};
module.exports.getOTP = (req, res, next) => {
try {
const { id, token } = req.body;
messagebird.verify.verify(id, token, function (err, response) {
if (err) {
console.log({ error: err.errors[0].description, id: id });
res.json({ error: err.errors[0].description, id: id });
} else {
console.log(response);
res.json({ message: "Code Verified" });
}
});
} catch (err) {
console.log(err);
}
};
module.exports.checkProtected = (req, res, next) => {
console.log(req.user);
res.json({
message: "Protected",
user: req.user,
});
};