debian-forge-composer/internal/auth/middleware.go
2025-07-28 20:39:32 +02:00

29 lines
744 B
Go

package auth
import (
"errors"
"fmt"
"github.com/labstack/echo/v4"
)
const TenantCtxKey string = "tenant"
func TenantChannelMiddleware(tenantProviderFields []string, onFail error) func(next echo.HandlerFunc) echo.HandlerFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(ctx echo.Context) error {
tenant, err := GetFromClaims(ctx.Request().Context(), tenantProviderFields)
// Allowlisted paths won't have a token
if err != nil && !errors.Is(err, ErrNoJWT) {
return onFail
}
// prefix the tenant to prevent collisions if support for specifying channels in a request is ever added
if tenant != "" {
ctx.Set(TenantCtxKey, fmt.Sprintf("org-%s", tenant))
}
return next(ctx)
}
}
}