package api import ( "os" "net/http" log "github.com/sirupsen/logrus" ) type Middleware func(http.Handler) http.HandlerFunc func multipleMiddleware(h http.HandlerFunc, m ...Middleware) http.HandlerFunc { if len(m) < 1 { return h } wrapped := h for i := len(m) - 1; i >= 0; i-- { wrapped = m[i](wrapped) } return wrapped } func (api *API) authMiddleware(next http.Handler) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Acquire Token accessCookie, err := r.Cookie("AccessToken") if err != nil { log.Warn("[middleware] AccessToken not found") w.WriteHeader(http.StatusUnauthorized) return } // Validate JWT Tokens // accessToken, accessOK := api.Auth.ValidateJWTAccessToken(accessCookie.Value) _, accessOK := api.Auth.ValidateJWTAccessToken(accessCookie.Value) if accessOK { // Acquire UserID and DeviceID // uid, _ := accessToken.Get("sub") // did, _ := accessToken.Get("did") // Set context uid & did next.ServeHTTP(w, r) } else { w.WriteHeader(http.StatusUnauthorized) } }) } func (api *API) logMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.SetOutput(os.Stdout) log.Println(r.Method, r.URL) h.ServeHTTP(w, r) }) }