69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
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"
|
|
config.DictFile = "dict.txt"
|
|
config.ASR.ReplacePercentage = 100
|
|
|
|
// 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)
|
|
}
|
|
|
|
if config.DictFile == "" {
|
|
config.DictFile = "dict.txt"
|
|
}
|
|
if config.ASR.ReplacePercentage < 0 {
|
|
config.ASR.ReplacePercentage = 0
|
|
}
|
|
if config.ASR.ReplacePercentage > 100 {
|
|
config.ASR.ReplacePercentage = 100
|
|
}
|
|
|
|
// 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, DictFile: %s, Proxy: {Port: %d}, Dump: {OutputDir: %s, DOI_dir: %s}, ASR: {ReplacePercentage: %d}}",
|
|
c.DomainsOfInterest, c.DictFile, c.Proxy.Port, c.Dump.OutputDir, c.Dump.DOIDir, c.ASR.ReplacePercentage)
|
|
}
|