72 lines
2.8 KiB
JavaScript
72 lines
2.8 KiB
JavaScript
const express = require("express");
|
|
const sessions = require("express-session");
|
|
const bp = require("body-parser");
|
|
const path = require("path");
|
|
const DataBaseManager = require("../Database/DataBaseManager");
|
|
const AccountRoute = require("./Routes/AccountRoute");
|
|
const DashboardRoute = require("./Routes/DashboardRoute");
|
|
const { existsSync } = require("fs");
|
|
require("dotenv").config();
|
|
|
|
class ExpressManager{
|
|
/**@param {DataBaseManager} dbManager*/
|
|
constructor(dbManager){
|
|
this.db = dbManager;
|
|
|
|
this.app = express();
|
|
|
|
this.sessionMiddleware = sessions({
|
|
secret: process.env.SESSION_KEY,
|
|
saveUninitialized: false,
|
|
resave: false,
|
|
cookie: {maxAge: 24 * 60 * 60 * 1000}
|
|
});
|
|
|
|
this.app.use((req, res, next) => { this.logger(req, res, next) });
|
|
this.app.use(this.sessionMiddleware);
|
|
this.app.use((req, res, next) => { this.needAuth(req, res, next) });
|
|
this.app.use(bp.urlencoded({extended: false}));
|
|
this.app.use(express.json());
|
|
this.app.use(bp.json());
|
|
this.app.use(express.static(path.join(__dirname, process.env.FRONTEND_PATH || "./../../../frontend")));
|
|
console.log(path.join(__dirname, process.env.FRONTEND_PATH || "./../../../frontend"));
|
|
console.log(existsSync(path.join(__dirname, process.env.FRONTEND_PATH || "./../../../frontend")));
|
|
|
|
// Routen wo man für Angemeldet sein muss
|
|
this.authRoutes = [
|
|
"/api/dashboard",
|
|
"/dashboard"
|
|
];
|
|
|
|
// Routen Einbinden
|
|
this.app.use("/api/account/", new AccountRoute(this.db).router);
|
|
this.app.use("/api/dashboard/", new DashboardRoute(this.db).router);
|
|
}
|
|
|
|
/**@param {express.Request} req @param {express.Response} res @param {express.NextFunction} next*/
|
|
logger(req, res, next){
|
|
const date = new Date();
|
|
console.log(`${date.toTimeString().slice(0, 8)} | ${req.method} | ${req.url}`);
|
|
next();
|
|
}
|
|
|
|
/**@param {express.Request} req @param {express.Response} res @param {express.NextFunction} next*/
|
|
needAuth(req, res, next){
|
|
let isProtectedRoute = false;
|
|
this.authRoutes.forEach(route => {
|
|
if(req.url.startsWith(route)) isProtectedRoute = true;
|
|
});
|
|
|
|
// Geht zum Login wenn User versucht Routen aufzurufen wofür man angemeldet sein muss
|
|
if(isProtectedRoute && !req.session.user?.isSet) return res.redirect("/login");
|
|
|
|
// Geht zum Dashboard wenn der Nutzer versucht sich zu registrieren oder einzuloggen wenn er angemeldet ist
|
|
if(req.session.user?.isSet && (req.url.startsWith("/login") || req.url.startsWith("/register"))){
|
|
return res.redirect("/dashboard");
|
|
}
|
|
|
|
next();
|
|
}
|
|
}
|
|
|
|
module.exports = ExpressManager; |