diff options
| author | 8cy <[email protected]> | 2020-05-06 12:05:56 -0700 |
|---|---|---|
| committer | 8cy <[email protected]> | 2020-05-06 12:05:56 -0700 |
| commit | 1fd3e91928bf41ac72cd56b260fb6a6f42d47143 (patch) | |
| tree | cb921eb41eaf359c2551fb4f303831c56db80cab /server.js | |
| download | slog-1fd3e91928bf41ac72cd56b260fb6a6f42d47143.tar.xz slog-1fd3e91928bf41ac72cd56b260fb6a6f42d47143.zip | |
A New Beginning
Diffstat (limited to 'server.js')
| -rw-r--r-- | server.js | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/server.js b/server.js new file mode 100644 index 0000000..32f5864 --- /dev/null +++ b/server.js @@ -0,0 +1,303 @@ +const express = require('express'); +const path = require('path'); +const bcrypt = require('bcrypt'); +const session = require('express-session'); +//const ejs = require('ejs'); +const mongoose = require('mongoose'); +const EntryItem = require('./models/entryItem'); +const User = require('./models/user'); +require('dotenv').config(); // for global var things like mongodb uri +const app = express(); + +// connect to db +mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true }) + .then(console.log('Connected to MongoDB database.')) + .catch(err => console.log(err)); + +const db = mongoose.connection; +db.on('error', console.error.bind(console, 'connection error:')); + + +app.use(express.static(path.join(__dirname, 'public'))); +app.use(session({ + secret: 'deez nuts', + resave: true, + saveUninitialized: false, + cookie: { + maxAge: 2678000 * 1000 + } +})); +app.set('view engine', 'ejs'); +app.use(express.urlencoded({ extended: false })); // only here so it can work +// index +app.get('/', async (req, res) => { + //const todoItems = await TodoItem.find(); + User.findById(req.session.userId) + .exec(async (error, user) => { + if (error) { + res.render('index', { req: req, User: User, name: null }); + } else { + if (user === null) { + //let err = new Error('Not logged in!'); + res.render('index', { req: req, User: User, name: null }); + //return err.status = 400; + //return next(err); + } else { + const entryItems = EntryItem; + // const entryItems = await EntryItem.find({user: user.name}); + //console.log(await entryItems.find({"type": "purchase"})); + // (await entryItems.find({ username: user.name, "type": "purchase" })).forEach(entryItem => { + // working + // }); + // let carF; + // let sellerF; + // let priceF; + // let dateF; + const loop = await EntryItem.find({ + "type": "purchase", + user: user.username + }); + //console.log(user.username) + //console.log(loop) + // (await loop).forEach(entryItem => { + // carF = entryItem.cars; + // sellerF = entryItem.seller; + // priceF = entryItem.price; + // dateF = entryItem.date; + // }); + // let carX; + // let sellerX; + // let priceX; + // let dateX; + const loop2 = await EntryItem.find({ + "type": "sale", + "user": user.username + }); + // (await loop2).forEach(entryItem => { + // carX = entryItem.cars; + // sellerX = entryItem.seller; + // priceX = entryItem.price; + // dateX = entryItem.date; + // }); + // let carY; + // let sellerY; + // let priceY; + // let dateY; + const loop3 = await EntryItem.find({ + "type": "trade", + "user": user.username + }); + // (await loop3).forEach(entryItem => { + // carY = entryItem.cars; + // sellerY = entryItem.seller; + // priceY = entryItem.price; + // dateY = entryItem.date; + // }); + return res.render('index', { + req: req, + User: User, + name: user.username, + entryItems: entryItems, + user: user, + + loop: loop, + // carF: carF, + // sellerF: sellerF, + // priceF: priceF, + // dateF: dateF, + + loop2: loop2, + // carX: carX, + // sellerX: sellerX, + // priceX: priceX, + // dateX: dateX, + + loop3: loop3, + // carY: carY, + // sellerY: sellerY, + // priceY: priceY, + // dateY: dateY, + }); + // (await loop1).forEach(entryItem => { + // }) + // loop.forEach(entryItem => { + // parms = parms; + // }); + // const entryItemsPurchase = (await entryItems.find({ username: user.name, "type": "purchase" })).forEach(entryItem => {}); + // const entryItemsSale = (await entryItems.find({ username: user.name, "type": "sale" })).forEach(entryItem => {}); + // const entryItemsTrade = (await entryItems.find({ username: user.name, "type": "trade" })).forEach(entryItem => {}); + + //entryItems.find({ username: user.name, "type": "trade" }).forEach(entryItem => {}); + + // entryItems.find({"user": user.username, "type": "purchase"}).forEach(entryItem => { + // console.log(entryItemsPurchase.forEach(entryItem => { + // entryItem.cars; + // })); + } + } + }); +}); + +// if 404, redir to root +// app.get('*', (req, res) => { +// res.redirect('/'); +// }); + +app.get('/login', (req, res) => { + res.render('login'); +}); + +app.get('/signup', (req, res) => { + res.render('signup'); +}); + +app.get('/api/v1/', async (req, res) => { + let resAlt = 12 + await EntryItem.countDocuments(); + res.json({ entries: resAlt }); +}); + +// create new db entry on post +app.post('/submitEntry', async (req, res) => { + User.findById(req.session.userId) + .exec(async (error, user) => { + if (error) { + return res.render('error'); + } else { + if (user === null) { + return res.render('error'); + } else { + await EntryItem.create({ + user: user.username, + type: req.body.transactionType, + cars: req.body.carsType, + seller: req.body.sellerType, + price: req.body.priceType, + date: new Date() + }); + } + + return res.redirect('/'); + } + }); + + res.redirect('/'); +}); + +app.post('/login', async (req, res) => { + if (req.body.userLogin && req.body.passLogin) { + authenticate = (username, password, callback) => { + User.findOne({ + username: username + }) + .exec((err, user) => { + if (err) { + res.redirect('/'); + } else if (!user) { + return res.render('error'); + } + + bcrypt.compare(password, user.password, (err, result) => { + if (result === true) { + return callback(null, user); + } else { + return callback(); + } + }); + }); + }; + + authenticate(req.body.userLogin, req.body.passLogin, (error, user) => { + if (error || !user) { + //let err = new Error('Wrong username or password.'); + err.status = 401; + return res.render('error'); + } else { + req.session.userId = user._id; + return res.redirect('/'); + } + }); + } +}); + +app.post('/signup', async (req, res) => { + if (req.body.userSignup && req.body.passSignup) { + let hashedPass = bcrypt.hash(req.body.passSignup, 10); + const userData = { + email: req.body.emailSignup, + username: req.body.userSignup, + password: await hashedPass + }; + + User.create(userData, (err, user) => { + if (err) { + return res.render('error'); + } else { + return res.redirect('/'); + } + }); + } +}); + +app.post('/logout', (req, res, next) => { + if (req.session) { + req.session.destroy((err) => { + if (err) { + return res.render('error'); + } else { + return res.redirect('/'); + } + }); + } +}); + +app.get('/logout', (req, res, next) => { + if (req.session) { + req.session.destroy((err) => { + if (err) { + return res.render('error'); + } else { + return res.redirect('/'); + } + }); + } +}); + +app.get('/profile', async (req, res, next) => { + User.findById(req.session.userId) + .exec((error, user) => { + if (error) { + return res.render('error'); + } else { + if (user === null) { + //let err = new Error('Not logged in!'); + return res.render('login', { req: req, User: User }); + //return err.status = 400; + //return next(err); + } else { + return res.render('profile', { req: req, User: User, name: user.username }); + } + } + }); +}); + +app.get('/profile/legacy', async (req, res, next) => { + User.findById(req.session.userId) + .exec((error, user) => { + if (error) { + return res.render('error'); + } else { + if (user === null) { + return res.json({ name: 'null' }); + } else { + return res.json({ name: user.username }); + } + } + }); +}); + +app.get('/error', (req, res) => { + res.render('error'); +}); + +app.listen(process.env.PORT || 1337); +console.log(`Listening on port ${process.env.PORT}.`); // honestly have no idea why it says port as undefined fix this when u feel like it )
\ No newline at end of file |