From 57699b1fa6367a42d5877afcfdb1504e52835ed9 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Mon, 25 Apr 2022 08:30:44 -0500 Subject: feat: add gpg integration This commit adds gpg system integration. This is done through two new packages: gpgbin, which handles the system calls and parsing; and gpg which is mostly a copy of emersion/go-pgpmail with modifications to interface with package gpgbin. gpg includes tests for many cases, and by it's nature also tests package gpgbin. I separated these in case an external dependency is ever used for the gpg sys-calls/parsing (IE we mirror how go-pgpmail+openpgp currently are dependencies) Two new config options are introduced: * pgp-provider. If it is not explicitly set to "gpg", aerc will default to it's internal pgp provider * pgp-key-id: (Optionally) specify a key by short or long keyId Signed-off-by: Tim Culverhouse Acked-by: Koni Marti Acked-by: Robin Jarry --- config/aerc.conf | 6 ++++++ config/config.go | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'config') diff --git a/config/aerc.conf b/config/aerc.conf index 00c6c49..1a3c1f4 100644 --- a/config/aerc.conf +++ b/config/aerc.conf @@ -3,6 +3,12 @@ [general] # +# If set to "gpg", aerc will use system gpg binary and keystore for all crypto +# operations. Otherwise, the internal openpgp implemenation will be used. +# +# Default: internal +pgp-provider=internal + # By default, the file permissions of accounts.conf must be restrictive and # only allow reading by the file owner (0600). Set this option to true to # ignore this permission check. Use this with care as it may expose your diff --git a/config/config.go b/config/config.go index 0c9a40f..8480f10 100644 --- a/config/config.go +++ b/config/config.go @@ -104,6 +104,7 @@ type AccountConfig struct { SignatureCmd string EnableFoldersSort bool `ini:"enable-folders-sort"` FoldersSort []string `ini:"folders-sort" delim:","` + PgpKeyId string `ini:"pgp-key-id"` } type BindingConfig struct { @@ -248,6 +249,8 @@ func loadAccountConfig(path string) ([]AccountConfig, error) { account.Archive = val } else if key == "enable-folders-sort" { account.EnableFoldersSort, _ = strconv.ParseBool(val) + } else if key == "pgp-key-id" { + account.PgpKeyId = val } else if key != "name" { account.Params[key] = val } @@ -582,13 +585,14 @@ func validateBorderChars(section *ini.Section, config *UIConfig) error { func validatePgpProvider(section *ini.Section) error { m := map[string]bool{ + "gpg": true, "internal": true, } for key, val := range section.KeysHash() { switch key { case "pgp-provider": if !m[strings.ToLower(val)] { - return fmt.Errorf("%v must be 'internal'", key) + return fmt.Errorf("%v must be either 'gpg' or 'internal'", key) } } } -- cgit v1.2.3