2weekmail/api/web_server.js
2025-03-23 13:14:14 +00:00

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}`);
});