diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-03-21 14:17:34 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-03-21 14:17:34 -0700 |
commit | e7b51324f2578cc9c1ef4eeababfcec14162a3e9 (patch) | |
tree | bd3b186a88f3f6add0bcb377fbf5353e69fb2d26 | |
parent | 7676659cdd5336c3eebd668d4d69571609c88f38 (diff) |
adding cache-control age and disabler
-rw-r--r-- | system/admin/config/config.go | 15 | ||||
-rw-r--r-- | system/db/cache.go | 32 | ||||
-rw-r--r-- | system/db/config.go | 5 |
3 files changed, 41 insertions, 11 deletions
diff --git a/system/admin/config/config.go b/system/admin/config/config.go index d623592..015c081 100644 --- a/system/admin/config/config.go +++ b/system/admin/config/config.go @@ -18,6 +18,8 @@ type Config struct { Etag string `json:"etag"` DisableCORS bool `json:"cors_disabled"` DisableGZIP bool `json:"gzip_disabled"` + DisableHTTPCache bool `json:"cache_disabled"` + CacheMaxAge int64 `json:"cache_max_age"` CacheInvalidate []string `json:"cache"` BackupBasicAuthUser string `json:"backup_basic_auth_user"` BackupBasicAuthPassword string `json:"backup_basic_auth_password"` @@ -100,6 +102,19 @@ func (c *Config) MarshalEditor() ([]byte, error) { }), }, editor.Field{ + View: editor.Checkbox("DisableHTTPCache", c, map[string]string{ + "label": "Disable HTTP Cache (overrides 'Cache-Control' header)", + }, map[string]string{ + "true": "Disable HTTP Cache", + }), + }, + editor.Field{ + View: editor.Input("CacheMaxAge", c, map[string]string{ + "label": "Max-Age value for HTTP caching (in seconds, 0 = 2592000)", + "type": "text", + }), + }, + editor.Field{ View: editor.Checkbox("CacheInvalidate", c, map[string]string{ "label": "Invalidate cache on save", }, map[string]string{ diff --git a/system/db/cache.go b/system/db/cache.go index 0120147..55dd42a 100644 --- a/system/db/cache.go +++ b/system/db/cache.go @@ -11,19 +11,29 @@ import ( // CacheControl sets the default cache policy on static asset responses func CacheControl(next http.Handler) http.HandlerFunc { return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { - etag := ConfigCache("etag").(string) - policy := fmt.Sprintf("max-age=%d, public", 60*60*24*30) - res.Header().Add("ETag", etag) - res.Header().Add("Cache-Control", policy) - - if match := req.Header.Get("If-None-Match"); match != "" { - if strings.Contains(match, etag) { - res.WriteHeader(http.StatusNotModified) - return + cacheDisabled := ConfigCache("cache_disabled").(bool) + if cacheDisabled { + res.Header().Add("Cache-Control", "no-cache") + next.ServeHTTP(res, req) + } else { + age := ConfigCache("cache_max_age").(int64) + etag := ConfigCache("etag").(string) + if age == 0 { + age = DefaultMaxAge + } + policy := fmt.Sprintf("max-age=%d, public", age) + res.Header().Add("ETag", etag) + res.Header().Add("Cache-Control", policy) + + if match := req.Header.Get("If-None-Match"); match != "" { + if strings.Contains(match, etag) { + res.WriteHeader(http.StatusNotModified) + return + } } - } - next.ServeHTTP(res, req) + next.ServeHTTP(res, req) + } }) } diff --git a/system/db/config.go b/system/db/config.go index 2706e97..6a409c2 100644 --- a/system/db/config.go +++ b/system/db/config.go @@ -13,6 +13,11 @@ import ( "github.com/gorilla/schema" ) +const ( + // DefaultMaxAge provides a 2592000 second (30-day) cache max-age setting + DefaultMaxAge = int64(60 * 60 * 24 * 30) +) + var configCache map[string]interface{} func init() { |