arimelody.me/global/global.go
ari melody a26bdfa646 slowly but surely fixing routing and layout handling
Signed-off-by: ari melody <ari@arimelody.me>
2024-08-31 01:52:32 +01:00

60 lines
1.3 KiB
Go

package global
import (
"fmt"
"net/http"
"strconv"
"time"
)
var LAST_MODIFIED = time.Now()
func IsModified(req *http.Request, last_modified time.Time) bool {
if len(req.Header["If-Modified-Since"]) == 0 || len(req.Header["If-Modified-Since"][0]) == 0 {
return true
}
request_time, err := time.Parse(http.TimeFormat, req.Header["If-Modified-Since"][0])
if err != nil {
return true
}
if request_time.Before(last_modified) {
return true
}
return false
}
type loggingResponseWriter struct {
http.ResponseWriter
code int
}
func (lw *loggingResponseWriter) WriteHeader(code int) {
lw.code = code
lw.ResponseWriter.WriteHeader(code)
}
func HTTPLog(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
lw := loggingResponseWriter{w, http.StatusOK}
next.ServeHTTP(&lw, r)
after := time.Now()
difference := (after.Nanosecond() - start.Nanosecond()) / 1_000_000
elapsed := "<1"
if difference >= 1 {
elapsed = strconv.Itoa(difference)
}
fmt.Printf("[%s] %s %s - %d (%sms) (%s)\n",
after.Format(time.UnixDate),
r.Method,
r.URL.Path,
lw.code,
elapsed,
r.Header["User-Agent"][0])
})
}