├── .gitignore ├── models ├── planModel.js └── userModel.js ├── public ├── 404.html ├── forgetPassword.html └── index.html ├── resource.md ├── package.json ├── plan.json ├── Routers ├── authHelper.js ├── userRouter.js └── authRouter.js ├── app.js ├── nodemailer.js ├── views └── index.html └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | secrets.js -------------------------------------------------------------------------------- /models/planModel.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |

oops page not

11 | 12 | -------------------------------------------------------------------------------- /resource.md: -------------------------------------------------------------------------------- 1 | https://developer.mozilla.org/en-US/docs/Web/HTTP/Status 2 | 3 | https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in 4 | 5 | https://dzone.com/articles/firebase-vs-mongodb-which-database-to-use-for-your 6 | 7 | https://medium.com/@sureshdsk/how-json-web-token-jwt-authentication-works-585c4f076033#:~:text=JSON%20Web%20Token%20(JWT)%20is,the%20Identity%20Provider(IdP).&text=JWT%20is%20signed%20and%20encoded%2C%20not%20encrypted 8 | 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foodApp", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "cookie-parser": "^1.4.5", 14 | "email-validator": "^2.0.4", 15 | "express": "^4.17.1", 16 | "jsonwebtoken": "^8.5.1", 17 | "mongoose": "^6.0.6", 18 | "nodemailer": "^6.6.3", 19 | "validator": "^13.6.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plan.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "name": "Premium", 5 | "ratings": 7, 6 | "price": 100, 7 | "delivery": true, 8 | "meals": 3, 9 | "description": "sndhfvsdvfvhjfds" 10 | }, 11 | { 12 | "id": 2, 13 | "name": "Vegan", 14 | "ratings": 7, 15 | "price": 150, 16 | "delivery": true, 17 | "meals": 3, 18 | "description": "sndhfvsdvfvhjfds" 19 | }, 20 | { 21 | "id": 3, 22 | "name": "Organic", 23 | "ratings": 7, 24 | "price": 200, 25 | "delivery": true, 26 | "meals": 3, 27 | "description": "sndhfvsdvfvhjfds" 28 | } 29 | ] -------------------------------------------------------------------------------- /Routers/authHelper.js: -------------------------------------------------------------------------------- 1 | // let flag=false; // Userloggedin 2 | const jwt=require('jsonwebtoken'); 3 | const {JWT_KEY}=require('../secrets'); 4 | function protectRoute(req,res,next){ 5 | try{ 6 | if(req.cookies.login){ 7 | console.log(req.cookies); 8 | let isVerified=jwt.verify(req.cookies.login,JWT_KEY); 9 | if(isVerified){ 10 | next(); 11 | } 12 | else{ 13 | res.json({ 14 | message:"not authorized" 15 | }); 16 | } 17 | } 18 | else{ 19 | res.json({ 20 | message:"operation not allowed" 21 | }); 22 | } 23 | } 24 | catch(err){ 25 | return res.status(500).json({ 26 | message:err.message 27 | }) 28 | } 29 | } 30 | 31 | module.exports=protectRoute; -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | //npm init -y 2 | // npm install express 3 | // npm i nodemon -g 4 | 5 | const express=require('express'); 6 | 7 | //server creation 8 | const app=express(); 9 | let port='8081'; 10 | app.listen(port,function(){ 11 | console.log(`server is listening on port ${port} `); 12 | }); 13 | //types of request -> get post put delete 14 | app.get('/',(req,res)=>{ 15 | console.log(req.hostname); 16 | console.log(req.path); 17 | console.log(req.method); 18 | console.log('hello from home page'); 19 | res.send('

hello hi from backend

'); 20 | }); 21 | let obj={ 22 | 'name':'Abhishek' 23 | } 24 | app.get('/user',(req,res)=>{ 25 | console.log('users'); 26 | res.json(obj); 27 | }); 28 | 29 | app.get('/home',(req,res)=>{ 30 | // console.log('users'); 31 | console.log(__dirname); 32 | res.sendFile('./views/index.html',{root:__dirname}); 33 | }); 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /public/forgetPassword.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 20 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /nodemailer.js: -------------------------------------------------------------------------------- 1 | const nodemailer =require('nodemailer'); 2 | const {nodemailer_passkey}=require('./secrets'); 3 | // https - 443 http 8080 4 | //userObj-> name email password 5 | module.exports=async function sendMail(userObj) { 6 | let transporter = nodemailer.createTransport({ 7 | host: "smtp.gmail.com", 8 | port: 587, 9 | secure: false, // true for 465, false for other ports 10 | auth: { 11 | user: 'goelabhishek694@gmail.com', // generated ethereal user 12 | pass: nodemailer_passkey, // generated ethereal password 13 | }, 14 | }); 15 | 16 | var Osubject,Otext,Ohtml; 17 | 18 | Osubject=`Thank you for signing ${userObj.name}`; 19 | Otext=` 20 | Hope you have a good time ! 21 | Here are your details- 22 | Name - ${userObj.name} 23 | Email- ${userObj.email} 24 | ` 25 | Ohtml=`

