Files
NetDomainManager/index.js
T

103 lines
2.4 KiB
JavaScript
Raw Normal View History

2026-05-12 19:29:45 -04:00
// Main App
const express = require('express');
const app = express();
const exphbs = require ('express-handlebars');
const { SetupEnvironment } = require('./environ');
const SetupRouter = require('./router');
// Database
const database = require('./database');
// Session
const session = require('express-session');
const SequelizeStore = require('connect-session-sequelize')(session.Store);
const cookieParser = require('cookie-parser');
// Error Handling
const { GenericErrorByCode, FormatForAPI } = require('./errors');
// Helpers
const { HBSHelpers } = require('./helpers');
// Security
const helmet = require('helmet');
// First things first, setup the environment
SetupEnvironment();
// Get what we need for starting the server
const serverPort = process.env.SRV_PORT;
// Database Setup
const db = database.db;
const sessionStore = new SequelizeStore({
db: db,
table: 'Session'
})
// Helmet setup
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
objectSrc: ["'none'"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", 'data:', '*'],
mediaSrc: ["'self'", 'data:', '*'],
connectSrc: ["'self'", 'data:', '*']
}
})
);
// Handlebars Setup
const hbs = exphbs.create({
helpers: HBSHelpers,
defaultLayout: 'main',
extname: '.handlebars',
runtimeOptions: {
allowProtoPropertiesByDefault: true,
allowProtoMethodsByDefault: true,
},
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
// Cookie parsing
app.use(cookieParser(process.env.CKYKEY));
// Session
app.use(session({
name: 'session',
secret: process.env.SESSKEY,
resave: false,
saveUninitialized: false,
store: sessionStore,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === 'prod',
sameSite: 'strict'
},
}));
// Setup Assets
app.use(express.static('assets'));
// Setup Router
SetupRouter(app);
db.sync().then(() => {
app.use((req, res, next) => {
next(GenericErrorByCode(404));
});
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.json(FormatForAPI(err.message || 'Internal Server Error'));
});
app.listen(serverPort, () => {
console.log(`NDM running @ localhost:${serverPort}`);
});
});