changes
This commit is contained in:
@@ -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>");
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
|
||||
.qrcode-image {
|
||||
object-fit: contain;
|
||||
width: 80%; /* Adjust as needed */
|
||||
height: 80%;
|
||||
grid-column:2;
|
||||
}
|
||||
|
||||
/* Close button */
|
||||
@@ -37,24 +36,25 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.grid {
|
||||
}
|
||||
|
||||
|
||||
/* General Reset */
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex; /* Ensure the body uses a flex container */
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 3fr;
|
||||
height: 100vh; /* Full viewport height */
|
||||
}
|
||||
|
||||
/* Sidebar (Nav Links) */
|
||||
.nav-links {
|
||||
width: 250px; /* Set a fixed width for the sidebar */
|
||||
background-color: #f4f4f4; /* Light gray background */
|
||||
padding: 20px;
|
||||
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); /* Add a slight shadow for separation */
|
||||
display: flex;
|
||||
flex-direction: column; /* Ensure items stack vertically */
|
||||
justify-content: flex-start; /* Optional: adjust spacing of items */
|
||||
grid-column: 1;
|
||||
min-height: 100vh; /* Stretch to full viewport height */
|
||||
}
|
||||
|
||||
@@ -77,6 +77,7 @@ body {
|
||||
}
|
||||
|
||||
.content {
|
||||
grid-column: 2;
|
||||
flex-grow: 1; /* Allow content to fill the remaining space */
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<title>Camps</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<body class="grid">
|
||||
<%- include('partials/nav') %>
|
||||
<form id="editor" method="post">
|
||||
<table border="1">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<title>Edit Camp</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<body class="grid">
|
||||
<%- include('partials/nav') %>
|
||||
<div id="QRShow" class="modal">
|
||||
<div id="QRBackground" class="modal-content">
|
||||
|
||||
@@ -4,14 +4,18 @@
|
||||
<title>Your Ticket</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<%- include('partials/nav') %>
|
||||
<body>
|
||||
<form id="editor">
|
||||
Transfer Ticket:
|
||||
<input type="edit" placeholder="yourfriend@xyz.com" value="<%=offered%>" id="offered">
|
||||
<button id="Submit" type="button">Transfer</button>
|
||||
<br>
|
||||
</form>
|
||||
<img width=300 height=300 src="https://via.placeholder.com/150" alt="Placeholder Image">
|
||||
<%- include('partials/nav') %>
|
||||
<div class="content">
|
||||
To use <%=ticket%>, scan this QR Code:<br>
|
||||
<img class="qrcode-image" width=300 height=300 src="<%=qrcode%>" alt="QR Code">
|
||||
<form id="editor" method="POST">
|
||||
Or transfer <%=ticket%> to:<br>
|
||||
<input type="hidden" name="ticket" value="<%=ticket%>">
|
||||
<input type="email" placeholder="yourfriend@xyz.com" value="<%=offered%>" name="offered">
|
||||
<button id="Submit" type="submit">Transfer</button>
|
||||
<br>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user