gpg: don't send messages that failed encryption
Add error handling for messages that were unable to be encrypted. Previously, messages that failed encryption would be sent with no content. This patch adds error handling - when encryption fails, the user is returned to the Review screen and instructed to check the public keys for their recipients. Reported-by: Moritz Poldrack <moritz@poldrack.dev> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
This commit is contained in:
parent
96db50c4f0
commit
6a10123f4a
|
@ -2,6 +2,7 @@ package gpgbin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"git.sr.ht/~rjarry/aerc/models"
|
"git.sr.ht/~rjarry/aerc/models"
|
||||||
|
@ -27,7 +28,10 @@ func Encrypt(r io.Reader, to []string, from string) ([]byte, error) {
|
||||||
g.cmd.Run()
|
g.cmd.Run()
|
||||||
outRdr := bytes.NewReader(g.stdout.Bytes())
|
outRdr := bytes.NewReader(g.stdout.Bytes())
|
||||||
var md models.MessageDetails
|
var md models.MessageDetails
|
||||||
parse(outRdr, &md)
|
err := parse(outRdr, &md)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("gpg: failure to encrypt: %v. check public key(s)", err)
|
||||||
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
io.Copy(&buf, md.Body)
|
io.Copy(&buf, md.Body)
|
||||||
|
|
||||||
|
|
|
@ -228,6 +228,8 @@ func parse(r io.Reader, md *models.MessageDetails) error {
|
||||||
md.Micalg = micalgs[micalg]
|
md.Micalg = micalgs[micalg]
|
||||||
case "NODATA":
|
case "NODATA":
|
||||||
md.SignatureError = "gpg: no signature packet found"
|
md.SignatureError = "gpg: no signature packet found"
|
||||||
|
case "FAILURE":
|
||||||
|
return fmt.Errorf(strings.TrimPrefix(line, "[GNUPG:] "))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
md.Body = bytes.NewReader(msgContent)
|
md.Body = bytes.NewReader(msgContent)
|
||||||
|
|
|
@ -598,7 +598,10 @@ func (c *Composer) WriteMessage(header *mail.Header, writer io.Writer) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cleartext.Close()
|
err = cleartext.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
io.Copy(writer, &buf)
|
io.Copy(writer, &buf)
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue