diff --git a/foftickets.js b/foftickets.js index c8b7c07..df42200 100644 --- a/foftickets.js +++ b/foftickets.js @@ -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("