changes
This commit is contained in:
@@ -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("/");
|
||||
|
||||
@@ -6,10 +6,22 @@
|
||||
<a href="/camps">View Camps (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>
|
||||
<%} else {%>
|
||||
<a href="/create">Create Account</a><br>
|
||||
<a href="/login">Log In</a><br>
|
||||
<%}%>
|
||||
</div>
|
||||
<div class="message" id="message">
|
||||
<% if (typeof message !== 'undefined') { %>
|
||||
<p><%= message %></p>
|
||||
<% if (typeof commonData.message !== 'undefined') { %>
|
||||
<p><%= commonData.message %></p>
|
||||
<% } %>
|
||||
</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'>
|
||||
<button type="submit" >Deserialize</button>
|
||||
</form>
|
||||
<form action="/importfb" method="post" enctype="multipart/form-data">
|
||||
<input type="file" name="file">
|
||||
<input type="submit" value="Upload">
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
|
||||
Reference in New Issue
Block a user