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
16 changes: 14 additions & 2 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
import express from "express";
import service from "./config/constant.js";
import express from "express"
import service from "./config/constant.js"
import cookieparser from "cookie-parser"
import {router} from"./routes/userRoute.js"
import {redisconnect} from"./config/redisconfig.js"
import {dbConnection} from "./config/dbconnect.js"

const app = express();

app.use(express.json())
app.use(cookieparser())
app.use("/user", router)

dbConnection();
redisconnect();

app.listen(service.PORT, () => {
console.log("server is running");
});
25 changes: 1 addition & 24 deletions config/constant.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,16 @@ export default {
FPASS_EXPIRESIN: process.env.FPASS_EXPIRY,
API_KEY: process.env.APIKEY,
EMAIL_FROM: process.env.emailFrom,
EMAIL_TO: process.env.emailTo,
URL: process.env.url,
URL1: process.env.url1,
snapURL: process.env.snapurl,
EMAIL_PASS: process.env.pass,
DB: process.env.database,
USERNAME: process.env.username,
PASS: process.env.password,
CLIENT_ID: process.env.CLIENT_ID,
CLIENT_SECERET: process.env.CLIENT_SECERET,
REDIRECT_URI: process.env.REDIRECT_URI,
REFRESH_TOKEN: process.env.REFRESH_TOKEN,
USER: process.env.USER,
};
//export const port : pr

ACCESS_TOKEN_SECRET: process.env.ACCESS_TOKEN_SECRET;
REFRESH_TOKEN_SECRET: process.env.REFRESH_TOKEN_SECRET;
db_url: process.env.DB_URL;
ACCESS_TOKEN_EXPIRES: process.env.JWT_EXPIRY;
FPASS_EXPIRESIN: process.env.FPASS_EXPIRY;
API_KEY: process.env.APIKEY;
EMAIL_FROM: process.env.emailFrom;
EMAIL_TO: process.env.emailTo;
URL: process.env.url;
URL1: process.env.url1;
snapURL: process.env.snapurl;
EMAIL_PASS: process.env.pass;
DB: process.env.database;
USERNAME: process.env.username;
PASS: process.env.password;
CLIENT_ID: process.env.CLIENT_ID;
CLIENT_SECERET: process.env.CLIENT_SECERET;
REDIRECT_URI: process.env.REDIRECT_URI;
REFRESH_TOKEN: process.env.REFRESH_TOKEN;
USER: process.env.USER;
//export const port : pr
27 changes: 27 additions & 0 deletions config/dbconnect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import mysql from 'mysql2';
import config from './constant.js'

export const con = mysql.createConnection({
host: "localhost",
user: "root",
database:config.DB,
password: config.PASS
});

export const dbConnection = async()=>{
try {
await con.connect()
const userTable = `CREATE TABLE IF NOT EXISTS users (
username VARCHAR(255),
firstname VARCHAR(255),
lastname VARCHAR(255),
email VARCHAR(255),
mobile VARCHAR(255),
password VARCHAR(255)
)`
con.query(userTable);
console.log("db connected")
} catch (error) {
console.log(error);
}
}
12 changes: 12 additions & 0 deletions config/redisconfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { createClient } from 'redis';

export const client = createClient();

export const redisconnect = async () =>{
try {
await client.connect();
console.log("redis connected");
} catch (error) {
console.log(error);
}
}
177 changes: 177 additions & 0 deletions controllers/userController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
import * as userServices from "../services/userservices.js"

export const signup = async (req, res) => {
const data = await userServices.usersignup(req.body)
if(data){
res.status(201).send({ success: true, msg:"User registered successfully", data: data });
}
};

export const signin = async (req, res) => {
const loggedin = await userServices.userlogin(req.body)
if (!loggedin) {
return res.status(401).send({ success: false, msg: "Email or Password is wrong" });
} else {
// Assigning refresh token in http-only cookie
res.cookie('refresh_token', loggedin.refreshToken, { httpOnly: true,
sameSite: 'None', secure: true,
maxAge: 24 * 60 * 60 * 1000
});
res.status(200).send(loggedin.accessToken);
}
};

export const changePass = async (req, res) => {
const validpass = await userServices.matchpass(req.body)
if(!validpass){
return res.status(401).send({success: "failed", message: "password doesn't match" });
}try {
userServices.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" });
}
};

