This commit is contained in:
2024-12-26 21:46:13 -05:00
parent 37eb7eebe8
commit 70f434cae3
5 changed files with 60 additions and 32 deletions

View File

@@ -229,7 +229,6 @@ app.get('/editcamp', requireSuperUser, (req,res) => {
const parts=t.split("-");
const cname=parts[0];
const tnum=Number(parts[1]);
console.log("Cname: ",cname," campname ",campname," tnum ",tnum);
if (cname==campname) {
edit.tickets[t]={};
edit.tickets[t].owner=tickets[t].owner;
@@ -237,12 +236,21 @@ app.get('/editcamp', requireSuperUser, (req,res) => {
edit.tickets[t].status=tickets[t].status;
}
}
console.log("Edit is ",edit);
return res.render("editcamp",edit);
})
app.get('/manytickets', requireLogin, (req,res) => {
let username=req.session.username;
const edit={ username:req.session.username, tickets: {} };
for (const t in tickets) if (tickets[t].owner==username && tickets[t].status=="i") {
edit.tickets[t]={};
edit.tickets[t].offered=tickets[t].offered;
}
return res.render("manytickets",edit);
})
app.get('/mytickets',requireLogin, (req,res)=> {
app.get('/mytickets',requireLogin, async (req,res)=> {
let username=req.session.username;
let claimed=0;
let owned=0;
@@ -259,10 +267,30 @@ app.get('/mytickets',requireLogin, (req,res)=> {
}
}
if (owned==0) return res.render("message",{ username:username, message:"You have no unused tickets" });
else if (owned==1) return res.render("oneticket",{ username:username, ticket:theticket, offered:tickets[theticket].offered });
else if (owned==1) {
const hash0=crypto.createHash('sha256');
const hash1=hash0.update(theticket+QRSalt);
const hash=hash1.digest("base64").slice(0,6);
const dataURL=await QRCode.toDataURL('localhost:3000/useticket?t='+theticket+'&h='+hashQR(theticket,username));
return res.render("oneticket",{ username:username, ticket:theticket, offered:tickets[theticket].offered, qrcode:dataURL });
}
else return res.render("manytickets",edit);
});
app.post('/mytickets',requireLogin, async (req,res)=> {
let username=req.session.username;
let theticket=req.body.ticket;
let offered=req.body.offered;
if (tickets[theticket].owner==username && tickets[theticket].status=="i") {
tickets[theticket].offered=offered;
}
const hash0=crypto.createHash('sha256');
const hash1=hash0.update(theticket+QRSalt);
const hash=hash1.digest("base64").slice(0,6);
const dataURL=await QRCode.toDataURL('localhost:3000/useticket?t='+theticket+'&h='+hashQR(theticket,username));
return res.render("oneticket", { username:username, ticket:theticket, offered:tickets[theticket].offered, qrcode:dataURL });
});
// Big Kahuna
// If you have zero tickets, show something saying that
// For each ticket owned, display options to offer it, use it, or (eventually) pay for it.
@@ -283,7 +311,7 @@ app.get('/transfer', requireLogin, async (req,res) => {
edit.tickets[t]={};
edit.tickets[t].owner=tickets[t].owner;
edit.tickets[t].offered=tickets[t].offered;
edit.tickets[t].used=tickets[t].used;
edit.tickets[t].used=tickets[t].status=="u";
}
return res.render("transfer",edit);
}
@@ -303,12 +331,6 @@ app.get('/transfer', requireLogin, async (req,res) => {
if (cat=="complex") return res.render('transfer',simpledata);
})
app.post("/toggle", requireSuperUser, (req,res) => {
const ticket=req.body.ticket;
const isChecked = req.body.checked;
tickets[ticket].used=isChecked;
res.json({ message: 'Checkbox state received', checked: isChecked });
})
app.post("/changestatus", requireSuperUser, (req,res) => {
const ticket=req.body.ticket;
@@ -322,7 +344,8 @@ app.post("/updateoffered", requireLogin, (req,res) => {
const ticket=req.body.ticket;
const offered=req.body.offered;
if (tickets[ticket].owner!=req.session.username) res.status(500).send("Ticket "+ticket+" owned by someone else");
else if (tickets[ticket].used) res.status(500).send("Ticket "+ticket+" has already been used");
else if (tickets[ticket].status=="u") res.status(500).send("Ticket "+ticket+" has already been used");
else if (tickets[ticket].status=="r") res.status(500).send("Ticket "+ticket+" was revoked");
else {
tickets[ticket].offered=offered;
res.json({ message: 'Updated owner of '+ticket+' to '+offered });
@@ -344,10 +367,10 @@ app.get("/useticket",(req,res) => {
let ticket=req.t;
let hash=req.h;
if (hashQR(ticket,req.session.username)!=hash) res.status(500).send("Ticket "+ticket+" was transferred to "+tickets[ticket].username);
else if (tickets[ticket].used) res.status(500).send("Ticket "+ticket+" has already been used.");
else if (tickets[ticket].status!="i") res.status(500).send("Ticket "+ticket+" has already been used.");
else {
tickets[ticket].used=new Date().toISOString();
res.send("<h1>Welcome, "+tickets[ticket].username+" to Falls on Fire! Ticket "+ticket+" has now been used.</h1>");
tickets[ticket].status="u";
res.send("<h1>Welcome, "+tickets[ticket].owner+" to Falls on Fire! Ticket "+ticket+" has now been used.</h1>");
}
})