From 89e49ed4549d2cf459050185181ec9e147186403 Mon Sep 17 00:00:00 2001 From: Expand-sys Date: Mon, 3 May 2021 20:58:42 +1000 Subject: [PATCH] big changes - market is now able to be turned off meaning merge to main incoming - fixed some bugs and inefficent lines of code - added admin ability to change bank api url and mongo url --- index.js | 61 ++++++++++++++++++++++++++++-------- routes/admin.js | 68 ++++++++++++++++++++++++++++++++++++++++- routes/marketplace.js | 41 ++++++++++++++++--------- routes/settings.js | 2 ++ views/adminsettings.pug | 21 +++++++++++++ views/layout.pug | 10 +++--- views/marketlayout.pug | 9 +++--- views/setup.pug | 5 +-- 8 files changed, 179 insertions(+), 38 deletions(-) diff --git a/index.js b/index.js index 35bafbe..8de7811 100644 --- a/index.js +++ b/index.js @@ -14,6 +14,7 @@ const url = require('url') const dotenv = require('dotenv'); const fs = require('fs'); let Log = require('./schemas/log.js'); +const mongoose = require('mongoose') dotenv.config(); //mongodb connection @@ -64,25 +65,48 @@ app.use(expressValidator({ } })); app.post('/setup', async function(req, res){ + + console.log(req.body) - let mongo = req.body.mongo; + let {mongo, url, banksecure, marketplace} = req.body; process.env.MONGO = mongo - let apiurl = 'BANKAPIURL='+req.body.url - process.env.BANKAPIURL = req.body.url - let banksecure = 'SECURE=false' + process.env.MARKETPLACE = false + if(marketplace){ + process.env.MARKETPLACE = true + } + if(!url.endsWith('/')){ + url=url+"/" + } + process.env.BANKAPIURL =url process.env.SECURE = false - if(req.body.secure){ - banksecure = 'SECURE=true' - process.env.SECURE = true + if(!banksecure){ + banksecure = false + process.env.SECURE = false } process.env.SETUP = true - fs.writeFileSync('.env', apiurl+'\n'+banksecure+'\n'+mongo+'\nSETUP=true') + fs.writeFileSync('.env', "BANKAPIURL="+process.env.BANKAPIURL+'\n'+"SECURE="+process.env.SECURE+'\n'+"MARKETPLACE="+process.env.MARKETPLACE+'\n'+"MONGO="+process.env.MONGO+'\nSETUP=true') dotenv.config(); + if(process.env.MARKETPLACE){ + mongoose.connect(process.env.MONGO,{ + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: true, + }); + let db = mongoose.connection; + db.once('open', function(){ + console.log('Connected to MongoDB'); + }) + + //check for DB errors + db.on('error', function(err){ + console.log(err); + }); + } res.redirect('/') }) app.get('/', async function(req, res){ - if(setup==false){ + if(!process.env.SETUP){ res.render('setup') }else{ @@ -105,7 +129,8 @@ app.get('/', async function(req, res){ res.render('index', { user: req.session.user, admin: req.session.admin, - alive: alive + alive: alive, + marketplace: process.env.MARKETPLACE }) } }); @@ -179,6 +204,7 @@ app.get('/BankF', ensureAuthenticated, async function(req, res){ user: req.session.user, admin: req.session.admin, sucesses: successes, + marketplace: process.env.MARKETPLACE }) }); @@ -267,6 +293,7 @@ app.post('/sendfunds', async function(req, res){ balance:balance.value, user: req.session.user, admin: req.session.admin, + marketplace: process.env.MARKETPLACE }) } }) @@ -289,7 +316,8 @@ app.post('/register', async function(req, res){ } if(errors[0]){ res.render('register', { - errors:errors + errors:errors, + marketplace: process.env.MARKETPLACE }) } else { if(postUser(name, password)){ @@ -297,6 +325,7 @@ app.post('/register', async function(req, res){ res.render('login',{ errors:errors, successes: successes, + marketplace: process.env.MARKETPLACE }) } } @@ -304,6 +333,7 @@ app.post('/register', async function(req, res){ errors.push({msg: "User already exists"}) res.render('register',{ errors:errors, + marketplace: process.env.MARKETPLACE }) } }) @@ -349,7 +379,8 @@ app.post('/login', async function(req, res){ if(verified.body.value == 0){ errors.push({msg: 'Password wrong'}) res.render('login',{ - errors:errors + errors:errors, + marketplace: process.env.MARKETPLACE }) }else if(verified.body.value == 1){ req.session.user = name; @@ -358,7 +389,8 @@ app.post('/login', async function(req, res){ } else { errors.push({msg: 'User not found'}) res.render('login',{ - errors:errors + errors:errors, + marketplace: process.env.MARKETPLACE }) } } @@ -383,6 +415,7 @@ app.use('/marketplace', marketplace) app.get('/logout', function(req, res){ req.session.regenerate(function(err) { res.render('login', { + marketplace: process.env.MARKETPLACE }) }) }); @@ -392,6 +425,7 @@ app.get('/login', function(req, res){ req.session.regenerate(function(err) { res.render('login', { user: req.session.user, + marketplace: process.env.MARKETPLACE }) }) }); @@ -400,6 +434,7 @@ app.get('/register', function(req, res){ res.render('register', { user: req.session.user, admin: req.session.admin, + marketplace: process.env.MARKETPLACE }) }); diff --git a/routes/admin.js b/routes/admin.js index 1fb355b..c8e0837 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -3,20 +3,52 @@ const router = express.Router(); const path = require('path'); const {ensureAuthenticated} = require("../config/auth.js") const {checkAdmin} = require ("../config/admin.js") -var pug = require('pug'); +const pug = require('pug'); const flash = require ('connect-flash'); const expressValidator = require('express-validator'); const session = require('express-session'); const {postUser} = require('../helpers/functions.js') const got = require('got') const MemoryStore = require('memorystore')(session) +const fs = require('fs'); +const mongoose = require('mongoose') console.log('Sen was here') + + + +function mongo(){ + if(process.env.MONGO){ + console.log(process.env.MONGO) + mongoose.connect(process.env.MONGO,{ + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: true, + }); + + let db = mongoose.connection; + db.once('open', function(){ + console.log('Connected to MongoDB'); + }) + + //check for DB errors + db.on('error', function(err){ + console.log(err); + }); + } +} + + + + + + router.get('/', checkAdmin, function(req, res){ res.render('adminsettings', { user: req.session.user, admin: req.session.admin, + marketplace: process.env.MARKETPLACE }) }); @@ -69,6 +101,7 @@ router.post('/user',checkAdmin , async function(req,res){ user: req.session.user, admin: req.session.admin, successes: successes, + marketplace: process.env.MARKETPLACE }) }) @@ -94,6 +127,7 @@ router.post('/baluser',checkAdmin , async function(req,res){ admin: req.session.admin, successes: successes, errors: errors, + marketplace: process.env.MARKETPLACE }) }) @@ -121,6 +155,7 @@ router.post('/bal',checkAdmin , async function(req,res){ user: req.session.user, admin: req.session.admin, successes: successes, + marketplace: process.env.MARKETPLACE }) }) router.post('/userdelete', checkAdmin, async function(req,res){ @@ -152,6 +187,7 @@ router.post('/userdelete', checkAdmin, async function(req,res){ admin: req.session.admin, successes: successes, errors: errors, + marketplace: process.env.MARKETPLACE }) }) router.post('/destroyallsessions', checkAdmin, async function(req,res) { @@ -180,10 +216,40 @@ router.post('/destroyallsessions', checkAdmin, async function(req,res) { user: req.session.user, admin: req.session.admin, errors: errors, + marketplace: process.env.MARKETPLACE }) } }) + + + + +router.post('/changebackend', checkAdmin, async function(req,res){ + let {url} = req.body; + if(!url.endsWith('/')){ + url = url+'/' + } + process.env.BANKAPIURL = url + fs.writeFileSync('.env', "BANKAPIURL="+process.env.BANKAPIURL+'\n'+"SECURE="+process.env.SECURE+'\n'+"MARKETPLACE="+process.env.MARKETPLACE+'\n'+"MONGO="+process.env.MONGO+'\nSETUP=true') + res.redirect('../') +}) +router.post('/mongodb', checkAdmin, async function(req,res){ + let {url} = req.body; + process.env.MONGO = url + + if(process.env.mongo.length < 3){ + process.env.MARKETPLACE = false + } + fs.writeFileSync('.env', "BANKAPIURL="+process.env.BANKAPIURL+'\n'+"SECURE="+process.env.SECURE+'\n'+"MARKETPLACE="+process.env.MARKETPLACE+'\n'+"MONGO="+process.env.MONGO+'\nSETUP=true') + try{ + mongo() + }catch(e){ + console.log(e) + } + + res.redirect('../') +}) router.post('/close', checkAdmin, async function(req,res){ let {attempt} = req.body; let close; diff --git a/routes/marketplace.js b/routes/marketplace.js index 93b887a..f2ef423 100644 --- a/routes/marketplace.js +++ b/routes/marketplace.js @@ -6,25 +6,33 @@ const mongoose = require('mongoose') const dotenv = require('dotenv'); const got = require('got'); const {ensureAuthenticated} = require("../config/auth.js") +let db -mongoose.connect(process.env.MONGO,{ - useNewUrlParser: true, - useUnifiedTopology: true, - useFindAndModify: true, -}); -let db = mongoose.connection; +function mongo(){ + if(process.env.MONGO){ + console.log(process.env.MONGO) + mongoose.connect(process.env.MONGO,{ + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: true, + }); -//check connection -db.once('open', function(){ - console.log('Connected to MongoDB'); -}) + let db = mongoose.connection; + db.once('open', function(){ + console.log('Connected to MongoDB'); + }) + + //check for DB errors + db.on('error', function(err){ + console.log(err); + }); + } +} + +mongo() -//check for DB errors -db.on('error', function(err){ - console.log(err); -}); let Item = require('../schemas/item') let Listing = require('../schemas/listing') @@ -46,6 +54,7 @@ router.get('/', function(req, res) { items: items, user: req.session.user, admin: req.session.admin, + marketplace: process.env.MARKETPLACE }); } }) @@ -58,6 +67,7 @@ router.get('/marketdash', ensureAuthenticated, function(req,res){ user:req.session.user, admin:req.session.admin, inventory:inventory, + marketplace: process.env.MARKETPLACE }) }) @@ -75,6 +85,7 @@ router.get('/:id',function(req, res){ user:req.session.user, admin:req.session.admin, item:item, + marketplace: process.env.MARKETPLACE }); }) }); @@ -86,6 +97,7 @@ router.get('/:id/list',ensureAuthenticated, function(req,res){ user:req.session.user, admin:req.session.admin, item:item, + marketplace: process.env.MARKETPLACE }); }); }) @@ -98,6 +110,7 @@ router.get('/:id/buy',ensureAuthenticated, function(req,res){ listings:listings, user:req.session.user, admin:req.session.admin, + marketplace: process.env.MARKETPLACE }); }); }) diff --git a/routes/settings.js b/routes/settings.js index 01ad21c..8139588 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -40,6 +40,7 @@ router.post('/pass', ensureAuthenticated, async function(req, res){ errors:errors, user: req.session.user, admin: req.session.admin, + marketplace: process.env.MARKETPLACE }) } try{ @@ -62,6 +63,7 @@ router.post('/pass', ensureAuthenticated, async function(req, res){ res.render('login', { successes: successes, errors:errors, + marketplace: process.env.MARKETPLACE }) }) }) diff --git a/views/adminsettings.pug b/views/adminsettings.pug index 9d77978..301d33b 100644 --- a/views/adminsettings.pug +++ b/views/adminsettings.pug @@ -57,6 +57,27 @@ block content br input.btn.btn-primary(type='submit',value='Submit') br + .card.shadow-lg + h4 Change backend URL + form(method='POST', action='/admin/changebackend') + #form-group + p WARNING DO NOT PUT WRONG URL IN YOU WILL BREAK AND HAVE TO DELETE .ENV FILE TO FIX + p This will change the backend that is being used by the front end + label Enter URL of new BankAPI including trailing slash + input.form-control(name='url', type='url') + br + input.btn.btn-warning(type='submit',value='Submit') + br + .card.shadow-lg + h4 Change backend Mongodb URL + form(method='POST', action='/admin/mongodb') + #form-group + p WARNING DO NOT PUT WRONG URL IN YOU WILL BREAK AND HAVE TO DELETE .ENV FILE TO FIX + label Enter URL of new MongoDB or enter a space to turn off marketplace + input.form-control(name='url', type='text') + br + input.btn.btn-warning(type='submit',value='Submit') + br .card.shadow-lg h4 Destroy All Sessions form(method='POST', action='/admin/destroyallsessions') diff --git a/views/layout.pug b/views/layout.pug index ee5a11e..1d3de9e 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -23,6 +23,7 @@ html a.nav-link(href='/login').text-white Login li.nav-item a.nav-link(href='/register').text-white Register + if marketplace == true li.nav-item a.nav-link(href='/marketplace').text-white MarketPlace if user @@ -30,10 +31,11 @@ html a.nav-link(href='/logout').text-white Log out li.nav-item a.nav-link(href='/BankF').text-white Bank - li.nav-item - a.nav-link(href='/marketplace').text-white MarketPlace - li.nav-item - a.nav-link(href='/marketplace/marketdash').text-white MarketPlace-Dashboard + if marketplace == true + li.nav-item + a.nav-link(href='/marketplace').text-white MarketPlace + li.nav-item + a.nav-link(href='/marketplace/marketdash').text-white MarketPlace-Dashboard li.nav-item a.nav-link(href='/settings').text-white Settings if admin == true diff --git a/views/marketlayout.pug b/views/marketlayout.pug index ee5a11e..d926671 100644 --- a/views/marketlayout.pug +++ b/views/marketlayout.pug @@ -30,10 +30,11 @@ html a.nav-link(href='/logout').text-white Log out li.nav-item a.nav-link(href='/BankF').text-white Bank - li.nav-item - a.nav-link(href='/marketplace').text-white MarketPlace - li.nav-item - a.nav-link(href='/marketplace/marketdash').text-white MarketPlace-Dashboard + if marketplace == true + li.nav-item + a.nav-link(href='/marketplace').text-white MarketPlace + li.nav-item + a.nav-link(href='/marketplace/marketdash').text-white MarketPlace-Dashboard li.nav-item a.nav-link(href='/settings').text-white Settings if admin == true diff --git a/views/setup.pug b/views/setup.pug index fe15052..33befa0 100644 --- a/views/setup.pug +++ b/views/setup.pug @@ -11,10 +11,11 @@ block content input.form-control(name='url', type='url') label SSL enabled on front end? leave unchecked if unsure: input.form-control(name='secure', type='checkbox') - label MongoDB url + label Enable marketplace: + input.form-control(name='marketplace', type='checkbox') + label MongoDB url insert if using marketplace input.form-control(name='mongo', type='text') br input.btn.btn-primary(type='submit',value='Submit') br br - h2 THESE SETTINGS WILL REQUIRE A RESTART TO APPLY