Welcome to foodAp.com

` 26 | 27 | let info = await transporter.sendMail({ 28 | from: '"FoodApp 🍱" ',// sender address <${userObj.email}> 29 | to: "deegoel.dg@gmail.com", // list of receivers 30 | subject: Osubject, // Subject line 31 | text: Otext, // plain text body 32 | html: Ohtml, // html body 33 | }); 34 | 35 | console.log("Message sent: %s", info.messageId); 36 | }; 37 | 38 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |

Heading of my Website

11 |
12 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Rem reprehenderit reiciendis inventore cum, doloribus accusamus aspernatur, voluptate dolore error laboriosam placeat aliquid explicabo tenetur similique id in, et consequatur odit.

13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
heading1heading2heading3
col1col2col3
col1col2col3
35 | git logo 36 | 37 | 38 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 23 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express=require('express'); 2 | 3 | const app=express(); 4 | const cookieParser = require('cookie-parser'); 5 | app.use(cookieParser()); 6 | 7 | // const router=express.Router(); 8 | app.listen('5000',function(){ 9 | console.log('server listening on port 5000'); 10 | }); 11 | 12 | app.use(express.json()); 13 | // app.use((req,res,next)=>{ 14 | // //do some work 15 | // console.log('i am a middleware'); 16 | // next(); 17 | // }); 18 | 19 | app.use(express.static('public')); 20 | const userRouter=require('./Routers/userRouter'); 21 | const authRouter=require('./Routers/authRouter'); 22 | 23 | app.use('/user',userRouter); 24 | app.use('/auth',authRouter); 25 | //mounting in express 26 | 27 | //param route 28 | // app.get('/user/:id',getUserById); 29 | 30 | 31 | // app.use((req,res,next)=>{ 32 | // //do some work 33 | // console.log('i am a middleware 2nd time'); 34 | // next(); 35 | // }); 36 | 37 | 38 | 39 | 40 | 41 | //redirects 42 | // app.get('/user-all',(req,res)=>{ 43 | // res.redirect('/user'); 44 | // }); 45 | 46 | // //404 page 47 | // app.use((req,res)=>{ 48 | // res.sendFile('public/404.html',{root:__dirname}) 49 | // }); 50 | 51 | // let user=[]; 52 | // client <- server 53 | //crud- create read update delete 54 | //read 55 | // app.get('/',(req,res)=>{ 56 | // res.send('Home Page'); 57 | // }); 58 | 59 | // app.get('/user',getUser); 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /models/userModel.js: -------------------------------------------------------------------------------- 1 | const mongoose=require('mongoose'); 2 | const {db_link}=require('../secrets.js') 3 | const validator = require("email-validator"); 4 | mongoose.connect(db_link).then(function(db){ 5 | // console.log(db); 6 | console.log('db connected'); 7 | }) 8 | .catch(function(err){ 9 | console.log(err); 10 | }); 11 | 12 | const userSchema=new mongoose.Schema({ 13 | name:{ 14 | type:String, 15 | required:true 16 | }, 17 | age:{ 18 | type:Number 19 | }, 20 | email:{ 21 | type:String, 22 | required:true, 23 | unique:true, 24 | validate:function(){ 25 | return validator.validate(this.email); 26 | } 27 | }, 28 | // createdAt:Date, 29 | createdAt:{ 30 | type:Date 31 | }, 32 | password:{ 33 | type:String, 34 | required:true, 35 | min:8 36 | }, 37 | confirmPassword:{ 38 | type:String, 39 | required:true, 40 | min:8, 41 | validate:function(){ 42 | return this.password==this.confirmPassword 43 | } 44 | } 45 | }); 46 | 47 | userSchema.pre('save',function(){ 48 | this.confirmPassword=undefined; 49 | }); 50 | 51 | const userModel=mongoose.model('userModel',userSchema); 52 | 53 | module.exports=userModel; 54 | 55 | // (async function createUser(){ 56 | // let user={ 57 | // name:'Abhi', 58 | // age:20, 59 | // email:'abcd@gmail.com', 60 | // password:'12345678', 61 | // confirmPassword:'12345678' 62 | // }; 63 | 64 | // console.log(userObj); 65 | // })(); 66 | 67 | -------------------------------------------------------------------------------- /Routers/userRouter.js: -------------------------------------------------------------------------------- 1 | const express=require('express'); 2 | const userRouter=express.Router(); 3 | const userModel=require('../models/userModel'); 4 | const protectRoute=require('./authHelper'); 5 | 6 | //routes 7 | 8 | userRouter 9 | .route('/') 10 | .get(protectRoute,getUsers) 11 | .post(createUser) 12 | .patch(updateUser) 13 | .delete(deleteUser); 14 | 15 | userRouter 16 | .route('/:id') 17 | .get(getUserById); 18 | 19 | //functions 20 | async function getUsers(req,res){ 21 | try{ 22 | console.log('getUser called'); 23 | let users=await userModel.find(); 24 | if(users){ 25 | return res.json(users); 26 | } 27 | else{ 28 | return res.json({ 29 | message:'users not found' 30 | }); 31 | } 32 | } 33 | catch(err){ 34 | return res.json({ 35 | message:err.message 36 | }); 37 | } 38 | 39 | } 40 | 41 | //post request 42 | // client-> server 43 | //create 44 | // app.post('/user',createUser); 45 | function createUser(req,res){ 46 | user=req.body; 47 | // console.log(req.body); 48 | res.send('data has been added succesfully'); 49 | } 50 | //update 51 | // app.patch('/user',updateUser); 52 | function updateUser (req,res){ 53 | let obj=req.body; 54 | for(let key in obj){ 55 | user[key]=obj[key]; 56 | } 57 | res.json(user); 58 | }; 59 | //delete 60 | // app.delete('/user',deleteUser); 61 | function deleteUser(req,res){ 62 | user={}; 63 | res.json(user); 64 | // res.send('ussr has been deleted'); 65 | } 66 | 67 | function getUserById(req,res){ 68 | console.log(req.params); 69 | res.json(req.params.id); 70 | } 71 | 72 | 73 | module.exports=userRouter; -------------------------------------------------------------------------------- /Routers/authRouter.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const userRouter = express.Router(); 3 | const userModel = require("../models/userModel"); 4 | const authRouter = express.Router(); 5 | const jwt=require('jsonwebtoken'); 6 | const {JWT_KEY}=require('../secrets'); 7 | const sendMail=require('../nodemailer'); 8 | //----------routes----------- 9 | authRouter.route("/signup").post(setCreatedAt, signupUser); 10 | 11 | authRouter 12 | .route("/forgetPassword") 13 | .get(getForgetPassword) 14 | .post(postForgetPassword, validateEmail); 15 | 16 | authRouter.route("/login").post(loginUser); 17 | 18 | //---------functions---------------- 19 | 20 | function setCreatedAt(req, res, next) { 21 | let obj = req.body; 22 | //keys ka arr -> uska length 23 | let length = Object.keys(obj).length; 24 | if (length == 0) { 25 | return res 26 | .status(400) 27 | .json({ message: "cannot create user if req.body is empty" }); 28 | } 29 | req.body.createdAt = new Date().toISOString(); 30 | next(); 31 | } 32 | 33 | async function signupUser(req, res) { 34 | // let userDetails=req.body; 35 | // let name=userDetails.name; 36 | // let email=userDetails.email; 37 | // let password=userDetails.password; 38 | try { 39 | let userObj = req.body; 40 | // user.push({email,name,password}); 41 | //put all data in mongo db 42 | 43 | // create document in userModel 44 | let user = await userModel.create(userObj); 45 | console.log("user", user); 46 | sendMail(user); 47 | res.json({ 48 | message: "user signedUp", 49 | user: userObj, 50 | }); 51 | } catch (err) { 52 | console.log(err); 53 | res.json({ message: err.message }); 54 | } 55 | } 56 | 57 | function getForgetPassword(req, res) { 58 | res.sendFile("./public/forgetPassword.html", { root: __dirname }); 59 | } 60 | 61 | function postForgetPassword(req, res, next) { 62 | let data = req.body; 63 | console.log("data", data); 64 | //check if email id is correct- validate 65 | next(); 66 | //check if user exists in db 67 | // res.json({ 68 | // message:"data received", 69 | // data:data.email 70 | // }) 71 | } 72 | 73 | function validateEmail(req, res) { 74 | console.log("in validateEmail function"); 75 | console.log(req.body); 76 | //hw to check if email is correct or not -> @ , . 77 | //indexOf 78 | res.json({ 79 | message: "data received", 80 | data: req.body, 81 | }); 82 | } 83 | 84 | async function loginUser(req, res) { 85 | try { 86 | //email password 87 | if (req.body.email) { 88 | let user = await userModel.findOne({ email: req.body.email }); 89 | if (user) { 90 | if (req.body.password == user.password) { 91 | let payload=user['_id']; 92 | let token=jwt.sign({id:payload},JWT_KEY); 93 | console.log('token',token); 94 | res.cookie("login", token, { httpOnly: true }); 95 | return res.json({ 96 | message: "user loged in", 97 | }); 98 | } else { 99 | return res.json({ 100 | message: "email or password is wrong", 101 | }); 102 | } 103 | } else { 104 | return res.json({ 105 | message: "email or password is wrong", 106 | }); 107 | } 108 | } else { 109 | return res.json({ 110 | message: "user is not present", 111 | }); 112 | } 113 | } catch (err) { 114 | return res.status(500).json({ 115 | message: err.message, 116 | }); 117 | } 118 | } 119 | 120 | module.exports = authRouter; 121 | --------------------------------------------------------------------------------