// aerotun-keygen creates an identity on its owner host without printing secrets. package main import ( "encoding/json" "flag" "fmt" "log" "os" "debtik/internal/aerotun" ) func main() { out := flag.String("out", "", "new identity JSON path (created once with mode 0600)") flag.Parse() if *out == "" { flag.Usage() os.Exit(2) } private, public, err := aerotun.GenerateIdentity() if err != nil { log.Fatal(err) } data, err := json.MarshalIndent(map[string]string{"private_key": private, "public_key": public}, "", " ") if err != nil { log.Fatal(err) } f, err := os.OpenFile(*out, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) if err != nil { log.Fatal(err) } if _, err = f.Write(data); err != nil { f.Close() os.Remove(*out) log.Fatal(err) } if err = f.Sync(); err != nil { f.Close() os.Remove(*out) log.Fatal(err) } if err = f.Close(); err != nil { log.Fatal(err) } fmt.Println(public) }