summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Ganardi <ray@ganardi.xyz>2020-05-19 13:06:46 +0200
committerDrew DeVault <sir@cmpwn.com>2020-05-25 09:30:20 -0400
commit58db517c8d79c7fd8897d8ab5d5cf9c2de67a071 (patch)
tree775b2d74bda2ea10795b9dffa60afb66c36a90b8
parent83e7c7661dfe42e75641d764d713d144c2d7c6ce (diff)
downloadaerc-58db517c8d79c7fd8897d8ab5d5cf9c2de67a071.zip
pgp: fail gracefully from email decryption
Aerc panics when there's an error on email decryption. Instead, an error message should be shown.
-rw-r--r--commands/account/view.go6
-rw-r--r--commands/msg/delete.go6
-rw-r--r--commands/msgview/next.go6
-rw-r--r--lib/messageview.go18
-rw-r--r--widgets/msglist.go6
5 files changed, 31 insertions, 11 deletions
diff --git a/commands/account/view.go b/commands/account/view.go
index d1b90ce..b421666 100644
--- a/commands/account/view.go
+++ b/commands/account/view.go
@@ -39,7 +39,11 @@ func (ViewMessage) Execute(aerc *widgets.Aerc, args []string) error {
return nil
}
lib.NewMessageStoreView(msg, store, aerc.DecryptKeys,
- func(view lib.MessageView) {
+ func(view lib.MessageView, err error) {
+ if err != nil {
+ aerc.PushError(err.Error())
+ return
+ }
viewer := widgets.NewMessageViewer(acct, aerc.Config(), view)
aerc.NewTab(viewer, msg.Envelope.Subject)
})
diff --git a/commands/msg/delete.go b/commands/msg/delete.go
index 313e3ea..4bda8b9 100644
--- a/commands/msg/delete.go
+++ b/commands/msg/delete.go
@@ -66,7 +66,11 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
return nil
}
lib.NewMessageStoreView(next, store, aerc.DecryptKeys,
- func(view lib.MessageView) {
+ func(view lib.MessageView, err error) {
+ if err != nil {
+ aerc.PushError(err.Error())
+ return
+ }
nextMv := widgets.NewMessageViewer(acct, aerc.Config(), view)
aerc.ReplaceTab(mv, nextMv, next.Envelope.Subject)
})
diff --git a/commands/msgview/next.go b/commands/msgview/next.go
index c218ad5..978cf10 100644
--- a/commands/msgview/next.go
+++ b/commands/msgview/next.go
@@ -38,7 +38,11 @@ func (NextPrevMsg) Execute(aerc *widgets.Aerc, args []string) error {
return nil
}
lib.NewMessageStoreView(nextMsg, store, aerc.DecryptKeys,
- func(view lib.MessageView) {
+ func(view lib.MessageView, err error) {
+ if err != nil {
+ aerc.PushError(err.Error())
+ return
+ }
nextMv := widgets.NewMessageViewer(acct, aerc.Config(), view)
aerc.ReplaceTab(mv, nextMv, nextMsg.Envelope.Subject)
})
diff --git a/lib/messageview.go b/lib/messageview.go
index 59a1af6..384a947 100644
--- a/lib/messageview.go
+++ b/lib/messageview.go
@@ -59,7 +59,7 @@ type MessageStoreView struct {
func NewMessageStoreView(messageInfo *models.MessageInfo,
store *MessageStore, decryptKeys openpgp.PromptFunction,
- cb func(MessageView)) {
+ cb func(MessageView, error)) {
msv := &MessageStoreView{messageInfo, store,
nil, nil, messageInfo.BodyStructure}
@@ -69,26 +69,30 @@ func NewMessageStoreView(messageInfo *models.MessageInfo,
reader := fm.Content.Reader
pgpReader, err := pgpmail.Read(reader, Keyring, decryptKeys, nil)
if err != nil {
- panic(err)
+ cb(nil, err)
+ return
}
msv.message, err = ioutil.ReadAll(pgpReader.MessageDetails.UnverifiedBody)
if err != nil {
- panic(err)
+ cb(nil, err)
+ return
}
decrypted, err := message.Read(bytes.NewBuffer(msv.message))
if err != nil {
- panic(err)
+ cb(nil, err)
+ return
}
bs, err := lib.ParseEntityStructure(decrypted)
if err != nil {
- panic(err)
+ cb(nil, err)
+ return
}
msv.bodyStructure = bs
msv.details = pgpReader.MessageDetails
- cb(msv)
+ cb(msv, nil)
})
} else {
- cb(msv)
+ cb(msv, nil)
}
store.Read([]uint32{messageInfo.Uid}, true, nil)
}
diff --git a/widgets/msglist.go b/widgets/msglist.go
index f36901f..5aedb44 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -166,7 +166,11 @@ func (ml *MessageList) MouseEvent(localX int, localY int, event tcell.Event) {
return
}
lib.NewMessageStoreView(msg, store, ml.aerc.DecryptKeys,
- func(view lib.MessageView) {
+ func(view lib.MessageView, err error) {
+ if err != nil {
+ ml.aerc.PushError(err.Error())
+ return
+ }
viewer := NewMessageViewer(acct, ml.aerc.Config(), view)
ml.aerc.NewTab(viewer, msg.Envelope.Subject)
})