import { inject, injectable } from "@codemation/core"; import type { Context, MiddlewareHandler, Next } from "hono"; import { IncomingHmacVerifier } from "./IncomingHmacVerifier"; @injectable() export class InternalHmacAuthMiddleware { constructor(@inject(IncomingHmacVerifier) private readonly verifier: IncomingHmacVerifier) {} handle(): MiddlewareHandler { return async (c: Context, next: Next) => { const body = c.req.method === "GET" || c.req.method === "HEAD" ? "" : await c.req.text(); const result = await this.verifier.verify(c.req.method, c.req.url, body, c.req.header("authorization") ?? null); if ("failure" in result) { return c.json({ error: "Unauthorized" }, 401); } c.set("body" as never, body); await next(); }; } }