bouncer/internal/session/options.go

56 lines
909 B
Go
Raw Normal View History

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
}
}