package middleware import ( "net/http" "time" "git.to-net.rs/marko.tikvic/gologger" web "git.to-net.rs/marko.tikvic/webutility" ) var httpLogger *gologger.Logger // IgnoreOptionsRequests ... func IgnoreOptionsRequests(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { web.SetDefaultHeaders(w) if req.Method == http.MethodOptions { return } h(w, req) } } // ParseForm ... func ParseForm(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { err := req.ParseForm() if err != nil { web.BadRequest(w, req, err.Error()) return } h(w, req) } } // ParseMultipartForm ... func ParseMultipartForm(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { err := req.ParseMultipartForm(32 << 20) if err != nil { web.BadRequest(w, req, err.Error()) return } h(w, req) } } // SetLogger ... func SetLogger(logger *gologger.Logger) { httpLogger = logger } // LogRequestAndResponse ... func LogRequestAndResponse(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { if httpLogger != nil { t1 := time.Now() claims, _ := web.GetTokenClaims(req) in := httpLogger.LogHTTPRequest(req, claims.Username) rec := web.NewStatusRecorder(w) h(rec, req) t2 := time.Now() out := httpLogger.LogHTTPResponse(rec.Status(), t2.Sub(t1), rec.Size()) httpLogger.CombineHTTPLogs(in, out) } else { h(w, req) } } } // Auth ... func Auth(roles string, h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { if _, err := web.AuthCheck(req, roles); err != nil { web.Unauthorized(w, req, err.Error()) return } h(w, req) } }