PYAE1994's picture
Upload folder using huggingface_hub
dd480ef verified
/**
* Auth Middleware
* Validates X-API-Key header for protected routes
* Lightweight to stay within 10ms CF Workers CPU budget
*/
import type { MiddlewareHandler } from 'hono';
import type { Env } from '../types/env';
export const authMiddleware: MiddlewareHandler<{ Bindings: Env }> = async (c, next) => {
const apiKey = c.req.header('X-API-Key') ?? c.req.header('Authorization')?.replace('Bearer ', '');
if (!apiKey) {
return c.json({ success: false, error: 'Missing API key. Provide X-API-Key header.' }, 401);
}
// Constant-time comparison to prevent timing attacks
const expected = c.env.INTERNAL_API_SECRET;
if (!safeCompare(apiKey, expected)) {
return c.json({ success: false, error: 'Invalid API key.' }, 403);
}
await next();
};
function safeCompare(a: string, b: string): boolean {
if (a.length !== b.length) return false;
let result = 0;
for (let i = 0; i < a.length; i++) {
result |= (a.charCodeAt(i) ^ b.charCodeAt(i));
}
return result === 0;
}