export const verifyuser = async(req,res) => {
const validuser = await userServices.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", token:validuser});
}
};

export const forgetPass = async (req, res) => {
const validpass = await userServices.matchpass(req.body)
if(!validpass){
return res.status(401).send({success: "failed", message: "password doesn't match" });
}try {
userServices.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" });
}
};

export const updateuser = async (req, res) => {
try {
const response = await userServices.updateuser1(req.data.email , req.body);
res.status(201).send({success: "true", message: "user updated successfully", response });
} catch (error) {
res.status(402).send({success: "false", message:"user not updated"});
}
};

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

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

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

export const deluser = async (req, res) => {
try {
await userServices.deleteuser(req.data.id);
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)

export const userlist = async (req, res) => {
try{
const data = await userServices.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});
}
};

// user address

export const user_address = async (req,res)=>{
try{
const data = await userServices.useraddress(req.body,req.data.id)
if(data){
res.status(201).send({success: "true", message: "address saved" });
}else{
res.status(401).send({success: "false", message: "address not saved"});
}
}catch(error){
res.status(401).send({success: "false", message:error});
}
};

export const profileImg = async (req,res)=>{
if(req.file){
res.status(201).send({success: "true", message: "image uploaded" });
}else{
res.status(401).send({success: "false", message: "failed"});
}
};

export const flipkartMob = async (req,res)=>{
try{
const fkart = await userServices.flipkart()
if(fkart){
res.status(201).send({success: "true", message: "userdata found", Data : fkart });
}
}catch(error){
res.status(401).send({success: "false", message: "userdata not found" ,error});
}
};

export const flipkartAllMob = async (req,res)=>{
try{
const fkart = await userServices.flipkartAll()
if(fkart){
res.status(201).send({success: "true", message: "userdata found", Data : fkart });
}
}catch(error){
res.status(401).send({success: "false", message: "userdata not found" ,error});
}
};
export const snapdealTshirt = async (req,res)=>{
try{
const sdeal = await userServices.snapdeal()
if(sdeal){
res.status(201).send({success: "true", message: "userdata found", Data : sdeal });
}
}catch(error){
res.status(401).send({success: "false", message: "userdata not found" ,error});
}
};
export const aggregate = async (req,res) => {
try {
const data = await userServices.findByAggregate()
res.status(201).send({success: "true", message: "userdata found", Data : data });
} catch (error) {
res.status(401).send({success: "false",error});
}
}

export const refreshuser = async (req,res) => {
try {
const token = await userServices.generateToken(req.data)
res.cookie('refresh_token', token.refreshToken, { httpOnly: true,
sameSite: 'None', secure: true,
maxAge: 24 * 60 * 60 * 1000
});
res.status(200).send(token.accessToken);
} catch (error) {
res.status(401).send({success: "false",error});
}
}
56 changes: 56 additions & 0 deletions middleware/usermiddle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import jwt from "jsonwebtoken";
import config from "../config/constant.js";
import multer from "multer";
import { dbConnection } from "../config/dbconnect.js";
import { client } from "../config/redisconfig.js";

export const verifyEmail = async (req, res, next) => {
const userData = await dbConnection.findOne({ where: { email: req.body.email } });

if (userData) {
return res.status(409).send({ success: false, msg: "Email already exist" });
} else {
next();
}
};

export const checkAuth = async (req, res, next) => {
const bearerHeader = req.headers["authorization"];
if (typeof bearerHeader !== "undefined") {
const bearer = bearerHeader.split(" ");
const token = bearer[1];
const { email, id } = jwt.verify(token, config.ACCESS_TOKEN_SECRET);
req.data = { email, token, id };
next();
} else {
next();
}
};

export const verifyRT = async (req, res, next) => {
if (req.cookies?.refresh_token) {
// Destructuring refreshToken from cookie
const refreshToken = req.cookies.refresh_token;

// Verifying refresh token
const tokenData = await client.hGetAll(refreshToken);
req.data = tokenData;
client.del(refreshToken);
next();
} else {
return res
.status(406)
.json({ message: "Unauthorized ! Refresh token not found" });
}
};

export const upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "uploads");
},
filename: function (req, file, cb) {
cb(null, file.fieldname + "-" + Date.now() + ".jpg");
},
}),
}).single("user_file");
Loading