browsers request application/xml on their Accept: headers by default, which causes status to return XML to them instead of falling back to SVG
63 lines
1014 B
Go
63 lines
1014 B
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
type MimeHeader struct {
|
|
MimeHeader string
|
|
}
|
|
|
|
const (
|
|
JsonMime = "application/json"
|
|
XmlMime = "application/obs+xml"
|
|
SvgMime = "image/svg+xml"
|
|
)
|
|
|
|
var AcceptedStatusMimes []string = []string{
|
|
SvgMime,
|
|
JsonMime,
|
|
XmlMime,
|
|
}
|
|
|
|
func ParseMimeHeader(req *http.Request) *MimeHeader {
|
|
proposedMimes := req.Header.Values("Accept")
|
|
mime := MimeHeader{MimeHeader: SvgMime}
|
|
if len(proposedMimes) == 0 {
|
|
return &mime
|
|
}
|
|
|
|
for _, m := range proposedMimes {
|
|
for _, am := range AcceptedStatusMimes {
|
|
if strings.Contains(m, am) {
|
|
mime.MimeHeader = am
|
|
return &mime
|
|
}
|
|
}
|
|
}
|
|
return &mime
|
|
}
|
|
|
|
func (m *MimeHeader) IsJson() bool {
|
|
return m.MimeHeader == JsonMime
|
|
}
|
|
|
|
func (m *MimeHeader) IsXml() bool {
|
|
return m.MimeHeader == XmlMime
|
|
}
|
|
|
|
func (m *MimeHeader) IsSvg() bool {
|
|
return m.MimeHeader == SvgMime
|
|
}
|
|
|
|
func (m *MimeHeader) MimeType() string {
|
|
if m.IsJson() {
|
|
return JsonMime
|
|
} else if m.IsXml() {
|
|
return XmlMime
|
|
}
|
|
|
|
return SvgMime // default
|
|
}
|