package config import ( "flag" "fmt" "net" ) type Config struct { HTTPHost string HTTPPort int UDPHost string UDPPort int MaintenanceIP string MaintenanceCIDR string AdminPassword string AgentVersion string DeviceIDFallback string } func Load(args []string) Config { cfg := Config{ HTTPHost: "0.0.0.0", HTTPPort: 48888, UDPHost: "0.0.0.0", UDPPort: 50000, MaintenanceIP: "169.254.100.2", MaintenanceCIDR: "169.254.100.2/16", AdminPassword: "Dt123$", AgentVersion: "0.1.0", DeviceIDFallback: "quickip-device", } fs := flag.NewFlagSet("quickip-agent", flag.ContinueOnError) fs.StringVar(&cfg.MaintenanceIP, "ip", cfg.MaintenanceIP, "maintenance IPv4 address") fs.IntVar(&cfg.HTTPPort, "port", cfg.HTTPPort, "HTTP listen port") fs.StringVar(&cfg.AdminPassword, "password", cfg.AdminPassword, "admin password") _ = fs.Parse(args) if parsed := net.ParseIP(cfg.MaintenanceIP); parsed == nil || parsed.To4() == nil { panic(fmt.Sprintf("invalid maintenance ip: %s", cfg.MaintenanceIP)) } cfg.MaintenanceCIDR = fmt.Sprintf("%s/16", cfg.MaintenanceIP) return cfg }