Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
106 lines (98 loc) · 4.76 KB
/
Copy pathserver.js
File metadata and controls
106 lines (98 loc) · 4.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
require("dotenv").config();
for (const name of ["MONGODB_URI", "SESSION_SECRET", "LICENSE_ENCRYPTION_KEY"]) {
if (!process.env[name]) throw new Error(`${name} is required. Copy .env.example to .env.`);
}
const express = require("express");
const mongoose = require("mongoose");
const expressSession = require("express-session");
const { MongoStore } = require("connect-mongo");
const { secureHeaders, loginRateLimit } = require("./middleware/securityMiddleware");
const csrfProtection = require("./middleware/csrfMiddleware");
const app = express();
app.set("view engine", "ejs");
app.set("trust proxy", process.env.NODE_ENV === "production" ? 1 : false);
app.use(secureHeaders);
app.use(express.json());
app.use(express.static("public"));
app.use(express.urlencoded({ extended: false }));
app.use(
expressSession({
store: MongoStore.create({ mongoUrl: process.env.MONGODB_URI }),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
maxAge: 7 * 24 * 60 * 60 * 1000,
sameSite: "lax",
secure: process.env.NODE_ENV === "production",
},
})
);
app.use(csrfProtection);
app.use((req, res, next) => {
res.locals.loggedIn = Boolean(req.session.userId);
res.locals.userType = req.session.userType || null;
res.locals.currentPath = req.path;
next();
});
const auth = require("./middleware/authMiddleware");
const redirectIfAuthenticated = require("./middleware/redirectIfAuthenticatedMiddleware");
const home = require("./controllers/home");
const gTestView = require("./controllers/gtest");
const g2TestView = require("./controllers/g2test");
const loginView = require("./controllers/login");
const signUpView = require("./controllers/signUp");
const appointmentView = require("./controllers/appointmentController");
const pageNotFoundView = require("./controllers/notFound");
const applicationError = require("./controllers/applicationError");
const createNewAccount = require("./controllers/createNewAccount");
const loginController = require("./controllers/loginUserAccount");
const modifyUserDetails = require("./controllers/modifyDetail");
const logoutController = require("./controllers/logout");
const addTimeSlot = require("./controllers/appointmentAvailability");
const checkAppointment = require("./controllers/checkAppointment");
const checkTimeSlot = require("./controllers/checkTimeSlot");
const examinerView = require("./controllers/examinerController");
const viewUserAppointment = require("./controllers/viewUserAppointmentDetails");
const examineUserAppointment = require("./controllers/examinUserAppointment");
const adminDriverView = require("./controllers/adminDriverViewController");
const vendorPrinting = require("./controllers/vendorPrintingController");
const account = require("./controllers/accountController");
app.get("/", home);
app.get("/signup", redirectIfAuthenticated, signUpView);
app.get("/login", redirectIfAuthenticated, loginView);
app.get("/recover", redirectIfAuthenticated, account.recoverView);
app.get("/account", auth.authUserMiddleware, account.view);
app.get("/g2", auth.driverMiddleware, g2TestView);
app.get("/g", auth.driverMiddleware, gTestView);
app.post("/auth/logout", logoutController);
app.get("/appointment", auth.adminMiddleware, appointmentView);
app.get("/examiner", auth.examinerMiddleware, examinerView);
app.get("/checkAppointment/:date", auth.authUserMiddleware, checkAppointment);
app.get("/checkTimeSlotAvailable/:date", auth.authUserMiddleware, checkTimeSlot);
app.get("/examiner/appointments/:id/:testType", auth.examinerMiddleware, viewUserAppointment);
app.get("/checkDriverStatus", auth.adminMiddleware, adminDriverView);
app.get("/admin/vendor/:id/:testType", auth.adminMiddleware, vendorPrinting);
app.post("/examiner/appointments/:id/:testType", auth.examinerMiddleware, examineUserAppointment);
app.post("/edit", auth.driverMiddleware, modifyUserDetails);
app.post("/admin/appointments", auth.adminMiddleware, addTimeSlot);
app.post("/users/register", redirectIfAuthenticated, createNewAccount);
app.post("/users/login", loginRateLimit, redirectIfAuthenticated, loginController);
app.post("/users/recover", loginRateLimit, redirectIfAuthenticated, account.recover);
app.post("/account/password", auth.authUserMiddleware, account.changePassword);
app.post("/account/recovery-code", auth.authUserMiddleware, account.generateRecoveryCode);
app.use(pageNotFoundView);
app.use(applicationError);
async function start() {
await mongoose.connect(process.env.MONGODB_URI);
const port = Number(process.env.PORT) || 4000;
app.listen(port, () => console.log(`DriveTest running at http://localhost:${port}`));
}
if (require.main === module) {
start().catch((error) => {
console.error("Startup failed:", error.message);
process.exitCode = 1;
});
}
module.exports = { app, start };