Skip to content

Commit

Permalink
forward: select correct part for signed messages
Browse files Browse the repository at this point in the history
Select the correct body part for signed messages when forwarding.

Fixes: https://todo.sr.ht/~rjarry/aerc/214
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
  • Loading branch information
konimarti authored and rjarry committed Jan 21, 2024
1 parent b97d6a8 commit 2d8b81f
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions commands/msg/forward.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/config"
"git.sr.ht/~rjarry/aerc/lib"
"git.sr.ht/~rjarry/aerc/lib/crypto"
"git.sr.ht/~rjarry/aerc/lib/format"
"git.sr.ht/~rjarry/aerc/log"
"git.sr.ht/~rjarry/aerc/models"
Expand Down Expand Up @@ -147,6 +148,22 @@ func (f forward) Execute(args []string) error {
f.Template = config.Templates.Forwards
}

var fetchBodyPart func([]int, func(io.Reader))

mv, isMsgViewer := widget.(*app.MessageViewer)
if isMsgViewer {
fetchBodyPart = mv.MessageView().FetchBodyPart
} else {
fetchBodyPart = func(part []int, cb func(io.Reader)) {
store.FetchBodyPart(msg.Uid, part, cb)
}
}

if crypto.IsEncrypted(msg.BodyStructure) && !isMsgViewer {
return fmt.Errorf("message is encrypted. " +
"can only forward from the message viewer")
}

part := getMessagePart(msg, widget)
if part == nil {
part = lib.FindFirstNonMultipart(msg.BodyStructure, nil)
Expand All @@ -157,7 +174,8 @@ func (f forward) Execute(args []string) error {
if err != nil {
return err
}
store.FetchBodyPart(msg.Uid, part, func(reader io.Reader) {

fetchBodyPart(part, func(reader io.Reader) {
buf := new(bytes.Buffer)
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
Expand All @@ -184,7 +202,7 @@ func (f forward) Execute(args []string) error {
log.Errorf("cannot get PartAtIndex %v: %v", p, err)
continue
}
store.FetchBodyPart(msg.Uid, p, func(reader io.Reader) {
fetchBodyPart(p, func(reader io.Reader) {
mime := bs.FullMIMEType()
params := lib.SetUtf8Charset(bs.Params)
name, ok := params["name"]
Expand Down

0 comments on commit 2d8b81f

Please sign in to comment.