diff --git a/app.js b/app.js index 7ec44f3..c9843cd 100644 --- a/app.js +++ b/app.js @@ -1,121 +1,116 @@ //Importing npm packages -const express = require("express"); -const http = require("http"); -const cookieParser = require("cookie-parser"); -const cookieSession = require("cookie-session"); -const bodyParser = require("body-parser"); +const express = require('express'); +const http = require('http'); +const cookieParser = require('cookie-parser'); +const cookieSession = require('cookie-session'); +const bodyParser = require('body-parser'); const methodOverride = require('method-override'); -const passport = require("passport"); -const keys = require("./config/keys"); -const socketio = require("socket.io"); +const passport = require('passport'); +const keys = require('./config/keys'); +const socketio = require('socket.io'); const formatMessage = require('./utils/messages'); -const moment = require("moment"); +const moment = require('moment'); //Importing MongoDB models -require("./db/mongoose"); -const User = require("./models/User"); -const webScraper = require("./db/webScraper"); +require('./db/mongoose'); +const User = require('./models/User'); +const webScraper = require('./db/webScraper'); //Importing Routes -const user = require("./routes/user"); -const auth = require("./routes/auth"); -const friend = require("./routes/friend"); +const user = require('./routes/user'); +const auth = require('./routes/auth'); +const friend = require('./routes/friend'); //Variables -const port = process.env.PORT||3000; +const port = process.env.PORT || 3000; const app = express(); -const server=http.createServer(app); +const server = http.createServer(app); const io = socketio(server); app.use(express.json()); -app.set("view engine", "ejs"); +app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(methodOverride('_method')); -app.use(express.static("./assets")); +app.use(express.static('./assets')); app.use( - cookieSession({ - name: "session", - keys: [keys.sessionSecret] - }) - ); + cookieSession({ + name: 'session', + keys: [keys.sessionSecret], + }) +); app.use(cookieParser()); //Passport Middleware -require("./middleware/PassportMiddleware"); +require('./middleware/PassportMiddleware'); app.use(passport.initialize()); app.use(passport.session()); -app.use("/user",user); -app.use("/auth",auth); -app.use("/friend",friend); +app.use('/user', user); +app.use('/auth', auth); +app.use('/friend', friend); -app.get("/",(req,res)=>{ - webScraper(); - // console.log(req.user); - if(req.session.token == null){ - res.render("home",{ - currentUser:req.user - }); - }else{ - User.findOne({email:req.user.email},(err,user)=>{ - if(err) Error(err); - if(user){ - res.redirect("/user/dashboard"); - } - }); - } +app.get('/', (req, res) => { + webScraper(); + // console.log(req.user); + if (req.session.token == null) { + res.render('home', { + currentUser: req.user, + }); + } else { + User.findOne({ email: req.user.email }, (err, user) => { + if (err) Error(err); + if (user) { + res.redirect('/user/dashboard'); + } + }); + } }); +io.on('connection', (socket) => { + console.log('New Web Socket Connection'); + // Runs when user joins room + socket.on('joinRoom', ({ user_id }) => { + socket.join(user_id); + console.log('Room Joined'); + }); -io.on('connection',(socket)=>{ - - console.log("New Web Socket Connection"); - - // Runs when user joins room - socket.on('joinRoom',({user_id})=>{ - socket.join(user_id); - console.log("Room Joined"); - }); - // Listen for chat message - socket.on('chatMessage',({msg,friend_id,user_id})=>{ - - User.findOne({_id:user_id},async(err,user)=>{ - User.findOne({_id:friend_id},async (err,friend)=>{ - - user.friends.forEach(async (x,i)=>{ - if(x.friend_id==friend_id){ - user.friends[i].chats.push({ - //sender - user_id, - //receiver - friend_id, - msg, - time:moment().format('h:mm a') - }); - await user.save(); - } + socket.on('chatMessage', ({ msg, friend_id, user_id }) => { + User.findOne({ _id: user_id }, async (err, user) => { + User.findOne({ _id: friend_id }, async (err, friend) => { + user.friends.forEach(async (x, i) => { + if (x.friend_id == friend_id) { + user.friends[i].chats.push({ + //sender + user_id, + //receiver + friend_id, + msg, + time: moment().format('h:mm a'), }); - - friend.friends.forEach(async(y,i)=>{ - if(y.friend_id==user_id){ - friend.friends[i].chats.push({ - user_id, - friend_id, - msg, - time:moment().format('h:mm a') - }); - await friend.save(); - } + await user.save(); + } + }); + + friend.friends.forEach(async (y, i) => { + if (y.friend_id == user_id) { + friend.friends[i].chats.push({ + user_id, + friend_id, + msg, + time: moment().format('h:mm a'), }); + await friend.save(); + } + }); - io.to(user_id).emit('message',formatMessage(user_id,msg,friend_id)); - io.to(friend_id).emit('message',formatMessage(user_id,msg,user_id)); + io.to(user_id).emit('message', formatMessage(user_id, msg, friend_id)); + io.to(friend_id).emit('message', formatMessage(user_id, msg, user_id)); }); }); }); @@ -123,9 +118,8 @@ io.on('connection',(socket)=>{ // socket.on('disconnect',()=>{ // io.emit('message',formatMessage('Chat BOT',"User Disconnected")) // }); -}) - +}); -server.listen(port,()=>{ - console.log("Server started on "+ port + "!"); -}); \ No newline at end of file +server.listen(port, () => { + console.log('Server started on ' + port + '!'); +}); diff --git a/routes/auth.js b/routes/auth.js index dd25c0f..b6f62f4 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,41 +1,41 @@ -const express = require("express"); -const passport = require("passport"); -const User = require("../models/User"); +const express = require('express'); +const passport = require('passport'); +const User = require('../models/User'); const router = express.Router(); router.get( - "/google", - passport.authenticate("google", { - scope: ["profile", "email"], - }) + '/google', + passport.authenticate('google', { + scope: ['profile', 'email'], + }) ); -router.get("/google/callback", -passport.authenticate("google", { failureRedirect: "/" }), - (req,res)=>{ - req.session.token = req.user.accessToken[req.user.accessToken.length-1]; - res.cookie("token",req.session.token); - User.findOne({email:req.user.email},async (err,user)=>{ - if(user){ - res.redirect("/user/dashboard"); - }else{ - res.redirect("/"); - } - }); +router.get( + '/google/callback', + passport.authenticate('google', { failureRedirect: '/' }), + (req, res) => { + req.session.token = req.user.accessToken[req.user.accessToken.length - 1]; + res.cookie('token', req.session.token); + User.findOne({ email: req.user.email }, async (err, user) => { + if (user) { + res.redirect('/user/dashboard'); + } else { + res.redirect('/'); + } + }); } ); -router.get("/logout", (req,res)=>{ - User.findOne({ email: req.user.email },async(err,user)=>{ - user.accessToken.splice(user.accessToken.length-1,1); - await user.save(); - }) - req.logout(); - req.session = null; - req.token = null; - res.cookie("token", ""); - res.redirect("/"); - -}); +router.get('/logout', (req, res) => { + User.findOne({ email: req.user.email }, async (err, user) => { + user.accessToken.splice(user.accessToken.length - 1, 1); + await user.save(); + }); + req.logout(); + req.session = null; + req.token = null; + res.cookie('token', ''); + res.redirect('/'); +}); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/routes/friend.js b/routes/friend.js index 3928d2f..368dad5 100644 --- a/routes/friend.js +++ b/routes/friend.js @@ -8,47 +8,46 @@ const Hackathon = require('../models/Hackathon'); router.use(bodyParser.urlencoded({ extended: true })); - -router.get("/chat",auth,(req,res)=>{ - User.findOne({email:req.user.email},(err,user)=>{ - let currentUser = req.user; - currentUser.friends = user.friends; - res.render("chatapp",{currentUser}); - }); +router.get('/chat', auth, (req, res) => { + User.findOne({ email: req.user.email }, (err, user) => { + let currentUser = req.user; + currentUser.friends = user.friends; + res.render('chatapp', { currentUser }); + }); }); - -router.get("/chat/addfriend/:ui",auth,(req,res)=>{ - User.findOne({email:req.user.email},async (err,user)=>{ - if(err) Error(err); - User.findOne({_id:req.params.ui},async (err,friend)=>{ - if(err) Error(err); - let flag = 1; - for(let i=0;i { + User.findOne({ email: req.user.email }, async (err, user) => { + if (err) Error(err); + User.findOne({ _id: req.params.ui }, async (err, friend) => { + if (err) Error(err); + let flag = 1; + for (let i = 0; i < user.friends.length; i++) { + if (user.friends[i].friend_id == friend._id) { + flag = 0; + break; + } + } + if (flag) { + const x = { + friend_id: req.params.ui, + name: friend.name, + email: friend.email, + }; + const y = { + friend_id: user._id, + name: user.name, + email: user.email, + }; + user.friends.push(x); + await user.save(); + friend.friends.push(y); + await friend.save(); + res.send({ res: 'Friend Added' }); + } else { + res.send({ res: 'Friend already added' }); + } + }); + }); }); module.exports = router; diff --git a/routes/user.js b/routes/user.js index 84217ae..35bb841 100644 --- a/routes/user.js +++ b/routes/user.js @@ -10,167 +10,170 @@ const Suggestion = require('../models/Suggestion'); router.use(bodyParser.urlencoded({ extended: true })); router.get('/dashboard', auth, (req, res) => { - User.findOne({_id: req.user._id}) + User.findOne({ _id: req.user._id }) .populate({ - path: 'currentHacks' - }) - .exec((err,user)=>{ - if(err) Error(err); - else { - // console.log(req.query); - res.render('dashboard', { currentUser: user, query:req.query}); - } + path: 'currentHacks', }) + .exec((err, user) => { + if (err) Error(err); + else { + // console.log(req.query); + res.render('dashboard', { currentUser: user, query: req.query }); + } + }); }); -router.post('/dashboard/editprofile/',auth,(req,res)=>{ - User.findOne({_id: req.user._id},async (err,user)=>{ - if(err) Error(err); - user.contact = req.body.contact; - user.github = req.body.github; - user.linkedin = req.body.linkedin; - user.bio = req.body.bio; - await user.save(); - res.redirect('/user/dashboard?section=editProfile'); - }) -}) -router.post('/dashboard/editprofile/addskill/',auth,(req,res)=>{ - User.findOne({_id: req.user._id},async(err,user)=>{ - if(err) Error(err); - req.body.skills.split(",").forEach((skill)=>{ - user.skills.push(skill); - }) - await user.save(); - res.redirect('/user/dashboard?section=editProfile'); - }) -}) -router.post('/dashboard/editprofile/del',auth,(req,res)=>{ - User.findOne({_id: req.user._id},async(err,user)=>{ - if(err) Error(err); - user.skills.forEach((skill,i)=>{ - if(skill == req.body.skill){ - user.skills.splice(i,1); - } - }) - await user.save(); - res.redirect('/user/dashboard?section=editProfile'); - }) -}) +router.post('/dashboard/editprofile/', auth, (req, res) => { + User.findOne({ _id: req.user._id }, async (err, user) => { + if (err) Error(err); + user.contact = req.body.contact; + user.github = req.body.github; + user.linkedin = req.body.linkedin; + user.bio = req.body.bio; + await user.save(); + res.redirect('/user/dashboard?section=editProfile'); + }); +}); +router.post('/dashboard/editprofile/addskill/', auth, (req, res) => { + User.findOne({ _id: req.user._id }, async (err, user) => { + if (err) Error(err); + req.body.skills.split(',').forEach((skill) => { + user.skills.push(skill); + }); + await user.save(); + res.redirect('/user/dashboard?section=editProfile'); + }); +}); +router.post('/dashboard/editprofile/del', auth, (req, res) => { + User.findOne({ _id: req.user._id }, async (err, user) => { + if (err) Error(err); + user.skills.forEach((skill, i) => { + if (skill == req.body.skill) { + user.skills.splice(i, 1); + } + }); + await user.save(); + res.redirect('/user/dashboard?section=editProfile'); + }); +}); router.get('/hackathons', auth, (req, res) => { - // const hackathonsFinished = []; - const hackathonsCurrent = []; - Hackathon.find({finished:false}) + // const hackathonsFinished = []; + const hackathonsCurrent = []; + Hackathon.find({ finished: false }) .sort({ - end_date: "asc" + end_date: 'asc', }) .populate({ - path:"participants" + path: 'participants', }) - .exec(async (err,hackathonsx)=>{ - if(err) Error(err); - else{ - await hackathonsx.forEach((hackathon)=>{ + .exec(async (err, hackathonsx) => { + if (err) Error(err); + else { + await hackathonsx.forEach((hackathon) => { + hackathonsCurrent.push(hackathon); + }); + Hackathon.find({ finished: true }) + .sort({ + end_date: 'desc', + }) + .populate({ + path: 'participants', + }) + .exec(async (err, hackathonsx) => { + if (err) Error(err); + else { + await hackathonsx.forEach((hackathon) => { hackathonsCurrent.push(hackathon); - }) - Hackathon.find({finished:true}) - .sort({ - end_date: "desc" - }) - .populate({ - path:"participants" - }) - .exec(async (err,hackathonsx)=>{ - if(err) Error(err); - else{ - await hackathonsx.forEach((hackathon)=>{ - hackathonsCurrent.push(hackathon); - }) - User.findOne({_id:req.user._id},(err,user)=>{ - if(err) Error(err); - // console.log(user); - res.render('hackathons',{ hacksCurrent: hackathonsCurrent, user: user}); - }) - } - }) - } - }) - + }); + User.findOne({ _id: req.user._id }, (err, user) => { + if (err) Error(err); + // console.log(user); + res.render('hackathons', { + hacksCurrent: hackathonsCurrent, + user: user, + }); + }); + } + }); + } + }); }); -router.post('/hackathons/insert/:hackathonid/:userid',auth, (req,res)=>{ - Hackathon.findOne({_id: req.params.hackathonid},(err, hackathon)=>{ - if(err) Error("Could not process fetch request "+ err); - else if(!hackathon) console.log("Hackathon id invalid"); +router.post('/hackathons/insert/:hackathonid/:userid', auth, (req, res) => { + Hackathon.findOne({ _id: req.params.hackathonid }, (err, hackathon) => { + if (err) Error('Could not process fetch request ' + err); + else if (!hackathon) console.log('Hackathon id invalid'); + else { + User.findOne({ _id: req.params.userid }, async (err, user) => { + if (err) Error('Could not process fetch request ' + err); + else if (!user) console.log('User id invalid'); else { - User.findOne({_id: req.params.userid},async (err, user)=>{ - if(err) Error("Could not process fetch request "+ err); - else if(!user) console.log("User id invalid"); - else { - hackathon.participants.push(user); - user.currentHacks.push(hackathon); - - await hackathon.save(); - await user.save(); - console.log("Participation added"); - } - }) + hackathon.participants.push(user); + user.currentHacks.push(hackathon); + + await hackathon.save(); + await user.save(); + console.log('Participation added'); } - }) - res.send("OK"); -}) -router.delete('/hackathons/insert/:hackathonid/:userid',auth, (req,res)=>{ - Hackathon.findOne({_id: req.params.hackathonid}) - .exec((err, hackathon)=>{ - if(err) Error("Could not process fetch request "+ err); - else if(!hackathon) console.log("Hackathon id invalid"); + }); + } + }); + res.send('OK'); +}); +router.delete('/hackathons/insert/:hackathonid/:userid', auth, (req, res) => { + Hackathon.findOne({ _id: req.params.hackathonid }).exec((err, hackathon) => { + if (err) Error('Could not process fetch request ' + err); + else if (!hackathon) console.log('Hackathon id invalid'); + else { + // console.log(hackathon.participants); + User.findOne({ _id: req.params.userid }, async (err, user) => { + if (err) Error('Could not process fetch request ' + err); + else if (!user) console.log('User id invalid'); else { - // console.log(hackathon.participants); - User.findOne({_id: req.params.userid},async (err, user)=>{ - if(err) Error("Could not process fetch request "+ err); - else if(!user) console.log("User id invalid"); - else { - // console.log(userr); - let flag = 1; - for(let i=0;i{ - console.log("here") - Suggestion.create({ - name:req.user.name, - email:req.user.email, - subject:req.body.subject, - message:req.body.message - },async(err)=>{ - if(err) console.log(err); - else { - console.log("New Suggestion"); - res.redirect("/user/dashboard"); - } - }) -}) +router.post('/suggestions', auth, (req, res) => { + console.log('here'); + Suggestion.create( + { + name: req.user.name, + email: req.user.email, + subject: req.body.subject, + message: req.body.message, + }, + async (err) => { + if (err) console.log(err); + else { + console.log('New Suggestion'); + res.redirect('/user/dashboard'); + } + } + ); +}); module.exports = router;