1// Package server is the reusable server
2package web
3
4import (
5 "context"
6 "net/http"
7
8 "github.com/charmbracelet/log"
9 "github.com/charmbracelet/soft-serve/server/backend"
10 "github.com/charmbracelet/soft-serve/server/config"
11 "goji.io"
12 "goji.io/pat"
13)
14
15// Route is an interface for a route.
16type Route interface {
17 http.Handler
18 goji.Pattern
19}
20
21// NewRouter returns a new HTTP router.
22func NewRouter(ctx context.Context) *goji.Mux {
23 mux := goji.NewMux()
24 cfg := config.FromContext(ctx)
25 be := backend.FromContext(ctx)
26 logger := log.FromContext(ctx).WithPrefix("http")
27
28 // Middlewares
29 mux.Use(NewLoggingMiddleware(logger))
30
31 // Git routes
32 for _, service := range gitRoutes(ctx, logger) {
33 mux.Handle(service, service)
34 }
35
36 // go-get handler
37 mux.Handle(pat.Get("/*"), GoGetHandler{cfg, be})
38
39 return mux
40}