← back to Ken

src/lib/auth.js

43 lines

const jwt = require('jsonwebtoken');
const cookie = require('cookie');

function requiredEnv(name) {
  const value = process.env[name];
  if (!value) {
    throw new Error(`Missing required environment variable: ${name}`);
  }
  return value;
}

const JWT_SECRET = requiredEnv('JWT_SECRET');
const VALID_USER = process.env.ADMIN_USER || 'admin';
const VALID_PASS = requiredEnv('ADMIN_PASSWORD');

function createToken(username) {
  return jwt.sign({ username, role: 'admin' }, JWT_SECRET, { expiresIn: '7d' });
}

function verifyToken(token) {
  try {
    return jwt.verify(token, JWT_SECRET);
  } catch {
    return null;
  }
}

function getTokenFromRequest(req) {
  const cookies = cookie.parse(req.headers.get?.('cookie') || req.headers?.cookie || '');
  if (cookies.bertha_token) return cookies.bertha_token;
  const auth = req.headers.get?.('authorization') || req.headers?.authorization || '';
  if (auth.startsWith('Bearer ')) return auth.slice(7);
  return null;
}

function authenticateRequest(req) {
  const token = getTokenFromRequest(req);
  if (!token) return null;
  return verifyToken(token);
}

module.exports = { createToken, verifyToken, authenticateRequest, VALID_USER, VALID_PASS, JWT_SECRET };