created hws module

This commit is contained in:
2026-01-04 00:59:24 +11:00
parent ade3fa0454
commit 14eec74683
12 changed files with 479 additions and 0 deletions

51
hws/middleware.go Normal file
View File

@@ -0,0 +1,51 @@
package hws
import (
"errors"
"net/http"
)
type Middleware func(h http.Handler) http.Handler
type MiddlewareFunc func(w http.ResponseWriter, r *http.Request) (*http.Request, *HWSError)
// Server.AddMiddleware registers all the middleware.
// Middleware will be run in the order that they are provided.
func (server *Server) AddMiddleware(middleware ...Middleware) error {
if !server.routes {
return errors.New("Server.AddRoutes must be called before Server.AddMiddleware")
}
// RUN LOGGING MIDDLEWARE FIRST
server.server.Handler = logging(server.server.Handler, server.logger)
// LOOP PROVIDED MIDDLEWARE IN REVERSE order
for i := len(middleware); i > 0; i-- {
server.server.Handler = middleware[i-1](server.server.Handler)
}
// RUN GZIP
if server.gzip {
server.server.Handler = addgzip(server.server.Handler)
}
// RUN TIMER MIDDLEWARE LAST
server.server.Handler = startTimer(server.server.Handler)
server.middleware = true
return nil
}
func (server *Server) NewMiddleware(
middlewareFunc MiddlewareFunc,
) Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
newReq, herr := middlewareFunc(w, r)
if herr != nil {
server.ThrowError(w, r, herr)
return
}
next.ServeHTTP(w, newReq)
})
}
}