diff --git a/src/cli/init.go b/src/cli/init.go index af953eb..9ee9af9 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -9,14 +9,14 @@ func TempInitCli() { // gpgID var gpgID string if inputBinary("Auto-generate GPG key?") { - offline.GpgKeyGen() + gpgID = offline.GpgKeyGen() + } else { + // select GPG key from menu + uidSlice := offline.GpgUIDListGen() + gpgIDInt := inputMenuGen("Select GPG key:", uidSlice) + gpgID = uidSlice[gpgIDInt-1] } - // select GPG key - uidSlice := offline.GpgUIDListGen() - gpgIDInt := inputMenuGen("Select GPG key:", uidSlice) - gpgID = uidSlice[gpgIDInt-1] - // textEditor textEditor := input("Text editor (leave blank for $EDITOR, falls back to \"" + offline.FallbackEditor + "\"):") diff --git a/src/offline/init.go b/src/offline/init.go index 7672581..f75b3c8 100644 --- a/src/offline/init.go +++ b/src/offline/init.go @@ -3,7 +3,9 @@ package offline import ( "os" "os/exec" + "strconv" "strings" + "time" ) // TempInit ensures libmutton directories exist and writes the libmutton configuration file @@ -44,13 +46,14 @@ func GpgUIDListGen() []string { return uidSlice } -// GpgKeyGen generates a new GPG key - it does not return it due to GPG's unreliable output -func GpgKeyGen() { +// GpgKeyGen generates a new GPG key and returns the key ID +func GpgKeyGen() string { gpgGenTempFile := CreateTempFile() defer os.Remove(gpgGenTempFile.Name()) // create and write gpg-gen file - gpgGenTempFile.WriteString(strings.Join([]string{"Key-Type: eddsa", "Key-Curve: ed25519", "Key-Usage: sign", "Subkey-Type: ecdh", "Subkey-Curve: cv25519", "Subkey-Usage: encrypt", "Name-Real: libmutton", "Name-Comment: gpg-libmutton", "Name-Email: github.com/rwinkhart/libmutton", "Expire-Date: 0"}, "\n")) + unixTime := strconv.FormatInt(time.Now().Unix(), 10) + gpgGenTempFile.WriteString(strings.Join([]string{"Key-Type: eddsa", "Key-Curve: ed25519", "Key-Usage: sign", "Subkey-Type: ecdh", "Subkey-Curve: cv25519", "Subkey-Usage: encrypt", "Name-Real: libmutton-" + unixTime, "Name-Comment: gpg-libmutton", "Name-Email: github.com/rwinkhart/libmutton", "Expire-Date: 0"}, "\n")) // generate GPG key based on gpg-gen file cmd := exec.Command("gpg", "-q", "--batch", "--generate-key", gpgGenTempFile.Name()) @@ -58,4 +61,6 @@ func GpgKeyGen() { cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin cmd.Run() + + return "libmutton-" + unixTime + " (gpg-libmutton) " }