summaryrefslogtreecommitdiff
path: root/server.js
diff options
context:
space:
mode:
author8cy <[email protected]>2020-05-06 12:05:56 -0700
committer8cy <[email protected]>2020-05-06 12:05:56 -0700
commit1fd3e91928bf41ac72cd56b260fb6a6f42d47143 (patch)
treecb921eb41eaf359c2551fb4f303831c56db80cab /server.js
downloadslog-1fd3e91928bf41ac72cd56b260fb6a6f42d47143.tar.xz
slog-1fd3e91928bf41ac72cd56b260fb6a6f42d47143.zip
A New Beginning
Diffstat (limited to 'server.js')
-rw-r--r--server.js303
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