diff --git a/middleware/templates/context.go b/middleware/templates/context.go index 10e06f63..78df7732 100644 --- a/middleware/templates/context.go +++ b/middleware/templates/context.go @@ -3,6 +3,7 @@ package templates import ( "io/ioutil" "net/http" + "time" ) // This file contains the context and functions available for @@ -11,6 +12,7 @@ import ( // context is the context with which templates are executed. type context struct { root http.FileSystem + req *http.Request } // Include returns the contents of filename relative to the site root @@ -22,3 +24,29 @@ func (c context) Include(filename string) (string, error) { body, err := ioutil.ReadAll(file) return string(body), err } + +// Date returns the current timestamp in the specified format +func (c context) Date(format string) string { + return time.Now().Format(format) +} + +// Cookie gets the value of a cookie with name name. +func (c context) Cookie(name string) string { + cookies := c.req.Cookies() + for _, cookie := range cookies { + if cookie.Name == name { + return cookie.Value + } + } + return "" +} + +// Header gets the value of a request header with field name. +func (c context) Header(name string) string { + return c.req.Header.Get(name) +} + +// RemoteAddr gets the address of the client making the request. +func (c context) RemoteAddr() string { + return c.req.RemoteAddr +} diff --git a/middleware/templates/templates.go b/middleware/templates/templates.go index 25e14216..946d5906 100644 --- a/middleware/templates/templates.go +++ b/middleware/templates/templates.go @@ -38,7 +38,7 @@ func (t Templates) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error for _, ext := range rule.Extensions { if reqExt == ext { // Create execution context - ctx := context{root: http.Dir(t.Root)} + ctx := context{root: http.Dir(t.Root), req: r} // Build the template tpl, err := template.ParseFiles(t.Root + r.URL.Path)