changes
This commit is contained in:
@@ -27,9 +27,11 @@ const QRSalt ="!SaltyMagic5392370662";
|
||||
// + Claim Any Tickets
|
||||
// + Purge Revoked Function (Admin)
|
||||
// + Issue Tickets from Camp Admin Page
|
||||
// Make one Update button on manytickets (User)
|
||||
// Make one Update button on editcamp (Admin)
|
||||
// Send email when new tickets are issued/offered
|
||||
// + 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
|
||||
// Deactivate individual magic links (User)
|
||||
// Deactivate individual magic links (Admin)
|
||||
@@ -39,8 +41,9 @@ const QRSalt ="!SaltyMagic5392370662";
|
||||
// + Use a templating engine
|
||||
// + Store password hashed and salted
|
||||
// Make all HTML look nice
|
||||
// Logging and Replay system
|
||||
// Logging and Replay system(?)
|
||||
// Stripe Integration
|
||||
// More efficent data structure: TicketsByCamp, TicketsByOffered, TicketsByOwner
|
||||
//
|
||||
|
||||
//
|
||||
@@ -110,6 +113,7 @@ function MagicLinkValid(email,hash) {
|
||||
const users={};
|
||||
const tickets={};
|
||||
const camps={};
|
||||
const settings={};
|
||||
|
||||
function InitDatabase() {
|
||||
for (const key in users ) delete users[key];
|
||||
@@ -206,6 +210,7 @@ app.post("/camps",requireSuperUser,(req,res) => {
|
||||
|
||||
app.get('/editcamp', requireSuperUser, (req,res) => {
|
||||
let campname=req.query.campname;
|
||||
if (!camps[campname]) return res.redirect("/");
|
||||
const edit={ username:req.session.username, superuser:req.session.superuser, campname:campname, leader:camps[campname].leader, tickets: {} };
|
||||
for (const t in tickets) {
|
||||
const parts=t.split("-");
|
||||
@@ -328,6 +333,27 @@ app.post("/updateoffered2", requireLogin, (req,res) => {
|
||||
})
|
||||
|
||||
|
||||
app.post("/updateoffered2su", requireSuperUser, (req,res) => {
|
||||
const emaillist={};
|
||||
for (name in req.body) {
|
||||
let ticket=0;
|
||||
if (name.endsWith("-owner" )) { ticket=name.slice(0,-6); tickets[ticket].owner =req.body[name]; }
|
||||
else if (name.endsWith("-status" )) { ticket=name.slice(0,-7); tickets[ticket].status =req.body[name]; }
|
||||
else if (name.endsWith("-offered")) {
|
||||
ticket=name.slice(0,-8);
|
||||
if (tickets[ticket].offered!=req.body[name]) {
|
||||
tickets[ticket].offered=req.body[name];
|
||||
emaillist[req.body[name]]=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (email in emaillist) EmailTickets(email);
|
||||
const referer = req.get('Referer');
|
||||
if (referer) return res.redirect(referer);
|
||||
else return res.redirect('/');
|
||||
})
|
||||
|
||||
|
||||
app.post("/updateticketsu", requireSuperUser, (req,res) => {
|
||||
const ticket=req.body.ticket;
|
||||
const owner=req.body.owner;
|
||||
@@ -344,13 +370,16 @@ app.get("/useticket",(req,res) => {
|
||||
if (!tickets[ticket]) return res.status(500).send("Ticket "+ticket+" not found.");
|
||||
if (hashQR(ticket,tickets[ticket].owner)!=hash) return res.status(500).send("Ticket "+ticket+" was transferred to "+tickets[ticket].owner);
|
||||
if (tickets[ticket].status!="i") return res.status(500).send("Ticket "+ticket+" has already been used.");
|
||||
tickets[ticket].status="u"; // LOG
|
||||
return res.send("<h1>Welcome, "+tickets[ticket].owner+" to Falls on Fire! Ticket "+ticket+" has now been used.</h1>");
|
||||
})
|
||||
if (settings['enable-email']) {
|
||||
tickets[ticket].status="u"; // LOG
|
||||
return res.send("<h1>Welcome, "+tickets[ticket].owner+" to Falls on Fire! Ticket "+ticket+" has now been used.</h1>");
|
||||
} else return res.send("<h1>Your ticket is good, "+tickets[ticket].owner+", but the server is not in Event Mode, so Ticket "+ticket+" is still valid.");
|
||||
})
|
||||
|
||||
|
||||
|
||||
async function EmailTickets(email) {
|
||||
if (!settings['enable-email']) return;
|
||||
let offered=0;
|
||||
for (const ticket in tickets) if (tickets[ticket].offered==email) offered++;
|
||||
if (offered==0) return;
|
||||
@@ -505,6 +534,11 @@ app.post('/purge',requireSuperUser, (req,res) => {
|
||||
res.render('settings',{ username:req.session.username, superuser:req.session.superuser, message: "Purged "+count+" revoked tickets" })
|
||||
});
|
||||
|
||||
app.post('/update-setting', requireSuperUser, (req, res) => {
|
||||
settings[req.body.name]=req.body.checked;
|
||||
res.json({ success: true, message: 'Checkbox state updated successfully' });
|
||||
});
|
||||
|
||||
|
||||
// Start the server
|
||||
app.listen(PORT, () => {
|
||||
|
||||
Reference in New Issue
Block a user