feat: logging throughout parser

This commit is contained in:
James Houlahan
2020-08-26 16:03:33 +02:00
parent 475e673b87
commit f622ecf678
3 changed files with 26 additions and 4 deletions

View File

@ -184,6 +184,7 @@ func (su *smtpUser) Send(from string, to []string, messageReader io.Reader) (err
message, mimeBody, plainBody, attReaders, err := message.Parse(messageReader, attachedPublicKey, attachedPublicKeyName) message, mimeBody, plainBody, attReaders, err := message.Parse(messageReader, attachedPublicKey, attachedPublicKeyName)
if err != nil { if err != nil {
log.WithError(err).Error("Failed to parse message")
return return
} }
clearBody := message.Body clearBody := message.Body

View File

@ -31,33 +31,43 @@ import (
"github.com/emersion/go-message" "github.com/emersion/go-message"
"github.com/emersion/go-textwrapper" "github.com/emersion/go-textwrapper"
"github.com/jaytaylor/html2text" "github.com/jaytaylor/html2text"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
) )
func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeBody, plainBody string, attReaders []io.Reader, err error) { func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeBody, plainBody string, attReaders []io.Reader, err error) {
logrus.Debug("Parsing message")
p, err := parser.New(r) p, err := parser.New(r)
if err != nil { if err != nil {
err = errors.Wrap(err, "failed to create new parser")
return return
} }
if err = convertForeignEncodings(p); err != nil { if err = convertForeignEncodings(p); err != nil {
err = errors.Wrap(err, "failed to convert foreign encodings")
return return
} }
m = pmapi.NewMessage() m = pmapi.NewMessage()
if err = parseMessageHeader(m, p.Root().Header); err != nil { if err = parseMessageHeader(m, p.Root().Header); err != nil {
err = errors.Wrap(err, "failed to parse message header")
return return
} }
if m.Attachments, attReaders, err = collectAttachments(p); err != nil { if m.Attachments, attReaders, err = collectAttachments(p); err != nil {
err = errors.Wrap(err, "failed to collect attachments")
return return
} }
if m.Body, plainBody, err = buildBodies(p); err != nil { if m.Body, plainBody, err = buildBodies(p); err != nil {
err = errors.Wrap(err, "failed to build bodies")
return return
} }
if m.MIMEType, err = determineMIMEType(p); err != nil { if m.MIMEType, err = determineMIMEType(p); err != nil {
err = errors.Wrap(err, "failed to determine mime type")
return return
} }
@ -66,6 +76,7 @@ func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeBody, plainB
// collected as an attachment; that's already done when we upload the draft. // collected as an attachment; that's already done when we upload the draft.
if key != "" { if key != "" {
if err = attachPublicKey(p.Root(), key, keyName); err != nil { if err = attachPublicKey(p.Root(), key, keyName); err != nil {
err = errors.Wrap(err, "failed to attach public key")
return return
} }
} }
@ -73,6 +84,7 @@ func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeBody, plainB
mimeBodyBuffer := new(bytes.Buffer) mimeBodyBuffer := new(bytes.Buffer)
if err = p.NewWriter().Write(mimeBodyBuffer); err != nil { if err = p.NewWriter().Write(mimeBodyBuffer); err != nil {
err = errors.Wrap(err, "failed to write out mime message")
return return
} }
@ -80,10 +92,19 @@ func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeBody, plainB
} }
func convertForeignEncodings(p *parser.Parser) error { func convertForeignEncodings(p *parser.Parser) error {
logrus.Debug("Converting foreign encodings")
// HELP: Is it correct to only do this to text types? // HELP: Is it correct to only do this to text types?
return p.NewWalker().RegisterContentTypeHandler("text/.*", func(p *parser.Part) error { return p.NewWalker().
RegisterContentTypeHandler("text/.*", func(p *parser.Part) error {
return p.ConvertToUTF8() return p.ConvertToUTF8()
}).Walk() }).
RegisterDefaultHandler(func(p *parser.Part) error {
t, _, _ := p.Header.ContentType()
logrus.WithField("type", t).Trace("Not converting part to utf-8")
return nil
}).
Walk()
} }
func collectAttachments(p *parser.Parser) ([]*pmapi.Attachment, []io.Reader, error) { func collectAttachments(p *parser.Parser) ([]*pmapi.Attachment, []io.Reader, error) {

View File

@ -38,4 +38,4 @@ Feature: SMTP wrong messages
""" """
Then SMTP response is "SMTP error: 554 Error: transaction failed, blame it on the weather: unexpected EOF" Then SMTP response is "SMTP error: 554 Error: transaction failed, blame it on the weather: failed to create new parser: unexpected EOF"