109 lines
2.8 KiB
JavaScript
109 lines
2.8 KiB
JavaScript
const express = require('express');
|
|
const exphbs = require('express-handlebars');
|
|
const path = require('path');
|
|
const helmet = require('helmet');
|
|
const cors = require('cors');
|
|
const app = express();
|
|
require('dotenv').config();
|
|
const PORT = process.env.WEB_PORT || 3350;
|
|
const IP = process.env.IP || '0.0.0.0';
|
|
const webAuthRoutes = require('./routes/webAuth');
|
|
|
|
const corsOptions = {
|
|
origin: [
|
|
'https://2weekmail.fyi',
|
|
'http://localhost:3350'
|
|
],
|
|
methods: ['GET', 'POST', 'PUT', 'DELETE'],
|
|
credentials: true
|
|
};
|
|
|
|
app.use(cors(corsOptions));
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
// Configure Helmet with custom CSP
|
|
// app.use(helmet({
|
|
// contentSecurityPolicy: {
|
|
// directives: {
|
|
// defaultSrc: ["'self'"],
|
|
// scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
// styleSrc: ["'self'", "'unsafe-inline'"],
|
|
// imgSrc: ["'self'", "data:"],
|
|
// connectSrc: ["'self'", "https://api.2weekmail.test", "https://api.2weekmail.fyi"],
|
|
// fontSrc: ["'self'"],
|
|
// objectSrc: ["'none'"],
|
|
// mediaSrc: ["'self'"],
|
|
// frameSrc: ["'self'"],
|
|
// },
|
|
// },
|
|
// }));
|
|
|
|
// Set up Handlebars
|
|
app.engine('hbs', exphbs.engine({
|
|
extname: '.hbs',
|
|
defaultLayout: 'main',
|
|
layoutsDir: path.join(__dirname, 'views/layouts'),
|
|
partialsDir: path.join(__dirname, 'views/partials'),
|
|
helpers: {
|
|
section: function (name, options) {
|
|
if (!this._sections) this._sections = {};
|
|
this._sections[name] = options.fn(this);
|
|
return null;
|
|
},
|
|
}
|
|
}));
|
|
app.set('view engine', 'hbs');
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
app.disable('x-powered-by');
|
|
|
|
// Static files
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
// Routes
|
|
app.get('/', (req, res) => {
|
|
res.render('home');
|
|
});
|
|
|
|
app.use('/auth', webAuthRoutes);
|
|
|
|
app.get('/stats', (req, res) => {
|
|
res.render('stats');
|
|
});
|
|
|
|
app.get('/about', (req, res) => {
|
|
res.render('about');
|
|
});
|
|
|
|
app.get('/privacy', (req, res) => {
|
|
res.render('policies/privacy');
|
|
});
|
|
|
|
app.get('/terms', (req, res) => {
|
|
res.render('policies/terms');
|
|
});
|
|
|
|
const setupSwagger = require('./swagger');
|
|
setupSwagger(app);
|
|
|
|
// const { deleteExpiredMailboxes } = require('./utils/mailbox_cleanup');
|
|
// const { cleanupOrphanedMailboxes } = require('./utils/helpers');
|
|
|
|
// const cron = require('node-cron');
|
|
|
|
// cron.schedule('0 0 * * *', async () => {
|
|
// console.log('Running mailbox cleanup job');
|
|
// try {
|
|
// await deleteExpiredMailboxes();
|
|
// await cleanupOrphanedMailboxes();
|
|
// console.log('Mailbox cleanup completed successfully');
|
|
// } catch (error) {
|
|
// console.error('Mailbox cleanup failed:', error);
|
|
// }
|
|
// });
|
|
|
|
// Start server
|
|
app.listen(PORT, IP, () => {
|
|
console.log(`Server running on port ${PORT}`);
|
|
});
|