package internal import "net/url" const ( // InvalidConfigValue is the constant value for invalid config values // which must be changed for production configurations before successful // startup InvalidConfigValue = "INVALID CONFIG VALUE - PLEASE CHANGE THIS VALUE" // DefaultDebug is the default debug mode DefaultDebug = false // DefaultTLS is the default for whether to enable TLS DefaultTLS = false // DefaultTLSKey is the default path to a TLS private key (if blank uses Let's Encrypt) DefaultTLSKey = "" // DefaultTLSCert is the default path to a TLS certificate (if blank uses Let's Encrypt) DefaultTLSCert = "" // DefaultData is the default data directory for storage DefaultData = "./data" // DefaultStore is the default data store used for accounts, sessions, etc DefaultStore = "bitcask://saltyim.db" // DefaultBaseURL is the default Base URL for the server DefaultBaseURL = "http://0.0.0.0:8000" // DefaultAdminUser is the default publickye to grant admin privileges to DefaultAdminUser = "" // DefaultAdminEmail is the default email of the admin user used in support requests DefaultAdminEmail = "support@salty.im" ) func NewConfig() *Config { return &Config{ Debug: DefaultDebug, Store: DefaultStore, BaseURL: DefaultBaseURL, AdminUser: DefaultAdminUser, AdminEmail: DefaultAdminEmail, } } // Option is a function that takes a config struct and modifies it type Option func(*Config) error // WithDebug sets the debug mode lfag func WithDebug(debug bool) Option { return func(cfg *Config) error { cfg.Debug = debug return nil } } // WithTLS sets the tls flag func WithTLS(tls bool) Option { return func(cfg *Config) error { cfg.TLS = tls return nil } } // WithTLSKey sets the path to a TLS private key func WithTLSKey(tlsKey string) Option { return func(cfg *Config) error { cfg.TLSKey = tlsKey return nil } } // WithTLSCert sets the path to a TLS certificate func WithTLSCert(tlsCert string) Option { return func(cfg *Config) error { cfg.TLSCert = tlsCert return nil } } // WithData sets the data directory to use for storage func WithData(data string) Option { return func(cfg *Config) error { cfg.Data = data return nil } } // WithStore sets the store to use for accounts, sessions, etc. func WithStore(store string) Option { return func(cfg *Config) error { cfg.Store = store return nil } } // WithBaseURL sets the Base URL used for constructing feed URLs func WithBaseURL(baseURL string) Option { return func(cfg *Config) error { u, err := url.Parse(baseURL) if err != nil { return err } cfg.BaseURL = baseURL cfg.baseURL = u return nil } } // WithAdminUser sets the Admin user used for granting special features to func WithAdminUser(adminUser string) Option { return func(cfg *Config) error { cfg.AdminUser = adminUser return nil } } // WithAdminEmail sets the Admin email used to contact the pod operator func WithAdminEmail(adminEmail string) Option { return func(cfg *Config) error { cfg.AdminEmail = adminEmail return nil } }