package session import ( "net/http" "time" "github.com/gorilla/sessions" ) type Options struct { Session sessions.Options KeyPrefix string TTL time.Duration } type OptionFunc func(opts *Options) func NewOptions(funcs ...OptionFunc) *Options { opts := &Options{ Session: sessions.Options{ Path: "/", Domain: "", MaxAge: int(time.Hour.Seconds()), HttpOnly: true, Secure: false, SameSite: http.SameSiteDefaultMode, }, KeyPrefix: "session:", TTL: time.Hour, } for _, fn := range funcs { fn(opts) } return opts } func WithSessionOptions(options sessions.Options) OptionFunc { return func(opts *Options) { opts.Session = options } } func WithKeyPrefix(prefix string) OptionFunc { return func(opts *Options) { opts.KeyPrefix = prefix } } func WithTTL(ttl time.Duration) OptionFunc { return func(opts *Options) { opts.TTL = ttl } }