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 func SetAccessControlHeaders(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { web.SetAccessControlHeaders(w) h(w, req) } } // IgnoreOptionsRequests ... func IgnoreOptionsRequests(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { 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 } // LogHTTP ... func LogHTTP(h http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { if httpLogger == nil { h(w, req) return } 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) } } // 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) } }