Setup logger, configloader, middleware & endpoints
This commit is contained in:
23
api/webserver/middleware/addIdToRequest.js
Normal file
23
api/webserver/middleware/addIdToRequest.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const crypto = require("crypto");
|
||||
const httpContext = require("express-http-context");
|
||||
|
||||
const addIdToRequest = (req, res, next) => {
|
||||
try {
|
||||
crypto.randomBytes(16, (err, buf) => {
|
||||
if (err) {
|
||||
// log err
|
||||
id = null;
|
||||
}
|
||||
id = buf.toString("hex");
|
||||
|
||||
httpContext.set("sessionId", id);
|
||||
next();
|
||||
});
|
||||
} catch (err) {
|
||||
// log err
|
||||
httpContext.set("sessionId", null);
|
||||
next();
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = addIdToRequest;
|
||||
6
api/webserver/middleware/setupCORS.js
Normal file
6
api/webserver/middleware/setupCORS.js
Normal file
@@ -0,0 +1,6 @@
|
||||
const openCORS = (req, res, next) => {
|
||||
res.set("Access-Control-Allow-Origin", "*")
|
||||
return next();
|
||||
};
|
||||
|
||||
module.exports = openCORS;
|
||||
37
api/webserver/middleware/setupHeaders.js
Normal file
37
api/webserver/middleware/setupHeaders.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const camelToKebabCase = str => str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);
|
||||
|
||||
const mapFeaturePolicyToString = (features) => {
|
||||
return Object.entries(features).map(([key, value]) => {
|
||||
key = camelToKebabCase(key)
|
||||
value = value == "*" ? value : `'${ value }'`
|
||||
return `${key} ${value}`
|
||||
}).join("; ")
|
||||
}
|
||||
|
||||
const setupHeaders = (req, res, next) => {
|
||||
res.set("Access-Control-Allow-Headers", "Content-Type")
|
||||
|
||||
// Security
|
||||
res.set("X-Content-Type-Options", "nosniff");
|
||||
res.set("X-XSS-Protection", "1; mode=block");
|
||||
res.set("X-Frame-Options", "SAMEORIGIN");
|
||||
res.set("X-DNS-Prefetch-Control", "off");
|
||||
res.set("X-Download-Options", "noopen");
|
||||
res.set("Strict-Transport-Security", "max-age=15552000; includeSubDomains")
|
||||
|
||||
// Feature policy
|
||||
const features = {
|
||||
fullscreen: "*",
|
||||
payment: "none",
|
||||
microphone: "none",
|
||||
camera: "self",
|
||||
speaker: "*",
|
||||
syncXhr: "self"
|
||||
}
|
||||
const featureString = mapFeaturePolicyToString(features);
|
||||
res.set("Feature-Policy", featureString)
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
module.exports = setupHeaders;
|
||||
37
api/webserver/server.js
Normal file
37
api/webserver/server.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const express = require("express");
|
||||
const app = express();
|
||||
const path = require("path");
|
||||
global.__base = path.join(__dirname, "..");
|
||||
global.__middleware = path.join(__dirname, "middleware");
|
||||
global.__controllers = path.join(__dirname, "controllers");
|
||||
|
||||
// logging
|
||||
const logger = require(`${__base}/logger`);
|
||||
|
||||
// middleware
|
||||
const httpContext = require("express-http-context");
|
||||
const setupCORS = require(`${__middleware}/setupCORS`);
|
||||
const setupHeaders = require(`${__middleware}/setupHeaders`);
|
||||
const addIdToRequest = require(`${__middleware}/addIdToRequest`);
|
||||
app.use(httpContext.middleware);
|
||||
app.use(setupCORS);
|
||||
app.use(setupHeaders);
|
||||
app.use(addIdToRequest);
|
||||
|
||||
// parse application/json
|
||||
app.use(express.json());
|
||||
|
||||
const router = express.Router();
|
||||
// const TokenController = require(`${__controllers}/tokenController`);
|
||||
const PostController = require(`${__controllers}/postController`);
|
||||
|
||||
router.get("/api/post/:id/render", PostController.renderPost);
|
||||
router.get("/api/post/:id", PostController.getPost);
|
||||
router.put("/api/post/:id", PostController.updatePost);
|
||||
// router.post("/api/payment/callback/v2/payments/:id", PaymentController.updatePayment);
|
||||
|
||||
app.use(router);
|
||||
|
||||
logger.info("Server started, listening at :30010");
|
||||
|
||||
app.listen(30010);
|
||||
Reference in New Issue
Block a user