mirror of
https://github.com/hanzoai/gateway.git
synced 2026-10-30 15:04:44 +00:00
Minting is issuing authority. IAM signs the token, and the signature is where the authority is created. This edge VERIFIES a token and restates what it proved as headers, so a transport that cannot carry a token can read the same decision. Calling both operations "mint" put the issuer's job and the edge's under one word, and a word that covers two operations stops distinguishing them — a reader who thinks the edge mints reads it as a second issuer. So every use of `mint` for writing or stripping identity HEADERS becomes `write`, which is already the leaf's own word (hanzoai/authz: "strips every identity header on ingress and rewrites it from verified claims"). The identifiers follow: SetGatewayMinted/AssertGatewayMinted become SetGatewayWritten/AssertGatewayWritten, mintIdentity becomes writeIdentity, and waitlistMintedHeaders becomes waitlistHeaders — they are simply the guard's own response headers, and the adjective added nothing but the wrong verb. `mint` stays where it is correct: IAM issuing a token, a sign-in issuing a session cookie, commerce creating balance, and "the app the token was minted through". Two doc citations named symbols the migration removed and are re-pointed at the live ones: edge.Mint to edge.Render, gatewayMintedIdentityHeaders to authz.Headers. Co-authored-by: Hanzo Dev <[email protected]>
29 lines
930 B
Go
29 lines
930 B
Go
package middleware
|
|
|
|
import (
|
|
"github.com/zap-proto/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-written 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 rewrites 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()
|
|
}
|
|
}
|