mitm/config.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)
}