1package web
2
3import (
4 "context"
5 "net/http"
6
7 "goji.io"
8 "goji.io/pat"
9)
10
11// Route is an interface for a route.
12type Route interface {
13 http.Handler
14 goji.Pattern
15}
16
17// NewRouter returns a new HTTP router.
18// TODO: use gorilla/mux and friends
19func NewRouter(ctx context.Context) http.Handler {
20 mux := goji.NewMux()
21
22 // Git routes
23 for _, service := range gitRoutes {
24 mux.Handle(service, withAccess(service))
25 }
26
27 // go-get handler
28 mux.Handle(pat.Get("/*"), GoGetHandler{})
29
30 // Middlewares
31 mux.Use(NewLoggingMiddleware)
32
33 // Context handler
34 // Adds context to the request
35 ctxHandler := NewContextHandler(ctx)
36
37 return ctxHandler(mux)
38}