package config import "github.com/spf13/viper" type Config struct { Server ServerConfig Database DatabaseConfig Storage StorageConfig Upload UploadConfig Auth AuthConfig } type ServerConfig struct { Host string Port int BehindProxy bool `mapstructure:"behind_proxy"` SiteTitle string `mapstructure:"site_title"` FaviconPath string `mapstructure:"favicon_path"` LogoPath string `mapstructure:"logo_path"` } func (s ServerConfig) SecureCookie() bool { return s.BehindProxy } type DatabaseConfig struct { Path string } type StorageConfig struct { Path string } type UploadConfig struct { MaxSizeMB int `mapstructure:"max_size_mb"` RateLimitPerMinute int `mapstructure:"rate_limit_per_minute"` } type AuthConfig struct { AllowRegistration bool `mapstructure:"allow_registration"` RequireAuthForBrowse bool `mapstructure:"require_auth_for_browse"` } func FromViper() Config { return Config{ Server: ServerConfig{ Host: viper.GetString("server.host"), Port: viper.GetInt("server.port"), BehindProxy: viper.GetBool("server.behind_proxy"), SiteTitle: viper.GetString("server.site_title"), FaviconPath: viper.GetString("server.favicon_path"), LogoPath: viper.GetString("server.logo_path"), }, Database: DatabaseConfig{ Path: viper.GetString("database.path"), }, Storage: StorageConfig{ Path: viper.GetString("storage.path"), }, Upload: UploadConfig{ MaxSizeMB: viper.GetInt("upload.max_size_mb"), RateLimitPerMinute: viper.GetInt("upload.rate_limit_per_minute"), }, Auth: AuthConfig{ AllowRegistration: viper.GetBool("auth.allow_registration"), RequireAuthForBrowse: viper.GetBool("auth.require_auth_for_browse"), }, } }