require('dotenv').config(); const express = require('express'); const cors = require('cors'); const { auth } = require('express-openid-connect'); const mongoose = require('mongoose'); const config = require('./config'); const app = express(); // Basic middleware app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cors({ origin: config.frontend.url, credentials: true })); // Connect to MongoDB with proper error handling mongoose.connect(config.mongodb.uri, { useNewUrlParser: true, useUnifiedTopology: true, serverSelectionTimeoutMS: 5000, // Timeout after 5s instead of 30s socketTimeoutMS: 45000, // Close sockets after 45s of inactivity }) .then(() => { console.log('Connected to MongoDB'); }) .catch(err => { console.error('MongoDB connection error:', err); process.exit(1); // Exit if we can't connect to the database }); // Handle MongoDB connection errors mongoose.connection.on('error', err => { console.error('MongoDB error:', err); }); mongoose.connection.on('disconnected', () => { console.warn('MongoDB disconnected. Attempting to reconnect...'); }); mongoose.connection.on('reconnected', () => { console.log('MongoDB reconnected'); }); // Auth0 configuration const auth0Config = { authRequired: false, auth0Logout: true, baseURL: config.server.url, clientID: config.auth0.clientId, issuerBaseURL: `https://${config.auth0.domain}`, secret: config.auth0.secret, routes: { login: false, // Disable default login route logout: false // Disable default logout route } }; app.use(auth(auth0Config)); // Auth routes app.get('/api/auth/login', (req, res) => { res.oidc.login({ returnTo: config.frontend.url, authorizationParams: { redirect_uri: `${config.server.url}/callback` } }); }); app.get('/api/auth/logout', (req, res) => { res.oidc.logout({ returnTo: config.frontend.url }); }); app.get('/api/auth/user', (req, res) => { if (req.oidc.isAuthenticated()) { res.json(req.oidc.user); } else { res.json(null); } }); // Callback route app.get('/callback', (req, res) => { res.redirect(config.frontend.url); }); // Other routes... const deploymentRoutes = require('./routes/deployments'); app.use('/api/deployments', deploymentRoutes); // Start server const port = config.port || 3001; app.listen(port, () => { console.log(`Server running on port ${port}`); });