mbkauthe
Version:
MBKTech's reusable authentication system for Node.js applications.
84 lines (68 loc) • 2.46 kB
JavaScript
import express from "express";
import session from "express-session";
import cookieParser from "cookie-parser";
import passport from 'passport';
import {
sessionConfig,
corsMiddleware,
sessionRestorationMiddleware,
sessionCookieSyncMiddleware,
requestContextMiddleware
} from "./middleware/index.js";
import authRoutes from "./routes/auth.js";
import oauthRoutes from "./routes/oauth.js";
import miscRoutes from "./routes/misc.js";
import dbLogsRoutes from "./routes/dbLogs.js";
import { fileURLToPath } from "url";
import path from "path";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const router = express.Router();
// Configure Express to trust proxy headers for rate limiting in dev mode only
// This prevents conflicts with parent project proxy settings in production
if (process.env.test === "dev") {
router.use((req, res, next) => {
// Set trust proxy to true for the app instance if not already set
if (!req.app.get('trust proxy')) {
req.app.set('trust proxy', true);
}
next();
});
}
// Basic middleware
router.use(express.json());
router.use(express.urlencoded({ extended: true }));
router.use(cookieParser());
// CORS and security headers
router.use(corsMiddleware);
// Session configuration
router.use(session(sessionConfig));
// Session restoration
router.use(sessionRestorationMiddleware);
// Attach request context for DB query logging (dev only)
if (process.env.env === 'dev') {
router.use(requestContextMiddleware);
}
// Initialize passport
router.use(passport.initialize());
router.use(passport.session());
// Session cookie sync
router.use(sessionCookieSyncMiddleware);
// Mount routes (rate limiting is applied within each route module)
router.use('/mbkauthe', authRoutes);
router.use('/mbkauthe', oauthRoutes);
router.use('/mbkauthe', miscRoutes);
if (process.env.env === 'dev') {
router.use('/mbkauthe', dbLogsRoutes);
}
// Redirect shortcuts for login
router.get(["/login", "/signin"], async (req, res) => {
const queryParams = new URLSearchParams(req.query).toString();
const redirectUrl = `/mbkauthe/login${queryParams ? `?${queryParams}` : ''}`;
return res.redirect(redirectUrl);
});
router.get(['/icon.svg', "/favicon.ico", "/icon.png"], (req, res) => {
res.setHeader('Cache-Control', 'public, max-age=31536000');
res.sendFile(path.join(__dirname, '..', 'public', 'M.png'));
});
export { checkVersion } from "./routes/misc.js";
export default router;