From 1a6ea693b5273111bb896bc3131e03aaaa84573e Mon Sep 17 00:00:00 2001 From: Donal Byrne Date: Wed, 25 Mar 2015 14:47:20 +0100 Subject: [PATCH] Added to input.go: AcceptHtml, AcceptsXml and AcceptsJson functions which check the header agains a regex for simpler mult-content-type handling. --- context/input.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/context/input.go b/context/input.go index f535e6a2..95f56c1f 100644 --- a/context/input.go +++ b/context/input.go @@ -21,12 +21,21 @@ import ( "net/http" "net/url" "reflect" + "regexp" "strconv" "strings" "github.com/astaxie/beego/session" ) +// Regexes for checking the accept headers +// TODO make sure these are correct +var ( + acceptsHtmlRegex = regexp.MustCompile(`(text/html|application/xhtml\+xml)(?:,|$)`) + acceptsXmlRegex = regexp.MustCompile(`(application/xml|text/xml)(?:,|$)`) + acceptsJsonRegex = regexp.MustCompile(`(application/json)(?:,|$)?`) +) + // BeegoInput operates the http request header, data, cookie and body. // it also contains router params and current session. type BeegoInput struct { @@ -163,6 +172,21 @@ func (input *BeegoInput) IsUpload() bool { return strings.Contains(input.Header("Content-Type"), "multipart/form-data") } +// Checks if request accepts html response +func (input *BeegoInput) AcceptsHtml() bool { + return acceptsHtmlRegex.MatchString(input.Header("Accept")) +} + +// Checks if request accepts xml response +func (input *BeegoInput) AcceptsXml() bool { + return acceptsXmlRegex.MatchString(input.Header("Accept")) +} + +// Checks if request accepts json response +func (input *BeegoInput) AcceptsJson() bool { + return acceptsJsonRegex.MatchString(input.Header("Accept")) +} + // IP returns request client ip. // if in proxy, return first proxy id. // if error, return 127.0.0.1.