File size: 2,274 Bytes
9470e9f 3e10ff3 9470e9f 3e10ff3 9470e9f 2ea621f 9470e9f 3e10ff3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
import 'dotenv/config';
import express from 'express';
import mongoose from 'mongoose';
import cookieSession from 'cookie-session';
import passport from 'passport';
import cors from 'cors';
import helmet from 'helmet';
import { createServer } from 'http'; // REQUIRED for Socket.io
// Config
import connectDB from './config/db.js';
import './config/passport.js'; // Execute passport config
import authRoutes from './routes/authRoutes.js';
import userRoutes from './routes/userRoutes.js';
import friendRoutes from './routes/friendRoutes.js';
import { initSocket } from './services/SocketManager.js';
// Connect to DB
connectDB();
const app = express();
// Security Middleware
app.use(helmet());
app.use(cors({
origin: process.env.CLIENT_URL || "http://localhost:5173",
methods: "GET,POST,PUT,DELETE",
credentials: true // Allow cookies
}));
// Body Parsers
app.use(express.json());
// Session Middleware (Encryption for Cookie)
app.use(
cookieSession({
name: 'cragy_session',
maxAge: 30 * 24 * 60 * 60 * 1000,
keys: [process.env.COOKIE_KEY],
sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
// Secure MUST be true if sameSite is 'none'
secure: process.env.NODE_ENV === 'production',
// Allow proxy trust (HuggingFace uses a proxy)
httpOnly: true,
})
);
// Trust the HuggingFace/Cloudflare proxy so 'secure' cookies work
app.set('trust proxy', 1);
app.use((req, res, next) => {
if (req.session && !req.session.regenerate) {
req.session.regenerate = (cb) => {
cb();
};
}
if (req.session && !req.session.save) {
req.session.save = (cb) => {
cb();
};
}
next();
});
// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());
// Routes
app.use('/api/auth', authRoutes);
app.use('/api/user', userRoutes);
app.use('/api/friends', friendRoutes);
app.get('/', (req, res) => {
res.send({ status: 'Online', user: req.user });
});
const httpServer = createServer(app); // Wrap Express
initSocket(httpServer); // Initialize Socket
const PORT = process.env.PORT || 3000;
httpServer.listen(PORT, () => { // Listen on httpServer, NOT app
console.log(`🚀 Server + Socket running on port ${PORT}`);
}); |