changes
This commit is contained in:
@@ -6,17 +6,27 @@ const QRCode=require('qrcode');
|
|||||||
const crypto=require('crypto');
|
const crypto=require('crypto');
|
||||||
const path=require('path');
|
const path=require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const multer = require("multer");
|
||||||
|
const upload = multer();
|
||||||
|
const csvParse = require("csv-parse");
|
||||||
require('dotenv').config();
|
require('dotenv').config();
|
||||||
const port=process.env.PORT||3000;
|
const port=process.env.PORT||3000;
|
||||||
const base_url = process.env.BASE_URL;
|
const base_url = process.env.BASE_URL;
|
||||||
const stripe=require('stripe')(process.env.STRIPE_SECRET_KEY);
|
const stripe=require('stripe')(process.env.STRIPE_SECRET_KEY);
|
||||||
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
app.set('view engine','ejs');
|
app.set('view engine','ejs');
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.static('public'));
|
app.use(express.static('public'));
|
||||||
app.use(cookieParser());
|
app.use(cookieParser());
|
||||||
|
|
||||||
|
app.use(session({
|
||||||
|
secret: 'supersecretkey',
|
||||||
|
resave: false,
|
||||||
|
saveUninitialized: false,
|
||||||
|
}));
|
||||||
|
|
||||||
const PORT = 3000;
|
const PORT = 3000;
|
||||||
const MainURL ="http://localhost:3000";
|
const MainURL ="http://localhost:3000";
|
||||||
const PWSalt ="!SaltyMagic7283715374";
|
const PWSalt ="!SaltyMagic7283715374";
|
||||||
@@ -41,7 +51,7 @@ const QRSalt ="!SaltyMagic5392370662";
|
|||||||
// + Turn ticket use on/off from Settings (Admin)
|
// + Turn ticket use on/off from Settings (Admin)
|
||||||
// + Turn email on/off from Settings (Admin)
|
// + Turn email on/off from Settings (Admin)
|
||||||
// + Magic-link Login System
|
// + 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?
|
// Display messages for all GET routes?
|
||||||
// Setting to deactivate transfers globally
|
// Setting to deactivate transfers globally
|
||||||
// Option to "Email me my QR Code"
|
// Option to "Email me my QR Code"
|
||||||
@@ -60,7 +70,7 @@ const QRSalt ="!SaltyMagic5392370662";
|
|||||||
// + Store password hashed and salted
|
// + Store password hashed and salted
|
||||||
// Make all HTML look nice
|
// Make all HTML look nice
|
||||||
// Logging and Replay system(?)
|
// Logging and Replay system(?)
|
||||||
// Stripe Integration
|
// + Stripe Integration
|
||||||
// More efficent data structure: TicketsByCamp, TicketsByOffered, TicketsByOwner
|
// More efficent data structure: TicketsByCamp, TicketsByOffered, TicketsByOwner
|
||||||
//
|
//
|
||||||
|
|
||||||
@@ -124,18 +134,17 @@ function MagicLinkValid(email,hash) {
|
|||||||
|
|
||||||
|
|
||||||
app.use((req, res, next) => {
|
app.use((req, res, next) => {
|
||||||
console.log("Middleware! req.session=",req.session);
|
|
||||||
res.locals.commonData = {
|
res.locals.commonData = {
|
||||||
username: req.username, // Attach user info if available
|
username: req.username, // Attach user info if available
|
||||||
superuser: req.superuser,
|
superuser: req.superuser,
|
||||||
error: req.session && req.session.error || null, // Flash error messages
|
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
|
// Clear session-based flash messages after use
|
||||||
if (req.session) {
|
if (req.session) {
|
||||||
delete req.session.error;
|
delete req.session.error;
|
||||||
delete req.session.success;
|
delete req.session.message;
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@@ -192,11 +201,6 @@ function DeserializeAll() {
|
|||||||
|
|
||||||
// Middleware setup
|
// Middleware setup
|
||||||
app.use(bodyParser.urlencoded({ extended: true }));
|
app.use(bodyParser.urlencoded({ extended: true }));
|
||||||
app.use(session({
|
|
||||||
secret: 'supersecretkey',
|
|
||||||
resave: false,
|
|
||||||
saveUninitialized: false,
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Middleware to protect routes
|
// Middleware to protect routes
|
||||||
function requireLogin(req, res, next) {
|
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: "" })
|
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) => {
|
app.post('/wipedb',requireSuperUser, (req,res) => {
|
||||||
InitDatabase();
|
InitDatabase();
|
||||||
res.redirect("/");
|
res.redirect("/");
|
||||||
|
|||||||
@@ -6,10 +6,22 @@
|
|||||||
<a href="/camps">View Camps (Admin)</a><br>
|
<a href="/camps">View Camps (Admin)</a><br>
|
||||||
<a href="/settings">Settings (Admin)</a><br>
|
<a href="/settings">Settings (Admin)</a><br>
|
||||||
<%}%>
|
<%}%>
|
||||||
|
<%if (typeof username!='undefined' && username) {%>
|
||||||
|
<a href="/changepassword">Change Password</a><br>
|
||||||
<a href="/logout">Log Out</a><br>
|
<a href="/logout">Log Out</a><br>
|
||||||
|
<%} else {%>
|
||||||
|
<a href="/create">Create Account</a><br>
|
||||||
|
<a href="/login">Log In</a><br>
|
||||||
|
<%}%>
|
||||||
</div>
|
</div>
|
||||||
<div class="message" id="message">
|
<div class="message" id="message">
|
||||||
<% if (typeof message !== 'undefined') { %>
|
<% if (typeof commonData.message !== 'undefined') { %>
|
||||||
<p><%= message %></p>
|
<p><%= commonData.message %></p>
|
||||||
<% } %>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
|
<% if (commonData.error) { %>
|
||||||
|
<div id="errorModal">
|
||||||
|
<p><%= commonData.error %></p>
|
||||||
|
<button onclick="document.getElementById('errorModal').style.display='none'">Close</button>
|
||||||
|
</div>
|
||||||
|
<% } %>
|
||||||
|
|||||||
@@ -23,6 +23,10 @@
|
|||||||
<form action='/deserialize' method='post'>
|
<form action='/deserialize' method='post'>
|
||||||
<button type="submit" >Deserialize</button>
|
<button type="submit" >Deserialize</button>
|
||||||
</form>
|
</form>
|
||||||
|
<form action="/importfb" method="post" enctype="multipart/form-data">
|
||||||
|
<input type="file" name="file">
|
||||||
|
<input type="submit" value="Upload">
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
Reference in New Issue
Block a user