58 lines
1.9 KiB
Go
58 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/spf13/pflag"
|
|
)
|
|
|
|
type Config struct {
|
|
Port string
|
|
DBPath string
|
|
TargetConfig string
|
|
FilterConfig string
|
|
LogLevel string
|
|
LLMProvider string // "gemini", "deepseek", "mock"
|
|
GeminiAPIKey string
|
|
DeepSeekAPIKey string
|
|
DeepSeekBaseURL string
|
|
}
|
|
|
|
func RegisterFlags(flags *pflag.FlagSet) *Config {
|
|
cfg := &Config{}
|
|
|
|
flags.StringVarP(&cfg.Port, "port", "p", getEnvOrDefault("PORT", "8080"), "HTTP server port")
|
|
flags.StringVarP(&cfg.DBPath, "db", "d", getEnvOrDefault("DB_PATH", "data/db/hireme.db"), "Path to database file")
|
|
flags.StringVarP(&cfg.TargetConfig, "target-config", "c", getEnvOrDefault("TARGET_CONFIG", "data/config/targets.yaml"), "Path to targets YAML file")
|
|
flags.StringVarP(&cfg.FilterConfig, "filter-config", "f", getEnvOrDefault("FILTER_CONFIG", "data/config/filters.yaml"), "Path to filters YAML file")
|
|
flags.StringVar(&cfg.LogLevel, "log-level", getEnvOrDefault("LOG_LEVEL", "info"), "Logging level (trace, debug, info, error)")
|
|
flags.StringVarP(&cfg.LLMProvider, "llm-provider", "l", getEnvOrDefault("LLM_PROVIDER", ""), "Active LLM Provider (gemini, deepseek, mock)")
|
|
flags.StringVar(&cfg.GeminiAPIKey, "gemini-api-key", os.Getenv("GEMINI_API_KEY"), "Gemini API Key")
|
|
flags.StringVar(&cfg.DeepSeekAPIKey, "deepseek-api-key", os.Getenv("DEEPSEEK_API_KEY"), "DeepSeek API Key")
|
|
flags.StringVar(&cfg.DeepSeekBaseURL, "deepseek-base-url", getEnvOrDefault("DEEPSEEK_BASE_URL", "https://api.deepseek.com"), "DeepSeek Base URL")
|
|
|
|
return cfg
|
|
}
|
|
|
|
func (c *Config) Normalize() {
|
|
if c.LLMProvider == "" {
|
|
if c.GeminiAPIKey != "" {
|
|
c.LLMProvider = "gemini"
|
|
} else if c.DeepSeekAPIKey != "" {
|
|
c.LLMProvider = "deepseek"
|
|
} else {
|
|
c.LLMProvider = "mock"
|
|
}
|
|
}
|
|
c.LLMProvider = strings.ToLower(c.LLMProvider)
|
|
}
|
|
|
|
func getEnvOrDefault(key, defaultValue string) string {
|
|
val := os.Getenv(key)
|
|
if val != "" {
|
|
return val
|
|
}
|
|
return defaultValue
|
|
}
|