From 0fb1e5583dcb82a44cc82e12d10d6a335b6102b4 Mon Sep 17 00:00:00 2001 From: Teppy Date: Sun, 29 Dec 2024 18:31:06 -0500 Subject: [PATCH] changes --- foftickets.js | 41 ++++++++++++++++++++++++++++++++++------- views/settings.ejs | 6 ++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/foftickets.js b/foftickets.js index 1342b0d..9baa922 100644 --- a/foftickets.js +++ b/foftickets.js @@ -4,6 +4,7 @@ const session = require('express-session'); const QRCode=require('qrcode'); const crypto=require('crypto'); const path=require('path'); +const fs = require('fs'); const app = express(); app.set('view engine','ejs'); @@ -30,9 +31,9 @@ const QRSalt ="!SaltyMagic5392370662"; // + Send email when new tickets are issued/offered // + Make one Update button on editcamp (Admin) // + Make one Update button on manytickets (User) -// Turn ticket use on/off from Settings (Admin) -// Turn email on/off from Settings (Admin) -// Magic-link Login System +// + Turn ticket use on/off from Settings (Admin) +// + Turn email on/off from Settings (Admin) +// + Magic-link Login System // Deactivate individual magic links (User) // Deactivate individual magic links (Admin) // See how much each camp/ticket has paid (Admin) @@ -118,10 +119,10 @@ function MagicLinkValid(email,hash) { // }; // const camps = { "habitat": { leader: "teppy@egenesis.com", lastid:6 } }; -const users={}; -const tickets={}; -const camps={}; -const settings={}; +let users={}; +let tickets={}; +let camps={}; +let settings={}; function InitDatabase() { for (const key in users ) delete users[key]; @@ -132,6 +133,22 @@ function InitDatabase() { } InitDatabase(); +function SerializeAll() { + const tables={ users, tickets, camps, settings }; + fs.writeFileSync('foftickets.json', JSON.stringify(tables, null, 2), 'utf8'); + } + +function DeserializeAll() { + const data = fs.readFileSync('foftickets.json', 'utf8'); + const tables = JSON.parse(data); + users=tables.users; + tickets=tables.tickets; + camps=tables.camps; + settings=tables.settings; + } + + + // Middleware setup app.use(bodyParser.urlencoded({ extended: true })); app.use(session({ @@ -542,6 +559,16 @@ app.post('/wipedb',requireSuperUser, (req,res) => { res.render('settings',{ username:req.session.username, superuser:req.session.superuser, message: "Wiped the database, but not the logfile." }) }); +app.post('/serialize',requireSuperUser, (req,res) => { + SerializeAll(); + res.render('settings',{ username:req.session.username, superuser:req.session.superuser, message: "Wrote database to disk." }) + }); + +app.post('/deserialize',requireSuperUser, (req,res) => { + DeserializeAll(); + res.render('settings',{ username:req.session.username, superuser:req.session.superuser, message: "Read database from disk." }) + }); + app.post('/purge',requireSuperUser, (req,res) => { let count=0; for (const t in tickets) if (tickets[t].status=='r') { count++; delete tickets[t]; } diff --git a/views/settings.ejs b/views/settings.ejs index 80acf37..02cf81f 100644 --- a/views/settings.ejs +++ b/views/settings.ejs @@ -16,6 +16,12 @@
+
+ +
+
+ +