mirror of
https://github.com/Expand-sys/ccashfrontend
synced 2025-12-16 14:52:13 +11:00
undoxxed :sungalsses:
This commit is contained in:
commit
f218524d14
21 changed files with 3454 additions and 0 deletions
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
2
README.md
Normal file
2
README.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# ccashfrontend
|
||||
# yeah so like i dont have to document shit and if you wanna fight meet me round back of maccas mmmkay
|
||||
12
config/admin.js
Normal file
12
config/admin.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
module.exports = {
|
||||
checkAdmin : function(req,res, next) {
|
||||
if(req.session.admin != false) {
|
||||
if(req.session.admin != undefined){
|
||||
return next();
|
||||
}
|
||||
}
|
||||
|
||||
req.flash('error_msg' , 'admins only');
|
||||
res.redirect('/');
|
||||
}
|
||||
}
|
||||
9
config/auth.js
Normal file
9
config/auth.js
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
module.exports = {
|
||||
ensureAuthenticated : function(req,res,next) {
|
||||
if(req.session.user != undefined) {
|
||||
return next();
|
||||
}
|
||||
req.flash('error_msg' , 'please login to view this resource');
|
||||
res.redirect('/login');
|
||||
}
|
||||
}
|
||||
26
helpers/functions.js
Normal file
26
helpers/functions.js
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
const got = require('got');
|
||||
|
||||
|
||||
|
||||
async function postUser(name, password){
|
||||
try{
|
||||
const {body} = await got.post('https://ccash.ryzerth.com/BankF/user',{
|
||||
json:{
|
||||
name: name,
|
||||
init_pass: password
|
||||
},
|
||||
responseType:'json'
|
||||
|
||||
})
|
||||
return body
|
||||
} catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
|
||||
console.log(body)
|
||||
return body.value
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = { postUser }
|
||||
302
index.js
Normal file
302
index.js
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
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...');
|
||||
});
|
||||
2428
package-lock.json
generated
Normal file
2428
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
36
package.json
Normal file
36
package.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"connect-flash": "^0.1.1",
|
||||
"express": "^4.17.1",
|
||||
"express-messages": "^1.0.1",
|
||||
"express-session": "^1.17.1",
|
||||
"express-validator": "5.3.1",
|
||||
"got": "^11.8.2",
|
||||
"https": "^1.0.0",
|
||||
"memorystore": "*",
|
||||
"path": "^0.12.7",
|
||||
"pug": "^3.0.2",
|
||||
"url": "^0.11.0",
|
||||
"validator": "^13.5.2"
|
||||
},
|
||||
"name": "ccashfrontend",
|
||||
"description": "",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node index.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/Expand-sys/ccashfrontend.git"
|
||||
},
|
||||
"author": "Expand",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Expand-sys/ccashfrontend/issues"
|
||||
},
|
||||
"homepage": "https://github.com/Expand-sys/ccashfrontend#readme",
|
||||
"engines": {
|
||||
"node": "15.12.x"
|
||||
}
|
||||
}
|
||||
BIN
public/CCashLogo2.png
Normal file
BIN
public/CCashLogo2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
137
public/css/style.css
Normal file
137
public/css/style.css
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
.main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
height: 100vh;
|
||||
}
|
||||
body{
|
||||
background: #7f8891 ;
|
||||
}
|
||||
.container-large{
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
}
|
||||
.col{
|
||||
padding: 0px;
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
.card{
|
||||
padding: 10px;
|
||||
}
|
||||
.row{
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
.logo{
|
||||
width: 250px;
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
|
||||
.content{ flex-grow: 1; }
|
||||
|
||||
.gallery{
|
||||
background-color: white;
|
||||
margin-bottom: 50px;
|
||||
box-shadow: 10px 10px 5px black;
|
||||
}
|
||||
|
||||
.bg-custom{
|
||||
background-color:#130f40;
|
||||
}
|
||||
.button-fixed{
|
||||
bottom: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.fas{
|
||||
cursor: pointer;
|
||||
font-size: 24px;
|
||||
}
|
||||
p{
|
||||
font-size: 14px;
|
||||
}
|
||||
/* The sidepanel menu */
|
||||
.sidepanel {
|
||||
height: 100%; /* Specify a height */
|
||||
width: 0; /* 0 width - change this with JavaScript */
|
||||
position: fixed; /* Stay in place */
|
||||
z-index: 1; /* Stay on top */
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: #111; /* Black*/
|
||||
overflow-x: hidden; /* Disable horizontal scroll */
|
||||
padding-top: 60px; /* Place content 60px from the top */
|
||||
transition: 0.5s; /* 0.5 second transition effect to slide in the sidepanel */
|
||||
}
|
||||
|
||||
/* The sidepanel links */
|
||||
.sidepanel a {
|
||||
padding: 8px 8px 8px 32px;
|
||||
text-decoration: none;
|
||||
font-size: 25px;
|
||||
color: #818181;
|
||||
display: block;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
/* When you mouse over the navigation links, change their color */
|
||||
.sidepanel a:hover {
|
||||
color: #f1f1f1;
|
||||
}
|
||||
|
||||
/* Position and style the close button (top right corner) */
|
||||
.sidepanel .closebtn {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 25px;
|
||||
font-size: 36px;
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
/* Style the button that is used to open the sidepanel */
|
||||
.openbtn {
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
background-color: #111;
|
||||
color: white;
|
||||
padding: 10px 15px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.openbtn:hover {
|
||||
background-color: #444;
|
||||
}
|
||||
|
||||
.reveal-if-active {
|
||||
opacity: 0;
|
||||
max-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.text-black{
|
||||
color:black;
|
||||
}
|
||||
.form-check-input{
|
||||
margin-left:0;
|
||||
padding:inherit;
|
||||
}
|
||||
|
||||
input[type="radio"]:checked ~ .reveal-if-active,
|
||||
input[type="checkbox"]:checked ~ .reveal-if-active {
|
||||
opacity: 1;
|
||||
max-height: 100px; /* little bit of a magic number :( */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6, p, label{
|
||||
font-family: 'Josefin Sans', sans-serif;=
|
||||
}
|
||||
|
||||
h1{
|
||||
color: white;
|
||||
}
|
||||
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
168
routes/admin.js
Normal file
168
routes/admin.js
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
const express = require('express');
|
||||
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 flash = require ('connect-flash');
|
||||
const expressValidator = require('express-validator');
|
||||
const session = require('express-session');
|
||||
const {postUser} = require('../helpers/functions.js')
|
||||
const got = require('got')
|
||||
console.log('Sen was here')
|
||||
router.get('/', checkAdmin, function(req, res){
|
||||
res.render('adminsettings', {
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
|
||||
router.post('/user',checkAdmin , async function(req,res){
|
||||
let {name, init_pass, init_bal, password2} = req.body
|
||||
let contains = await got(process.env.BANKAPIURL+'BankF/contains/'+name)
|
||||
contains = JSON.parse(contains.body).value
|
||||
let errors = [];
|
||||
let successes = [];
|
||||
if(contains == true){
|
||||
errors.push({msg: 'User already exists'})
|
||||
res.render('adminsettings',{
|
||||
errors:errors
|
||||
})
|
||||
}else {
|
||||
if(!name || !init_pass || !init_bal || !password2) {
|
||||
errors.push({msg : "please fill in all fields"});
|
||||
}
|
||||
//check if match
|
||||
if(init_pass !== password2) {
|
||||
errors.push({msg : "Passwords don't match"});
|
||||
}
|
||||
|
||||
//check if password is more than 6 characters
|
||||
if(init_pass.length < 6 ) {
|
||||
errors.push({msg : 'Password must be at least 6 characters'})
|
||||
}
|
||||
let post;
|
||||
let successes = [];
|
||||
try{
|
||||
post = await got.post(process.env.BANKAPIURL+'BankF/admin/user',{
|
||||
json:{
|
||||
name: name,
|
||||
attempt: req.session.adminp,
|
||||
init_bal: parseInt(init_bal),
|
||||
init_pass: init_pass,
|
||||
},
|
||||
responseType:'json'
|
||||
})
|
||||
} catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
if(post.body.value == true){
|
||||
successes.push({msg: "Account Creation Successful"})
|
||||
}
|
||||
}
|
||||
res.render('adminsettings',{
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
successes: successes,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
router.post('/baluser',checkAdmin , async function(req,res){
|
||||
let {name} = req.body
|
||||
let balance;
|
||||
let successes = [];
|
||||
let errors = [];
|
||||
try{
|
||||
balance = await got(process.env.BANKAPIURL+'BankF/'+name+'/bal')
|
||||
balance = JSON.parse(balance.body)
|
||||
} catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
if(balance.value == -1 || balance.value == undefined){
|
||||
errors.push({msg: "User not found"})
|
||||
}else{
|
||||
successes.push({msg: "User: "+name+" has "+balance.value+" monies"})
|
||||
}
|
||||
res.render('adminsettings',{
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
successes: successes,
|
||||
errors: errors,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
router.post('/bal',checkAdmin , async function(req,res){
|
||||
let {name, amount} = req.body
|
||||
let patch;
|
||||
let successes = [];
|
||||
try{
|
||||
patch = await got.patch(process.env.BANKAPIURL+'BankF/admin/'+name+'/bal',{
|
||||
json:{
|
||||
name: name,
|
||||
attempt: req.session.adminp,
|
||||
amount: parseInt(amount),
|
||||
},
|
||||
responseType:'json'
|
||||
})
|
||||
} catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
if(patch.body.value == true){
|
||||
successes.push({msg: "Change Funds Successful"})
|
||||
}
|
||||
res.render('adminsettings',{
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
successes: successes,
|
||||
})
|
||||
})
|
||||
router.post('/userdelete', checkAdmin, async function(req,res){
|
||||
let {name, attempt} = req.body
|
||||
console.log(name)
|
||||
let contains = await got(process.env.BANKAPIURL+'BankF/contains/'+name)
|
||||
contains = JSON.parse(contains.body).value
|
||||
let deleteUser;
|
||||
let successes = [];
|
||||
let errors = [];
|
||||
if(attempt != req.session.adminp){
|
||||
errors.push({msg:"Wrong Admin Password"})
|
||||
}
|
||||
console.log(contains)
|
||||
if(contains == true){
|
||||
deleteUser = got.delete(process.env.BANKAPIURL+'BankF/admin/user',{
|
||||
json:{
|
||||
name: name,
|
||||
attempt: attempt,
|
||||
},
|
||||
responseType:'json'
|
||||
})
|
||||
successes.push({msg: "User Deletion Successful"})
|
||||
} else{
|
||||
errors.push({msg: "User Deletion Failed, User Not Found"})
|
||||
}
|
||||
res.render('adminsettings',{
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
successes: successes,
|
||||
errors: errors,
|
||||
})
|
||||
})
|
||||
router.post('/close', checkAdmin, async function(req,res){
|
||||
let {attempt} = req.body;
|
||||
let close;
|
||||
close = got.post(process.env.BANKAPIURL+'BankF/admin/close', {
|
||||
json:{
|
||||
attempt: attempt,
|
||||
},
|
||||
responseType:'json'
|
||||
})
|
||||
res.redirect('../')
|
||||
})
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
||||
73
routes/settings.js
Normal file
73
routes/settings.js
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
const express = require('express');
|
||||
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 flash = require ('connect-flash');
|
||||
const expressValidator = require('express-validator');
|
||||
const session = require('express-session');
|
||||
const {postUser} = require('../helpers/functions.js')
|
||||
const got = require('got')
|
||||
|
||||
router.get('/',ensureAuthenticated , function(req, res){
|
||||
res.render('settings', {
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
router.post('/pass', ensureAuthenticated, async function(req, res){
|
||||
let {attempt, new_pass, password2} = req.body
|
||||
let patch;
|
||||
let successes = [];
|
||||
let errors = [];
|
||||
if(!attempt || !new_pass || !password2) {
|
||||
errors.push({msg : "please fill in all fields"});
|
||||
}
|
||||
//check if match
|
||||
if(new_pass !== password2) {
|
||||
errors.push({msg : "Passwords don't match"});
|
||||
}
|
||||
|
||||
//check if password is more than 6 characters
|
||||
if(new_pass.length < 6 ) {
|
||||
errors.push({msg : 'Password must be at least 6 characters'})
|
||||
}
|
||||
if(errors[0]){
|
||||
res.render('settings', {
|
||||
errors:errors,
|
||||
user: req.session.user,
|
||||
admin: req.session.admin,
|
||||
})
|
||||
}
|
||||
try{
|
||||
patch = await got.patch('https://ccash.ryzerth.com/BankF/changepass',{
|
||||
json:{
|
||||
name: req.session.user,
|
||||
attempt: attempt,
|
||||
new_pass: new_pass,
|
||||
},
|
||||
responseType:'json'
|
||||
})
|
||||
} catch(err){
|
||||
console.log(err)
|
||||
}
|
||||
console.log(patch)
|
||||
if(patch.body.value == true){
|
||||
successes.push({msg: "Change Password Successful, Please Login Again"})
|
||||
}
|
||||
req.session.regenerate(function(err) {
|
||||
res.render('login', {
|
||||
successes: successes,
|
||||
errors:errors,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
||||
68
views/adminsettings.pug
Normal file
68
views/adminsettings.pug
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
extends layout
|
||||
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Settings, logged in as: #{user}
|
||||
if admin == true
|
||||
br
|
||||
.card
|
||||
center
|
||||
h4 here are your settings king
|
||||
br
|
||||
.card
|
||||
h4 Add User
|
||||
form(method='POST', action='/admin/user')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='name')
|
||||
label Starting balance:
|
||||
input.form-control(name='init_bal', type='number')
|
||||
label Password:
|
||||
input.form-control(name='init_pass',type='password')
|
||||
label Confirm:
|
||||
input.form-control(name='password2',type='password')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
br
|
||||
.card
|
||||
h4 Check User Balance
|
||||
form(method='POST', action='/admin/baluser')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='name')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
br
|
||||
.card
|
||||
h4 Change Balance of User
|
||||
form(method='POST', action='/admin/bal')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='name')
|
||||
label Set balance to:
|
||||
input.form-control(name='amount', type='number')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
br
|
||||
.card
|
||||
h4 Delete user
|
||||
p This will permanently delete user make sure you get it right
|
||||
form(method='POST', action='/admin/userdelete')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='name')
|
||||
label Confirm Admin Password:
|
||||
input.form-control(name='attempt', type='password')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
br
|
||||
.card
|
||||
h4 Close Server
|
||||
form(method='POST', action='/admin/close')
|
||||
#form-group
|
||||
p WARNING THIS WILL CLOSE THE SERVER DOWN, IT WILL REQUIRE MANUAL RESTART
|
||||
label Confirm admin password to shutdown
|
||||
input.form-control(name='attempt', type='password')
|
||||
br
|
||||
input.btn.btn-danger(type='submit',value='Shutdown')
|
||||
29
views/bankf.pug
Normal file
29
views/bankf.pug
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
extends layout
|
||||
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Welcome to the bank interface #{user}
|
||||
.card
|
||||
h2 Send Funds
|
||||
|
||||
h4 Balance: #{balance}
|
||||
|
||||
form(method='POST', action='/sendfunds')
|
||||
#form-group
|
||||
label amount to send:
|
||||
input(type="number" min="0" max=balance name="amount")
|
||||
br
|
||||
#form-group
|
||||
label reciever:
|
||||
input(name='name', type='text')
|
||||
br
|
||||
#form-group
|
||||
label Your Password:
|
||||
input(name='senderpass', type='password')
|
||||
br
|
||||
br
|
||||
|
||||
|
||||
input.btn.btn-primary(type='submit', value='Submit')
|
||||
br
|
||||
13
views/index.pug
Normal file
13
views/index.pug
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
extends layout
|
||||
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Welcome to CCashBank Front End
|
||||
.card
|
||||
center
|
||||
h4 Is the server online?
|
||||
if alive
|
||||
h4 YES!
|
||||
if !alive
|
||||
H4 no :(
|
||||
52
views/layout.pug
Normal file
52
views/layout.pug
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
doctype html
|
||||
html
|
||||
head
|
||||
title CCashBank
|
||||
link(href="https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet")
|
||||
link(rel="stylesheet", href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css", integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z", crossorigin="anonymous")
|
||||
link(rel='stylesheet' href='/css/style.css')
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1.0')
|
||||
body
|
||||
nav.navbar.navbar-expand-lg.navbar-light.bg-light
|
||||
.container
|
||||
a.navbar-brand(href='/')
|
||||
img(src="./CCashLogo2.png" style="width:75px")
|
||||
button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbars', aria-controls='navbars', aria-expanded='false', aria-label='Toggle navigation')
|
||||
span.navbar-toggler-icon
|
||||
#navbars.collapse.navbar-collapse
|
||||
ul.navbar-nav.mr-auto
|
||||
|
||||
ul.navbar-nav.mr-right
|
||||
if user == undefined
|
||||
li.nav-item
|
||||
a.nav-link(href='/login') Login
|
||||
li.nav-item
|
||||
a.nav-link(href='/register') Register
|
||||
if user
|
||||
li.nav-item
|
||||
a.nav-link(href='/logout') Log out
|
||||
li.nav-item
|
||||
a.nav-link(href='/BankF') Bank Dashboard
|
||||
li.nav-item
|
||||
a.nav-link(href='/settings') Settings
|
||||
if admin == true
|
||||
li.nav-item
|
||||
a.nav-link(href='/admin') Admin
|
||||
.container
|
||||
!= messages('message', locals)
|
||||
if errors
|
||||
each error, i in errors
|
||||
div(class="alert alert-danger") #{error.msg}
|
||||
if successes
|
||||
each success, i in successes
|
||||
div(class="alert alert-success") #{success.msg}
|
||||
br
|
||||
br
|
||||
block content
|
||||
br
|
||||
hr
|
||||
|
||||
script(src="https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI="
|
||||
crossorigin="anonymous")
|
||||
|
||||
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js", integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV", crossorigin="anonymous")
|
||||
20
views/login.pug
Normal file
20
views/login.pug
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Login
|
||||
hr
|
||||
p
|
||||
form(method='POST', action='/login')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='text')
|
||||
br
|
||||
#form-group
|
||||
label Password:
|
||||
input.form-control(name='password', type='password')
|
||||
br
|
||||
|
||||
|
||||
input.btn.btn-primary(type='submit', value='Submit')
|
||||
|
||||
20
views/register.pug
Normal file
20
views/register.pug
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Register
|
||||
form(method='POST', action='/register')
|
||||
#form-group
|
||||
label Username:
|
||||
input.form-control(name='name', type='name')
|
||||
label Password:
|
||||
input.form-control(name='password',type='password')
|
||||
label Confirm:
|
||||
input.form-control(name='password2',type='password')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
|
||||
br
|
||||
br
|
||||
p Have An Account?
|
||||
a(href="/login").btn.btn-primary Login
|
||||
18
views/settings.pug
Normal file
18
views/settings.pug
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
extends layout
|
||||
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Settings, logged in as: #{user}
|
||||
.card
|
||||
h4 Change password
|
||||
form(method='POST', action='/settings/pass')
|
||||
#form-group
|
||||
label Current Password:
|
||||
input.form-control(name='attempt', type='Password')
|
||||
label New Password:
|
||||
input.form-control(name='new_pass',type='password')
|
||||
label Confirm:
|
||||
input.form-control(name='password2',type='password')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
18
views/setup.pug
Normal file
18
views/setup.pug
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
extends layout
|
||||
|
||||
|
||||
block content
|
||||
.container
|
||||
h1 Welcome to CCashBank Front End SETUP
|
||||
.card
|
||||
form(method='POST', action='/setup')
|
||||
#form-group
|
||||
label BANKAPIURL:
|
||||
input.form-control(name='url', type='url')
|
||||
label SSH enabled on front end? leave unchecked if unsure:
|
||||
input.form-control(name='secure', type='checkbox')
|
||||
br
|
||||
input.btn.btn-primary(type='submit',value='Submit')
|
||||
br
|
||||
br
|
||||
h2 THESE SETTINGS WILL REQUIRE A RESTART TO APPLY
|
||||
Loading…
Reference in a new issue