Fix bugs in header parsing

This commit is contained in:
Ian Kent 2014-04-26 12:16:57 +01:00
parent 73088ab400
commit 05b50913c1
2 changed files with 44 additions and 25 deletions

View file

@ -117,24 +117,35 @@ func PathFromString(path string) *Path {
func ContentFromString(data string) *Content {
log.Printf("Parsing Content from string: '%s'", data)
x := strings.SplitN(data, "\r\n\r\n", 2)
headers, body := x[0], x[1]
h := make(map[string][]string, 0)
if len(x) == 2 {
headers, body := x[0], x[1]
hdrs := strings.Split(headers, "\r\n")
var lastHdr = ""
for _, hdr := range hdrs {
if(strings.Contains(hdr, ": ")) {
if lastHdr != "" && strings.HasPrefix(hdr, " ") {
h[lastHdr][len(h[lastHdr])-1] = h[lastHdr][len(h[lastHdr])-1] + hdr
} else if strings.Contains(hdr, ": ") {
y := strings.SplitN(hdr, ": ", 2)
key, value := y[0], y[1]
// TODO multiple header fields
h[key] = []string{value}
lastHdr = key
} else {
log.Printf("Found invalid header: '%s'", hdr)
}
}
return &Content{
Size: len(data),
Headers: h,
Body: body,
}
} else {
return &Content{
Size: len(data),
Headers: h,
Body: x[0],
}
}
}

View file

@ -33,12 +33,16 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce) {
if(message.MIME) {
for(var p in message.MIME.Parts) {
if(message.MIME.Parts[p].Headers["Content-Type"][0] == "text/plain") {
if("Content-Type" in message.MIME.Parts[p].Headers) {
if(message.MIME.Parts[p].Headers["Content-Type"].length > 0) {
if(message.MIME.Parts[p].Headers["Content-Type"][0].match(/text\/plain;?.*/)) {
part = message.MIME.Parts[p];
break;
}
}
}
}
}
if(!part) part = message.Content;
@ -49,12 +53,16 @@ mailhogApp.controller('MailCtrl', function ($scope, $http, $sce) {
if(message.MIME) {
for(var p in message.MIME.Parts) {
if(message.MIME.Parts[p].Headers["Content-Type"][0] == "text/html") {
if("Content-Type" in message.MIME.Parts[p].Headers) {
if(message.MIME.Parts[p].Headers["Content-Type"].length > 0) {
if(message.MIME.Parts[p].Headers["Content-Type"][0].match(/text\/html;?.*/)) {
part = message.MIME.Parts[p];
break;
}
}
}
}
}
if(!part) part = message.Content;