-
Notifications
You must be signed in to change notification settings - Fork 1
/
router.go
executable file
·52 lines (40 loc) · 1.18 KB
/
router.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package router
import (
"net/http"
"github.com/gorilla/mux"
"github.com/urfave/negroni"
"github.com/scmn-dev/get-latest/api"
)
func New() *Router {
r := &Router{
router: mux.NewRouter(),
}
r.initRoutes()
return r
}
// Router
type Router struct {
router *mux.Router
}
// ServeHTTP
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
r.router.ServeHTTP(w, req)
}
func (r *Router) initRoutes() {
// Root Page
rootRouter := mux.NewRouter()
rootRouter.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("welcome, this is get-latest api, please use /:user/:repo to get latest version"))
}).Methods(http.MethodGet)
rootRouter.HandleFunc("/{user}/{repo}", api.Latest()).Methods(http.MethodGet)
rootRouter.HandleFunc("/{user}/{repo}/{no-v}", api.Latest()).Methods(http.MethodGet)
rootRouter.HandleFunc("/{user}/{repo}/{token}", api.Latest()).Methods(http.MethodGet)
n := negroni.Classic()
n.Use(negroni.HandlerFunc(CORS))
n.Use(negroni.HandlerFunc(Secure))
r.router.PathPrefix("/").Handler(n.With(
LimitHandler(),
negroni.Wrap(rootRouter),
))
}