github.com/jxgolibs/go-oauth2-server@v1.0.1/util/routes/routes.go (about)

     1  package routes
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/gorilla/mux"
     7  	"github.com/urfave/negroni"
     8  )
     9  
    10  // Route ...
    11  type Route struct {
    12  	Name        string
    13  	Method      string
    14  	Pattern     string
    15  	HandlerFunc http.HandlerFunc
    16  	Middlewares []negroni.Handler
    17  }
    18  
    19  // AddRoutes adds routes to a router instance. If there are middlewares defined
    20  // for a route, a new negroni app is created and wrapped as a http.Handler
    21  func AddRoutes(routes []Route, router *mux.Router) {
    22  	var (
    23  		handler http.Handler
    24  		n       *negroni.Negroni
    25  	)
    26  
    27  	for _, route := range routes {
    28  		// Add any specified middlewares
    29  		if len(route.Middlewares) > 0 {
    30  			n = negroni.New()
    31  
    32  			for _, middleware := range route.Middlewares {
    33  				n.Use(middleware)
    34  			}
    35  
    36  			// Wrap the handler in the negroni app with middlewares
    37  			n.Use(negroni.Wrap(route.HandlerFunc))
    38  			handler = n
    39  		} else {
    40  			handler = route.HandlerFunc
    41  		}
    42  
    43  		router.Methods(route.Method).
    44  			Path(route.Pattern).
    45  			Name(route.Name).
    46  			Handler(handler)
    47  	}
    48  }