- Create internal/config package with unified config structs and validation - Abstract viper dependency behind config.Loader interface for better testability - Replace manual config parsing and type assertions with type-safe loading - Consolidate AuthConfig, SiteConfig, and DiscoveryConfig into single package - Add comprehensive validation with clear error messages - Remove ~200 lines of duplicate config handling code - Maintain backward compatibility with existing config files
68 lines
2.6 KiB
Go
68 lines
2.6 KiB
Go
package config
|
|
|
|
type Config struct {
|
|
Database DatabaseConfig `yaml:"database" mapstructure:"database"`
|
|
API APIConfig `yaml:"api" mapstructure:"api"`
|
|
CLI CLIConfig `yaml:"cli" mapstructure:"cli"`
|
|
Server ServerConfig `yaml:"server" mapstructure:"server"`
|
|
Auth AuthConfig `yaml:"auth" mapstructure:"auth"`
|
|
}
|
|
|
|
type DatabaseConfig struct {
|
|
Path string `yaml:"path" mapstructure:"path"`
|
|
}
|
|
|
|
type APIConfig struct {
|
|
URL string `yaml:"url" mapstructure:"url"`
|
|
Key string `yaml:"key" mapstructure:"key"`
|
|
}
|
|
|
|
type CLIConfig struct {
|
|
SiteID string `yaml:"site_id" mapstructure:"site_id"`
|
|
}
|
|
|
|
type ServerConfig struct {
|
|
Port int `yaml:"port" mapstructure:"port"`
|
|
Host string `yaml:"host" mapstructure:"host"`
|
|
Sites []SiteConfig `yaml:"sites" mapstructure:"sites"`
|
|
}
|
|
|
|
type AuthConfig struct {
|
|
DevMode bool `yaml:"dev_mode" mapstructure:"dev_mode"`
|
|
Provider string `yaml:"provider" mapstructure:"provider"`
|
|
JWTSecret string `yaml:"jwt_secret" mapstructure:"jwt_secret"`
|
|
OAuthConfigs map[string]OAuthConfig `yaml:"oauth_configs" mapstructure:"oauth_configs"`
|
|
OIDC *OIDCConfig `yaml:"oidc" mapstructure:"oidc"`
|
|
}
|
|
|
|
type OAuthConfig struct {
|
|
ClientID string `yaml:"client_id" mapstructure:"client_id"`
|
|
ClientSecret string `yaml:"client_secret" mapstructure:"client_secret"`
|
|
RedirectURL string `yaml:"redirect_url" mapstructure:"redirect_url"`
|
|
Scopes []string `yaml:"scopes" mapstructure:"scopes"`
|
|
}
|
|
|
|
type OIDCConfig struct {
|
|
Endpoint string `yaml:"endpoint" mapstructure:"endpoint"`
|
|
ClientID string `yaml:"client_id" mapstructure:"client_id"`
|
|
ClientSecret string `yaml:"client_secret" mapstructure:"client_secret"`
|
|
RedirectURL string `yaml:"redirect_url" mapstructure:"redirect_url"`
|
|
Scopes []string `yaml:"scopes" mapstructure:"scopes"`
|
|
}
|
|
|
|
type SiteConfig struct {
|
|
SiteID string `yaml:"site_id" mapstructure:"site_id"`
|
|
Path string `yaml:"path" mapstructure:"path"`
|
|
SourcePath string `yaml:"source_path" mapstructure:"source_path"`
|
|
Domain string `yaml:"domain" mapstructure:"domain"`
|
|
AutoEnhance bool `yaml:"auto_enhance" mapstructure:"auto_enhance"`
|
|
Discovery *DiscoveryConfig `yaml:"discovery" mapstructure:"discovery"`
|
|
}
|
|
|
|
type DiscoveryConfig struct {
|
|
Enabled bool `yaml:"enabled" mapstructure:"enabled"`
|
|
Aggressive bool `yaml:"aggressive" mapstructure:"aggressive"`
|
|
Containers bool `yaml:"containers" mapstructure:"containers"`
|
|
Individual bool `yaml:"individual" mapstructure:"individual"`
|
|
}
|