ccashfrontend/index.js
2021-04-19 17:32:02 +10:00

302 lines
7 KiB
JavaScript

const express = require('express');
const path = require('path');
const https = require('https')
const got = require('got')
const bodyParser = require('body-parser')
const expressValidator = require('express-validator');
const flash = require ('connect-flash');
const session = require('express-session');
const {postUser} = require('./helpers/functions.js')
const {ensureAuthenticated} = require("./config/auth.js")
const app = express();
const MemoryStore = require('memorystore')(session)
const url = require('url')
const dotenv = require('dotenv');
const fs = require('fs');
dotenv.config();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(flash());
app.use(require('connect-flash')());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json())
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(function(req, res, next) {
res.locals.messages = require('express-messages')(req, res);
next();
});
app.set('trust proxy', 1) // trust first proxy
let secure = false
if(process.env.SECURE=='true'||process.env.SECURE=='True'||process.env.SECURE=='TRUE'){secure = true}
let setup = false
if(process.env.SETUP=='true'||process.env.SETUP=='True'||process.env.SETUP=='TRUE'){setup=true}
app.use(session({
secret: 'fuck shit cunt',
resave: true,
store: new MemoryStore({
checkPeriod: 86400000 // prune expired entries every 24h
}),
saveUninitialized: true,
cookie: { secure: secure, maxAge: 86400000 },
}))
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length){
formParam += '[' + namespace.shift() + ']';
}
return{
param : formParam,
msg : msg,
value : value
};
}
}));
app.post('/setup', async function(req, res){
console.log(req.body)
let apiurl = 'BANKAPIURL='+req.body.url
process.env.BANKAPIURL = req.body.url
let banksecure = 'SECURE=false'
process.env.SECURE = false
if(req.body.secure){
banksecure = 'SECURE=true'
process.env.SECURE = true
}
process.env.SETUP = true
fs.writeFileSync('.env', apiurl+'\n'+banksecure+'\nSETUP=true')
dotenv.config();
res.redirect('/')
})
app.get('/', async function(req, res){
if(setup==false){
res.render('setup')
}else{
let checkalive;
try{
checkalive = await got(process.env.BANKAPIURL+'BankF/help')
} catch(err){
console.log(err)
}
let alive = false;
try{
if(checkalive.body){
alive = true
}
}catch(err){
console.log(err)
}
res.render('index', {
user: req.session.user,
admin: req.session.admin,
alive: alive
})
}
});
app.get('/BankF', ensureAuthenticated, async function(req, res){
let successes = [];
if(req.session.sucess == true){
successes.push({ msg: "Transfer successful"})
}
let admin
try{
admin = req.session.admin;
}catch(err){
console.log(err)
}
let balance = 0
try{
balance = await got(process.env.BANKAPIURL+'BankF/'+req.session.user+'/bal')
balance = JSON.parse(balance.body)
} catch(err){
console.log(err)
}
res.render('bankf',{
user: req.session.user,
balance: balance.value,
user: req.session.user,
admin: req.session.admin,
sucesses: successes,
})
});
app.post('/sendfunds', async function(req, res){
let balance = 0;
try{
balance = await got(process.env.BANKAPIURL+'BankF/'+req.session.user+'/bal')
balance = JSON.parse(balance.body)
} catch(err){
console.log(err)
}
let {amount, name, senderpass} = req.body
let a_name = req.session.user
let successes = [];
let errors = [];
let result = {}
result = await got.post(process.env.BANKAPIURL+'BankF/sendfunds',{
json:{
a_name: a_name,
b_name: name,
amount: parseInt(amount),
attempt: senderpass
},
responseType:'json'
})
if(result.body.value == true || result.body.value){
req.session.success = true;
res.redirect('/BankF')
} else {
errors.push({msg: "Transfer Unsuccessful"})
res.render("bankf",{
errors:errors,
successes: successes,
balance:balance.value,
user: req.session.user,
admin: req.session.admin,
})
}
})
app.post('/register', async function(req, res){
var {name, password, password2} = req.body;
let checkuser = await got(process.env.BANKAPIURL+'BankF/contains/'+name)
checkuser = JSON.parse(checkuser.body).value
let errors = [];
let successes = [];
if(checkuser == false){
if(!name || !password || !password2) {
errors.push({msg : "please fill in all fields"});
}
if(password !== password2) {
errors.push({msg : "Passwords don't match"});
}
if(password.length < 6 ) {
errors.push({msg : 'Password must be at least 6 characters'})
}
if(errors[0]){
res.render('register', {
errors:errors
})
} else {
if(postUser(name, password)){
successes.push({msg:"User Registered Please Log In"})
res.render('login',{
errors:errors,
successes: successes,
})
}
}
} else {
errors.push({msg: "User already exists"})
res.render('register',{
errors:errors,
})
}
})
app.post('/login', async function(req, res){
if(req.session.user){
res.redirect("/")
}
let {name,password} = req.body
let adminTest;
let errors = [];
try{
adminTest = await got.post(process.env.BANKAPIURL+'BankF/admin/vpass',{
json:{
attempt: password,
},
responseType:'json'
})
} catch(err){
console.log(err)
}
req.session.admin = adminTest.body.value
req.session.adminp = password
let verified
try{
verified = await got.post(process.env.BANKAPIURL+'BankF/vpass', {
json:{
name: name,
attempt: password
},
responseType:'json'
})
} catch(err){
console.log(err)
} finally {
console.log(verified.body.value)
if(verified.body.value == 0){
errors.push({msg: 'Password wrong'})
res.render('login',{
errors:errors
})
}else if(verified.body.value == 1){
req.session.user = name;
console.log(req.session.user)
res.redirect('/BankF')
} else {
errors.push({msg: 'User not found'})
res.render('login',{
errors:errors
})
}
}
//res.redirect('/login')
})
let admin = require('./routes/admin');
app.use('/admin', admin);
let settings = require('./routes/settings');
app.use('/settings', settings)
app.get('/logout', function(req, res){
req.session.regenerate(function(err) {
res.render('login', {
})
})
});
app.get('/login', function(req, res){
req.session.regenerate(function(err) {
res.render('login', {
user: req.session.user,
})
})
});
app.get('/register', function(req, res){
res.render('register', {
user: req.session.user,
admin: req.session.admin,
})
});
app.listen(process.env.PORT || 3000, function(){
console.log('Server started on port 3000...');
});