← 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 };