From 605e2a5f9c9738e6f156bbdf6efe2551550834ee Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 23 Apr 2019 00:03:20 +0300 Subject: [PATCH] cmd: add export-secret-keys --- cmd/hydroxide/hydroxide.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/cmd/hydroxide/hydroxide.go b/cmd/hydroxide/hydroxide.go index 57d1b72..b45497c 100644 --- a/cmd/hydroxide/hydroxide.go +++ b/cmd/hydroxide/hydroxide.go @@ -15,6 +15,8 @@ import ( imapserver "github.com/emersion/go-imap/server" "github.com/emersion/go-smtp" "github.com/howeyc/gopass" + "golang.org/x/crypto/openpgp" + "golang.org/x/crypto/openpgp/armor" "github.com/emersion/hydroxide/auth" "github.com/emersion/hydroxide/carddav" @@ -60,6 +62,9 @@ func main() { switch flag.Arg(0) { case "auth": username := flag.Arg(1) + if username == "" { + log.Fatal("usage: hydroxide auth ") + } c := newClient() @@ -152,6 +157,39 @@ func main() { fmt.Printf("- %v\n", u) } } + case "export-secret-keys": + username := flag.Arg(1) + if username == "" { + log.Fatal("usage: hydroxide export-secret-keys ") + } + + var bridgePassword string + fmt.Printf("Bridge password: ") + if pass, err := gopass.GetPasswd(); err != nil { + log.Fatal(err) + } else { + bridgePassword = string(pass) + } + + _, privateKeys, err := auth.NewManager(newClient).Auth(username, bridgePassword) + if err != nil { + log.Fatal(err) + } + + wc, err := armor.Encode(os.Stdout, openpgp.PrivateKeyType, nil) + if err != nil { + log.Fatal(err) + } + + for _, key := range privateKeys { + if err := key.SerializePrivate(wc, nil); err != nil { + log.Fatal(err) + } + } + + if err := wc.Close(); err != nil { + log.Fatal(err) + } case "smtp": port := os.Getenv("PORT") if port == "" {