81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
|
|
// Load WebServer
|
|
import {
|
|
default as express
|
|
} from "express";
|
|
|
|
// Load Templating Engine
|
|
import {
|
|
default as nunjucks
|
|
} from "nunjucks";
|
|
|
|
import {
|
|
router
|
|
} from "express-file-routing"
|
|
|
|
const {
|
|
User,
|
|
Group
|
|
} = await import("./lib/database/connect.mjs");
|
|
|
|
import sessions from "express-session";
|
|
|
|
// Initialize WebServer
|
|
const expressApp = express();
|
|
const expressPort = 3000;
|
|
|
|
// Configure Templating Engine
|
|
nunjucks.configure('./', {
|
|
autoescape: false,
|
|
express: expressApp,
|
|
noCache: true
|
|
});
|
|
|
|
// Enable Express Sessions
|
|
expressApp.use(sessions({
|
|
secret: 'keyboard cat',
|
|
resave: false,
|
|
rolling: true,
|
|
saveUninitialized: false,
|
|
cookie: {
|
|
secure: false,
|
|
maxAge: 1800 * 1000,
|
|
httpOnly: true
|
|
}
|
|
}))
|
|
|
|
// Enable Cross Origins
|
|
expressApp.use((req, res, next) => {
|
|
res.header("Access-Control-Allow-Origin", "*");
|
|
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
|
|
res.header("Access-Control-Allow-Headers", "Content-Type, Authorization");
|
|
next();
|
|
});
|
|
|
|
// Mount Middlewares to WebServer
|
|
expressApp.use(express.urlencoded());
|
|
expressApp.use(express.json());
|
|
expressApp.use(express.static('./static/'))
|
|
expressApp.use((request, response, next) => {
|
|
request.getAuthState = () => {
|
|
if (!request.session && !request.session.authState) {
|
|
return 'unauthenticated';
|
|
} else {
|
|
return request.session.authState;
|
|
}
|
|
}
|
|
request.setAuthState = (newState) => {
|
|
request.session.authState = newState;
|
|
request.session.save();
|
|
}
|
|
request.getUser = async () => {
|
|
return await User.findByPk(request.session.userid);
|
|
}
|
|
next();
|
|
})
|
|
expressApp.use("/", await router())
|
|
|
|
// Server starten
|
|
expressApp.listen(expressPort, () => {
|
|
console.log(`Server is listening on port ${expressPort}`);
|
|
});
|