package middleware import ( "net/http" "time" ) type GetCookieDomainFunc func(r *http.Request) (string, error) func defaultGetCookieDomain(r *http.Request) (string, error) { return "", nil } type AnonymousUserOptions struct { GetCookieDomain GetCookieDomainFunc CookieDuration time.Duration Tenant string Entrypoint string Role string } type AnonymousUserOptionFunc func(*AnonymousUserOptions) func defaultAnonymousUserOptions() *AnonymousUserOptions { return &AnonymousUserOptions{ GetCookieDomain: defaultGetCookieDomain, CookieDuration: 24 * time.Hour, Tenant: "", Entrypoint: "", Role: "", } } func WithCookieOptions(getCookieDomain GetCookieDomainFunc, duration time.Duration) AnonymousUserOptionFunc { return func(opts *AnonymousUserOptions) { opts.GetCookieDomain = getCookieDomain opts.CookieDuration = duration } } func WithTenant(tenant string) AnonymousUserOptionFunc { return func(opts *AnonymousUserOptions) { opts.Tenant = tenant } } func WithEntrypoint(entrypoint string) AnonymousUserOptionFunc { return func(opts *AnonymousUserOptions) { opts.Entrypoint = entrypoint } } func WithRole(role string) AnonymousUserOptionFunc { return func(opts *AnonymousUserOptions) { opts.Role = role } }