mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-10-31 22:58:59 +01:00
do not add text/plain inline attachments as attachments to the comment
text/plain inline attachments are parsed into the body of the comment, so we do not add them as an attachment to avoid duplicates The test for the signature has been changed. Messages are now no longer cut off after "-", "--" or "---", which may cause some signatures to be added to the comment, but it's better to add a little more rather than cut off important content. Everything after more than 4 "-" are cut off. "--" is used as a separator between inline attachments "---" is also often used by users to separate paragraphs
This commit is contained in:
parent
3f14058a7a
commit
713eb62bc1
2 changed files with 18 additions and 6 deletions
|
@ -379,7 +379,7 @@ func getContentFromMailReader(env *enmime.Envelope) *MailContent {
|
||||||
}
|
}
|
||||||
inlineAttachments := make([]*Attachment, 0, len(env.Inlines))
|
inlineAttachments := make([]*Attachment, 0, len(env.Inlines))
|
||||||
for _, inline := range env.Inlines {
|
for _, inline := range env.Inlines {
|
||||||
if inline.FileName != "" {
|
if inline.FileName != "" && inline.ContentType != "text/plain" {
|
||||||
inlineAttachments = append(inlineAttachments, &Attachment{
|
inlineAttachments = append(inlineAttachments, &Attachment{
|
||||||
Name: inline.FileName,
|
Name: inline.FileName,
|
||||||
Content: inline.Content,
|
Content: inline.Content,
|
||||||
|
|
|
@ -125,15 +125,27 @@ func TestGetContentFromMailReader(t *testing.T) {
|
||||||
"Content-Disposition: inline; filename=attachment.txt\r\n" +
|
"Content-Disposition: inline; filename=attachment.txt\r\n" +
|
||||||
"\r\n" +
|
"\r\n" +
|
||||||
"attachment content\r\n" +
|
"attachment content\r\n" +
|
||||||
|
"--message-boundary\r\n" +
|
||||||
|
"Content-Type: text/html\r\n" +
|
||||||
|
"Content-Disposition: inline; filename=attachment.html\r\n" +
|
||||||
|
"\r\n" +
|
||||||
|
"<p>html attachment content</p>\r\n" +
|
||||||
|
"--message-boundary\r\n" +
|
||||||
|
"Content-Type: image/png\r\n" +
|
||||||
|
"Content-Disposition: inline; filename=attachment.png\r\n" +
|
||||||
|
"Content-Transfer-Encoding: base64\r\n" +
|
||||||
|
"\r\n" +
|
||||||
|
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII\r\n" +
|
||||||
"--message-boundary--\r\n"
|
"--message-boundary--\r\n"
|
||||||
|
|
||||||
env, err = enmime.ReadEnvelope(strings.NewReader(mailString))
|
env, err = enmime.ReadEnvelope(strings.NewReader(mailString))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
content = getContentFromMailReader(env)
|
content = getContentFromMailReader(env)
|
||||||
assert.Equal(t, "mail content", content.Content)
|
assert.Equal(t, "mail content\n--\nattachment content", content.Content)
|
||||||
assert.Len(t, content.Attachments, 1)
|
assert.Len(t, content.Attachments, 2)
|
||||||
assert.Equal(t, "attachment.txt", content.Attachments[0].Name)
|
assert.Equal(t, "attachment.html", content.Attachments[0].Name)
|
||||||
assert.Equal(t, []byte("attachment content"), content.Attachments[0].Content)
|
assert.Equal(t, []byte("<p>html attachment content</p>"), content.Attachments[0].Content)
|
||||||
|
assert.Equal(t, "attachment.png", content.Attachments[1].Name)
|
||||||
|
|
||||||
mailString = "Content-Type: multipart/mixed; boundary=message-boundary\r\n" +
|
mailString = "Content-Type: multipart/mixed; boundary=message-boundary\r\n" +
|
||||||
"\r\n" +
|
"\r\n" +
|
||||||
|
@ -164,7 +176,7 @@ func TestGetContentFromMailReader(t *testing.T) {
|
||||||
"Content-Disposition: inline\r\n" +
|
"Content-Disposition: inline\r\n" +
|
||||||
"\r\n" +
|
"\r\n" +
|
||||||
"mail content without signature\r\n" +
|
"mail content without signature\r\n" +
|
||||||
"--\r\n" +
|
"----\r\n" +
|
||||||
"signature\r\n" +
|
"signature\r\n" +
|
||||||
"--text-boundary--\r\n" +
|
"--text-boundary--\r\n" +
|
||||||
"--message-boundary--\r\n"
|
"--message-boundary--\r\n"
|
||||||
|
|
Loading…
Reference in a new issue