mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-30 02:46:30 +02:00
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package databroker
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// DefaultDeletePermanentlyAfter is the default amount of time to wait before deleting
|
|
// a record permanently.
|
|
DefaultDeletePermanentlyAfter = time.Hour
|
|
// DefaultBTreeDegree is the default number of items to store in each node of the BTree.
|
|
DefaultBTreeDegree = 8
|
|
// DefaultStorageType is the default storage type that Server use
|
|
DefaultStorageType = "memory"
|
|
)
|
|
|
|
type serverConfig struct {
|
|
deletePermanentlyAfter time.Duration
|
|
btreeDegree int
|
|
secret []byte
|
|
storageType string
|
|
storageConnectionString string
|
|
storageTLSConfig *tls.Config
|
|
}
|
|
|
|
func newServerConfig(options ...ServerOption) *serverConfig {
|
|
cfg := new(serverConfig)
|
|
WithDeletePermanentlyAfter(DefaultDeletePermanentlyAfter)(cfg)
|
|
WithBTreeDegree(DefaultBTreeDegree)(cfg)
|
|
WithStorageType(DefaultStorageType)(cfg)
|
|
for _, option := range options {
|
|
option(cfg)
|
|
}
|
|
return cfg
|
|
}
|
|
|
|
// A ServerOption customizes the server.
|
|
type ServerOption func(*serverConfig)
|
|
|
|
// WithBTreeDegree sets the number of items to store in each node of the BTree.
|
|
func WithBTreeDegree(degree int) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.btreeDegree = degree
|
|
}
|
|
}
|
|
|
|
// WithDeletePermanentlyAfter sets the deletePermanentlyAfter duration.
|
|
// If a record is deleted via Delete, it will be permanently deleted after
|
|
// the given duration.
|
|
func WithDeletePermanentlyAfter(dur time.Duration) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.deletePermanentlyAfter = dur
|
|
}
|
|
}
|
|
|
|
// WithSecret sets the secret in the config.
|
|
func WithSecret(secret []byte) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.secret = secret
|
|
}
|
|
}
|
|
|
|
// WithStorageType sets the storage type.
|
|
func WithStorageType(typ string) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.storageType = typ
|
|
}
|
|
}
|
|
|
|
// WithStorageConnectionString sets the DSN for storage.
|
|
func WithStorageConnectionString(connStr string) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.storageConnectionString = connStr
|
|
}
|
|
}
|
|
|
|
// WithStorageTLSConfig sets the tls config for connection to storage.
|
|
func WithStorageTLSConfig(tlsConfig *tls.Config) ServerOption {
|
|
return func(cfg *serverConfig) {
|
|
cfg.storageTLSConfig = tlsConfig
|
|
}
|
|
}
|