initial
This commit is contained in:
18
server/middleware/cache.go
Normal file
18
server/middleware/cache.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"vctp/version"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// CacheMiddleware sets the Cache-Control header based on the version.
|
||||
func CacheMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if version.Value == "dev" {
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
} else {
|
||||
w.Header().Set("Cache-Control", "public, max-age=31536000")
|
||||
}
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
34
server/middleware/logging.go
Normal file
34
server/middleware/logging.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
// LoggingMiddleware represents a logging middleware.
|
||||
type LoggingMiddleware struct {
|
||||
logger *slog.Logger
|
||||
handler http.Handler
|
||||
}
|
||||
|
||||
// NewLoggingMiddleware creates a new logging middleware with the given logger and handler.
|
||||
func NewLoggingMiddleware(logger *slog.Logger, handler http.Handler) *LoggingMiddleware {
|
||||
return &LoggingMiddleware{
|
||||
logger: logger,
|
||||
handler: handler,
|
||||
}
|
||||
}
|
||||
|
||||
// ServeHTTP logs the request and calls the next handler.
|
||||
func (l *LoggingMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
start := time.Now()
|
||||
l.handler.ServeHTTP(w, r)
|
||||
l.logger.Debug(
|
||||
"Request recieved",
|
||||
slog.String("method", r.Method),
|
||||
slog.String("path", r.URL.Path),
|
||||
slog.String("remote", r.RemoteAddr),
|
||||
slog.Duration("duration", time.Since(start)),
|
||||
)
|
||||
}
|
22
server/middleware/middleware.go
Normal file
22
server/middleware/middleware.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package middleware
|
||||
|
||||
import "net/http"
|
||||
|
||||
type Handler func(http.Handler) http.Handler
|
||||
|
||||
func Chain(handlers ...Handler) Handler {
|
||||
if len(handlers) == 0 {
|
||||
return defaultHandler
|
||||
}
|
||||
|
||||
return func(next http.Handler) http.Handler {
|
||||
for i := len(handlers) - 1; i >= 0; i-- {
|
||||
next = handlers[i](next)
|
||||
}
|
||||
return next
|
||||
}
|
||||
}
|
||||
|
||||
func defaultHandler(next http.Handler) http.Handler {
|
||||
return next
|
||||
}
|
Reference in New Issue
Block a user