Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ env.config();
const portNo = process.env.PORT_NO
const secretKey = process.env.SECRET_KEY
const db_url = process.env.DB_URL
const JWT_EXPIRES_IN = process.env.JWT_EXPIRY



module.exports = {
portNo,
secretKey,
db_url
db_url,
JWT_EXPIRES_IN
}
147 changes: 78 additions & 69 deletions controllers/userController.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,90 +2,99 @@ const config = require("../config/config");
const users = require("../model/userModel");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const {updateuser1,getdata,matchpass,modifyPass,verifyemail,userlogin,usersignup,user_list} = require("../services/userservices")

exports.register_user = async (req, res) => {
let user = new users({
username: req.body.username,
firstname: req.body.firstname,
lastname: req.body.lastname,
email: req.body.email,
password: req.body.password,
mobile: req.body.mobile,
address: req.body.address,
});
const user_data = await user.save();
return res.status(200).send({ success: true, data: user_data });
exports.signup = async (req, res) => {
const data = await usersignup(req.body)
if(data){
res.status(201).send({ success: true, msg:"User registered successfully", data: data });
}
};

exports.login_user = async (req, res) => {
const userData = await users.findOne({ email: req.body.email });
const pass = bcrypt.compare(userData.password, req.body.password);
const token = jwt.sign(
{ email: userData.email, id: userData._id },
config.secretKey
);

if (userData && pass) {
res.status(200).send(token);
} else {
const loggedin = await userlogin(req.body)
if (!loggedin) {
return res.status(401).send({ success: false, msg: "Email or Password is wrong" });
} else {
res.status(200).send(loggedin);
}
};

exports.changePass = async (req, res) => {
const { password, new_password } = req.body;
if (password && new_password) {
if (password !== new_password) {
res.send({ status: "failed", message: "password dose not match" });
} else {
await users.updateOne(req.data.email, {
password: password,
});
res.send({
status: "true",
message: "password reset successfully",
});
}
} else {
req.send({ status: "failed", message: "All fields are required" });
const validpass = await matchpass(req.body)
if(!validpass){
return res.status(401).send({success: "failed", message: "password doesn't match" });
}try {
modifyPass(req.data.email,req.body);
res.status(201).send({success: "true", message: "password changed" });
} catch (error) {
res.status(401).send({success: "false", message: "password is not changed" });
}
};
exports.forgetPass = async (req, res) => {
const { password, new_password, email } = req.body;
const userData = await users.findOne({ email: email });
if (userData) {
if (password && new_password) {
if (password !== new_password) {
res.send({ status: "failed", message: "password dose not match" });
} else {

await users.updateOne(
{ email },
{
password: password,
}
);
res.send({ status: "true", message: "password updated" });
}
} else {
req.send({ status: "failed", message: "All fields are required" });
}
} else {
res.send("account dosen't exist");
exports.verifyuser = async(req,res) => {
const validuser = await verifyemail(req.body)
if(!validuser){
res.status(401).send({success: "false", message: "user doesn't exist" });
}else{
res.status(201).send({success: "true", message: "user exist" });
}
};

exports.forgetPass = async (req, res) => {
const validpass = await matchpass(req.body)
if(!validpass){
return res.status(401).send({success: "failed", message: "password doesn't match" });
}try {
modifyPass(req.data.email,req.body);
res.status(201).send({success: "true", message: "password updated" });
} catch (error) {
res.status(401).send({success: "false", message: "password is not updated" });
}
};

exports.updateuser = async (req, res) => {
const { username, firstname, lastname, password, mobile, uemail, address } = req.body;
try {
await updateuser1(req.data.email , req.body);
res.status(201).send({success: "true", message: "user updated successfully" });
} catch (error) {
res.status(402).send({success: "false", message: "user not updated" });
}
};

//get user data with the help of token (without body)

exports.getuser = async (req, res) => {
try {
const userData = await getdata(req.data.email);
res.send(userData)
} catch (error) {
console.log(error)
res.status(402).send(error);
}
};

await users.updateOne(req.data.email, {
username: username,
firstname: firstname,
lastname: lastname,
password: password,
mobile: mobile,
email: uemail,
address: address,
});
res.send({ status: "true", message: "user updated successfully" });
//get user data with the help of token (without email)

exports.deluser = async (req, res) => {
try {
await deleteuser(req.data.email);
res.status(201).send({success: "true", message: "user deleted" });
} catch (error) {
console.log(error)
res.status(402).send(error);
}
};

// get user in the form of list (page wise)

exports.userlist = async (req, res) => {
try{
const data = await user_list(req.params.page)
if(data){
res.status(201).send({success: "true", message: data });
}
}catch(error){
res.status(401).send({success: "false", message: "userdata not found" ,error});
}
};
19 changes: 9 additions & 10 deletions middleware/mid_register.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,15 @@ exports.checkAuth = async (req, res, next) => {
if (typeof bearerHeader !== "undefined") {
const bearer = bearerHeader.split(" ");
const token = bearer[1];
const {email}=jwt.verify(token, config.secretKey, async (err, authData) => {
if (err) {
res.send({ result: "invalid token" });
}
});
req.data= {email, token}
next();
const {email}=jwt.verify(token, config.secretKey);
if(email){
req.data= {email, token}
next();
}else{
res.status(403).send({"success":"false", msg:"email not found in token"})
}

} else {
res.send({
result: "Token is not valid",
});
res.status(401).send({"success":"false", msg:"email not found in token"})
}
};
9 changes: 9 additions & 0 deletions model/userToken.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const mongoose = require("mongoose");
const user = mongoose.Schema({
token:{
type:String,
required:true
},
});

module.exports = mongoose.model("usertoken",user)
11 changes: 9 additions & 2 deletions routes/register.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,18 @@ const userController = require("../controllers/userController")
// Route level middleware
router.use('/changePassword',mid_register.checkAuth)
router.use('/updateuser',mid_register.checkAuth)
router.use('/get',mid_register.checkAuth)
router.use('/delete',mid_register.checkAuth)
router.use('/verify-reset-password',mid_register.checkAuth)

router.get("/register",mid_register.REG_MIDDLE,userController.register_user);
router.get("/register",mid_register.REG_MIDDLE,userController.signup);
router.get("/get",userController.getuser);
router.get("/list/:page",userController.userlist);
router.post("/auth/signin",userController.login_user);
router.put("/changePassword",userController.changePass);
router.put("/forgetpassword",userController.forgetPass);
router.put("/verify-reset-password",userController.forgetPass);
router.put("/updateuser",userController.updateuser);
router.put("/delete",userController.deluser);
router.post("/forgot-password",userController.verifyuser);

module.exports=router;
104 changes: 104 additions & 0 deletions services/userservices.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
const config = require("../config/config");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const users = require("../model/userModel");
const userToken = require("../model/userToken");

const getdata= async ({email})=>{
return await users.findOne(email);
}

const deleteuser = async ()=>{
const data = await users.findOneAndDelete(req.data.email);
if (data) {
res.status(200).send({success: "true", message: "User deleted" });
}
}

const updateuser1 = async (data, body_data)=>{
await users.updateOne(data.email, body_data);
}

const matchpass = async (data) => {
return data.password===data.new_password
}

const verifyemail = async (data) =>{
const emailexist = await users.findOne({ email: data.email });

if(emailexist){
const token = jwt.sign(
{ email: emailexist.email, id: emailexist._id },
config.secretKey,
{expiresIn:config.JWT_EXPIRES_IN}
);
let user = new userToken({
token: token
});
await user.save();
console.log("token saved");
return true
}else{
return false
}
}

const modifyPass = async(email,data) =>{
await users.updateOne(
{ email },
{
password: data.password,
}
);
}

const userlogin = async(data) =>{
const userData = await users.findOne({ email: data.email });
const pass = (userData.password === data.password)

if(pass && userData){
const token = jwt.sign(
{ email: userData.email, id: userData._id },
config.secretKey
);
return token;
}else{
return false
}
}

const usersignup = async(data) =>{
let user = new users({
username: data.username,
firstname: data.firstname,
lastname: data.lastname,
email: data.email,
password: data.password,
mobile: data.mobile,
address: data.address,
});
if(user){
return await user.save();
}else{
return false;
}
};

const user_list = async (page)=>{
firstindex = (page - 1)*10;
lastindex = page *10;
const data= await users.find();
const sliced_data = data.slice(firstindex, lastindex);
return sliced_data;
}
module.exports={
getdata,
deleteuser,
updateuser1,
modifyPass,
matchpass,
verifyemail,
user_list,
userlogin,
usersignup
}