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, }