package main import ( "github.com/fsnotify/fsnotify" "flag" "log" "os" "encoding/json" ) type Cert struct { PrivateKey string PublicKey string Owner string } type Config struct { Source Cert Target Cert Reload string } func LoadConfig(path string) Config { var config Config config_data, err := os.ReadFile(path) if err != nil { log.Fatal("invalid config path %s: %v", path, err) } err = json.Unmarshal(config_data, &config) if err != nil { log.Fatal(err, "json format error") } return config } func ParseOpts() Config { var config_file string flag.StringVar(&config_file, "config", "cert-bouncer.json", ".json config to use.") flag.Parse() return LoadConfig(config_file) } func main() { config := ParseOpts() watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err, "Can't watch files.") } err = watcher.Add(config.Source.PrivateKey) if err != nil { log.Fatalf("can't watch %s: %v", err, config.Source.PrivateKey) } }