server.go

 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}