← back to Dw Boardroom V2

src/api/middleware/auth.ts

27 lines

// ═══════════════════════════════════════════════
// DW Boardroom V2 — Basic Auth Middleware
// ═══════════════════════════════════════════════

import type { Request, Response, NextFunction } from 'express';

const AUTH_USER = process.env.AUTH_USER || 'admin';
const AUTH_PASS = process.env.BOARDROOM_AUTH_PASS || process.env.AUTH_PASS;
if (!AUTH_PASS) throw new Error('BOARDROOM_AUTH_PASS not set — route via /secrets');

export function basicAuth(req: Request, res: Response, next: NextFunction): void {
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith('Basic ')) {
    res.status(401).json({ error: 'Authentication required' });
    return;
  }

  const decoded = Buffer.from(authHeader.slice(6), 'base64').toString();
  const [user, pass] = decoded.split(':');

  if (user === AUTH_USER && pass === AUTH_PASS) {
    next();
  } else {
    res.status(401).json({ error: 'Invalid credentials' });
  }
}