Files
gateway/middleware/identity.go
zeekayandGitHub 3a28349b04 feat(middleware): own JWT validation + identity-strip + trust helper (#16)
Moves Auth + StripIdentityHeaders from zip/middleware to
gateway/middleware. Adds gateway/trust.go exporting AssertGatewayMinted
for downstream subsystems to verify the request flowed through gateway.

The unified cloud binary's pipeline now reads:
  zip generic middleware (Recover, Logger, RequestID, Telemetry, ...)
  gateway.middleware.StripIdentityHeaders
  gateway.middleware.Auth(verifier)
  ... downstream subsystem handlers ...
2026-05-29 19:59:18 -07:00

29 lines
927 B
Go

package middleware
import (
"github.com/hanzoai/zip"
)
// StripIdentityHeaders strips client-supplied X-Org-Id / X-User-Id /
// X-User-Email / X-User-IsAdmin / X-Roles / X-User-Permissions from the
// request before any other middleware runs. Per HIP-0026, only the
// gateway-minted path is trusted; everything else must be stripped to
// prevent client spoofing.
//
// Use this when a service runs WITHOUT a Hanzo gateway in front (rare).
// When deployed behind hanzoai/gateway, the gateway strips these
// unconditionally and re-mints from JWT — leave this middleware OFF in
// that topology.
func StripIdentityHeaders() zip.Handler {
return func(c *zip.Ctx) error {
req := c.Fiber().Request()
req.Header.Del("X-Org-Id")
req.Header.Del("X-User-Id")
req.Header.Del("X-User-Email")
req.Header.Del("X-User-IsAdmin")
req.Header.Del("X-Roles")
req.Header.Del("X-User-Permissions")
return c.Continue()
}
}