tenant

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const HeaderKey = "x-tenant-slug"

HeaderKey is the Kafka header key for tenant slug propagation between services.

Variables

View Source
var ErrInvalidTenant = errors.New("invalid tenant")

ErrInvalidTenant is returned when tenant slug is invalid.

View Source
var ErrTenantNotFound = errors.New("tenant not found")

ErrTenantNotFound is returned when tenant slug is not present in the request.

Functions

func ContextFromKafkaHeaders

func ContextFromKafkaHeaders(ctx context.Context, headers []kgo.RecordHeader) context.Context

ContextFromKafkaHeaders creates a context with the tenant ID extracted from Kafka record headers. If no tenant ID is present in headers, returns the context unchanged.

func ContextWithSlug

func ContextWithSlug(ctx context.Context, slug string) context.Context

ContextWithSlug returns a new context with the tenant slug stored.

func Middleware

func Middleware(resolver Resolver, log *zap.Logger) middleware.Middleware

Middleware resolves tenant slug from the request and stores it in context.

func MiddlewareModule

func MiddlewareModule(priority int, resolver Resolver) fx.Option

MiddlewareModule provides tenant resolution as an ogen middleware with the given priority.

func MustSlugFromContext

func MustSlugFromContext(ctx context.Context) string

MustSlugFromContext retrieves the tenant slug from the context. Panics if tenant slug is not present — use only in code paths where tenant middleware has already validated the presence.

func SaveToHeaders

func SaveToHeaders(ctx context.Context, headers map[string]string) map[string]string

SaveToHeaders adds the tenant slug from context to the headers map. Returns the (possibly modified) headers map. If no tenant is in context, returns headers unchanged.

func SlugFromContext

func SlugFromContext(ctx context.Context) (string, bool)

SlugFromContext retrieves the tenant slug from the context. Returns the slug and true if present, empty string and false otherwise.

Types

type ChainResolver

type ChainResolver struct {
	// contains filtered or unexported fields
}

ChainResolver tries multiple resolvers in order and returns the first non-empty result.

func NewChainResolver

func NewChainResolver(resolvers ...Resolver) *ChainResolver

NewChainResolver creates a resolver that tries each resolver in order.

func (*ChainResolver) Resolve

func (r *ChainResolver) Resolve(req *http.Request) (string, error)

Resolve tries each resolver in order and returns the first non-empty slug.

type HeaderResolver

type HeaderResolver struct {
	// contains filtered or unexported fields
}

HeaderResolver extracts the tenant slug from a request header.

func NewHeaderResolver

func NewHeaderResolver(headerName string) *HeaderResolver

NewHeaderResolver creates a new HeaderResolver. headerName is the HTTP header key (e.g. "X-Tenant-Slug").

func (*HeaderResolver) Resolve

func (r *HeaderResolver) Resolve(req *http.Request) (string, error)

Resolve extracts the tenant slug from the configured HTTP header.

type Resolver

type Resolver interface {
	// Resolve extracts the tenant slug from the request.
	// Returns the tenant slug and nil error on success.
	// Returns empty string and nil if no tenant is present (optional tenant).
	// Returns error if tenant resolution fails unexpectedly.
	Resolve(r *http.Request) (string, error)
}

Resolver resolves a tenant slug from an HTTP request.

type SubdomainResolver

type SubdomainResolver struct{}

SubdomainResolver extracts the tenant slug from the first subdomain segment of the request host. For example:

  • "acme.sokolshop.com" → "acme"
  • "acme.sokolshop.com:8080" → "acme"
  • "sokolshop.com" → "" (no subdomain)
  • "localhost" → "" (no subdomain)

func NewSubdomainResolver

func NewSubdomainResolver() *SubdomainResolver

NewSubdomainResolver creates a new SubdomainResolver.

func (*SubdomainResolver) Resolve

func (r *SubdomainResolver) Resolve(req *http.Request) (string, error)

Resolve extracts the tenant slug from the request's subdomain.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL