This commit is contained in:
2025-03-03 21:36:38 -05:00
parent 99034772c3
commit 7eb5b42d99
3 changed files with 48 additions and 12 deletions

View File

@@ -6,17 +6,27 @@ const QRCode=require('qrcode');
const crypto=require('crypto');
const path=require('path');
const fs = require('fs');
const multer = require("multer");
const upload = multer();
const csvParse = require("csv-parse");
require('dotenv').config();
const port=process.env.PORT||3000;
const base_url = process.env.BASE_URL;
const stripe=require('stripe')(process.env.STRIPE_SECRET_KEY);
const app = express();
app.set('view engine','ejs');
app.use(express.json());
app.use(express.static('public'));
app.use(cookieParser());
app.use(session({
secret: 'supersecretkey',
resave: false,
saveUninitialized: false,
}));
const PORT = 3000;
const MainURL ="http://localhost:3000";
const PWSalt ="!SaltyMagic7283715374";
@@ -41,7 +51,7 @@ const QRSalt ="!SaltyMagic5392370662";
// + Turn ticket use on/off from Settings (Admin)
// + Turn email on/off from Settings (Admin)
// + Magic-link Login System
// Convert all the routes to use common.(user,superuser,
// Convert all the routes to use common.(user,superuser,etc)
// Display messages for all GET routes?
// Setting to deactivate transfers globally
// Option to "Email me my QR Code"
@@ -60,7 +70,7 @@ const QRSalt ="!SaltyMagic5392370662";
// + Store password hashed and salted
// Make all HTML look nice
// Logging and Replay system(?)
// Stripe Integration
// + Stripe Integration
// More efficent data structure: TicketsByCamp, TicketsByOffered, TicketsByOwner
//
@@ -124,18 +134,17 @@ function MagicLinkValid(email,hash) {
app.use((req, res, next) => {
console.log("Middleware! req.session=",req.session);
res.locals.commonData = {
username: req.username, // Attach user info if available
superuser: req.superuser,
error: req.session && req.session.error || null, // Flash error messages
success: req.session && req.session.success || null, // Flash success messages
message: req.session && req.session.message || null, // Flash success messages
};
// Clear session-based flash messages after use
if (req.session) {
delete req.session.error;
delete req.session.success;
delete req.session.message;
}
next();
});
@@ -192,11 +201,6 @@ function DeserializeAll() {
// Middleware setup
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'supersecretkey',
resave: false,
saveUninitialized: false,
}));
// Middleware to protect routes
function requireLogin(req, res, next) {
@@ -620,6 +624,22 @@ app.get('/settings',requireSuperUser, (req,res) => {
res.render('settings',{ username:req.session.username, superuser:req.session.superuser, settings:settings, message: "" })
});
app.post('/importfb',requireSuperUser,upload.single("file"),(req,res) => {
console.log("File name:", req.file.originalname);
const contents=req.file.buffer.toString();
csvParse.parse(contents, { columns: true, trim: true }, (err, records) => {
if (err) {
console.log("CSV Parsing Error:", err);
req.session.error="The CVS file did not parse correctly. Check console.";
return res.redirect("/settings");
}
console.log("Records:",records);
req.session.message="Imported Frostburn-style records.";
return res.redirect("/settings");
});
});
app.post('/wipedb',requireSuperUser, (req,res) => {
InitDatabase();
res.redirect("/");