mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-17 23:56:56 +00:00
feat: set attachment headers
This commit is contained in:
@ -24,6 +24,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
|
"net/textproto"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/ProtonMail/proton-bridge/pkg/message/parser"
|
"github.com/ProtonMail/proton-bridge/pkg/message/parser"
|
||||||
@ -40,7 +41,7 @@ func Parse(r io.Reader, key, keyName string) (m *pmapi.Message, mimeMessage, pla
|
|||||||
|
|
||||||
m = pmapi.NewMessage()
|
m = pmapi.NewMessage()
|
||||||
|
|
||||||
if err = parseHeader(m, p.Root().Header); err != nil {
|
if err = parseMessageHeader(m, p.Root().Header); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,8 +298,13 @@ func attachPublicKey(p *parser.Part, key, keyName string) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseHeader(m *pmapi.Message, h message.Header) error {
|
func parseMessageHeader(m *pmapi.Message, h message.Header) error {
|
||||||
m.Header = make(mail.Header)
|
mimeHeader, err := toMailHeader(h)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Header = mimeHeader
|
||||||
|
|
||||||
fields := h.Fields()
|
fields := h.Fields()
|
||||||
|
|
||||||
@ -308,9 +314,6 @@ func parseHeader(m *pmapi.Message, h message.Header) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Is this okay? Might need to append/split/something.
|
|
||||||
m.Header[fields.Key()] = []string{text}
|
|
||||||
|
|
||||||
switch strings.ToLower(fields.Key()) {
|
switch strings.ToLower(fields.Key()) {
|
||||||
case "subject":
|
case "subject":
|
||||||
m.Subject = text
|
m.Subject = text
|
||||||
@ -365,6 +368,13 @@ func parseHeader(m *pmapi.Message, h message.Header) error {
|
|||||||
func parseAttachment(h message.Header) (att *pmapi.Attachment, err error) {
|
func parseAttachment(h message.Header) (att *pmapi.Attachment, err error) {
|
||||||
att = &pmapi.Attachment{}
|
att = &pmapi.Attachment{}
|
||||||
|
|
||||||
|
mimeHeader, err := toMIMEHeader(h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
att.Header = mimeHeader
|
||||||
|
|
||||||
if att.MIMEType, _, err = h.ContentType(); err != nil {
|
if att.MIMEType, _, err = h.ContentType(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -385,7 +395,39 @@ func parseAttachment(h message.Header) (att *pmapi.Attachment, err error) {
|
|||||||
|
|
||||||
att.ContentID = strings.Trim(h.Get("Content-Id"), " <>")
|
att.ContentID = strings.Trim(h.Get("Content-Id"), " <>")
|
||||||
|
|
||||||
// TODO: Set att.Header
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toMailHeader(h message.Header) (mail.Header, error) {
|
||||||
|
mimeHeader := make(mail.Header)
|
||||||
|
|
||||||
|
fields := h.Fields()
|
||||||
|
|
||||||
|
for fields.Next() {
|
||||||
|
text, err := fields.Text()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
mimeHeader[fields.Key()] = []string{text}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mimeHeader, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func toMIMEHeader(h message.Header) (textproto.MIMEHeader, error) {
|
||||||
|
mimeHeader := make(textproto.MIMEHeader)
|
||||||
|
|
||||||
|
fields := h.Fields()
|
||||||
|
|
||||||
|
for fields.Next() {
|
||||||
|
text, err := fields.Text()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
mimeHeader[fields.Key()] = []string{text}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mimeHeader, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -38,7 +38,6 @@ func (p *Part) isUTF8() bool {
|
|||||||
return utf8.Valid(p.Body)
|
return utf8.Valid(p.Body)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Do we then need to set charset to utf-8? What if it's embedded in html?
|
|
||||||
func (p *Part) convertToUTF8() error {
|
func (p *Part) convertToUTF8() error {
|
||||||
t, params, err := p.Header.ContentType()
|
t, params, err := p.Header.ContentType()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -58,6 +57,7 @@ func (p *Part) convertToUTF8() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Is this okay? What about when the charset is embedded in structured text type eg html/xml?
|
||||||
params["charset"] = "utf-8"
|
params["charset"] = "utf-8"
|
||||||
p.Header.SetContentType(t, params)
|
p.Header.SetContentType(t, params)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user