gohttp/server/directive.go

63 lines
1.7 KiB
Go

package server
import (
"fmt"
"net/http"
"strings"
// "compress/gzip"
"git.pyer.club/kingecg/gohttpd/model"
"git.pyer.club/kingecg/gologger"
"github.com/nanmu42/gzip"
)
type Directive func(args ...string) Middleware
var Add_Header Directive = func(args ...string) Middleware {
return func(w http.ResponseWriter, r *http.Request, next http.Handler) {
l := gologger.GetLogger("Directive")
p := args[1:]
params := strings.Join(p, " ")
l.Debug(fmt.Sprintf("Add-Header %s:%s", args[0], params))
w.Header().Add(args[0], args[1])
next.ServeHTTP(w, r)
}
}
var Set_Header Directive = func(args ...string) Middleware {
return func(w http.ResponseWriter, r *http.Request, next http.Handler) {
l := gologger.GetLogger("Directive")
p := args[1:]
params := strings.Join(p, " ")
l.Debug(fmt.Sprintf("Set-Header %s:%s", args[0], params))
w.Header().Set(args[0], params)
next.ServeHTTP(w, r)
}
}
var Gzip_Response Directive = func(args ...string) Middleware {
var gzipHandler http.Handler = nil
return func(w http.ResponseWriter, r *http.Request, next http.Handler) {
l := gologger.GetLogger("Directive")
l.Debug("Gzip-Response")
if gzipHandler == nil {
gzipHandler = gzip.DefaultHandler().WrapHandler(next)
}
gzipHandler.ServeHTTP(w, r)
}
}
var DRecordAccess Directive = func(args ...string) Middleware {
return func(w http.ResponseWriter, r *http.Request, next http.Handler) {
l := gologger.GetLogger("Directive")
l.Debug("Record-Access")
model.Incr(r.URL.Host)
next.ServeHTTP(w, r)
}
}
var DirectiveMap = map[string]Directive{
"Set-Header": Set_Header,
"Add-Header": Add_Header,
"Gzip_Response": Gzip_Response,
"Record-Access": DRecordAccess,
}