package main import ( "fmt" "os" "github.com/BurntSushi/toml" ) // parseConfig parses the TOML configuration file using BurntSushi/toml func parseConfig(filename string) (*Config, error) { config := &Config{ DomainsOfInterest: []string{}, } // Set default values config.Proxy.Port = 8080 config.Dump.OutputDir = "traffic_dumps" config.Dump.DOIDir = "interest_dumps" // Parse the TOML file _, err := toml.DecodeFile(filename, config) if err != nil { return nil, fmt.Errorf("failed to parse config file %s: %v", filename, err) } // Create dump directories if they don't exist if err := createDumpDirectories(config); err != nil { return nil, fmt.Errorf("failed to create dump directories: %v", err) } return config, nil } // createDumpDirectories creates the dump directories if they don't exist func createDumpDirectories(config *Config) error { directories := []string{ config.Dump.OutputDir, config.Dump.DOIDir, } for _, dir := range directories { if dir != "" { if err := os.MkdirAll(dir, 0755); err != nil { return fmt.Errorf("failed to create directory %s: %v", dir, err) } } } return nil } func (c *Config) String() string { return fmt.Sprintf("Config{DomainsOfInterest: %v, Proxy: {Port: %d}, Dump: {OutputDir: %s, DOI_dir: %s}}", c.DomainsOfInterest, c.Proxy.Port, c.Dump.OutputDir, c.Dump.DOIDir) }