45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
// This file contains code derived from https://github.com/golang/go/blob/master/src/net/http/fs.go
|
|
//
|
|
// Copyright 2020 GitLab Inc. All rights reserved.
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
|
|
package imageresizer
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func checkNotModified(r *http.Request, modtime time.Time) bool {
|
|
ims := r.Header.Get("If-Modified-Since")
|
|
if ims == "" || isZeroTime(modtime) {
|
|
// Treat bogus times as if there was no such header at all
|
|
return false
|
|
}
|
|
t, err := http.ParseTime(ims)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
// The Last-Modified header truncates sub-second precision so
|
|
// the modtime needs to be truncated too.
|
|
return !modtime.Truncate(time.Second).After(t)
|
|
}
|
|
|
|
// isZeroTime reports whether t is obviously unspecified (either zero or Unix epoch time).
|
|
func isZeroTime(t time.Time) bool {
|
|
return t.IsZero() || t.Equal(time.Unix(0, 0))
|
|
}
|
|
|
|
func setLastModified(w http.ResponseWriter, modtime time.Time) {
|
|
if !isZeroTime(modtime) {
|
|
w.Header().Set("Last-Modified", modtime.UTC().Format(http.TimeFormat))
|
|
}
|
|
}
|
|
|
|
func writeNotModified(w http.ResponseWriter) {
|
|
h := w.Header()
|
|
h.Del("Content-Type")
|
|
h.Del("Content-Length")
|
|
w.WriteHeader(http.StatusNotModified)
|
|
}
|