Skip to content

Commit ac0aaab

Browse files
committed
try a different options approach
1 parent a14fb33 commit ac0aaab

File tree

2 files changed

+49
-22
lines changed

2 files changed

+49
-22
lines changed

router/options.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,35 @@
11
package router
22

33
import (
4-
"github.com/netlify/netlify-commons/tracing"
5-
"github.com/rs/cors"
64
"github.com/sirupsen/logrus"
75
)
86

9-
type Option func(r Router)
7+
type Option func(r *chiWrapper)
108

11-
func OptEnableCORS(r Router) {
12-
corsMiddleware := cors.New(cors.Options{
13-
AllowedMethods: []string{"GET", "POST", "PATCH", "PUT", "DELETE"},
14-
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
15-
ExposedHeaders: []string{"Link", "X-Total-Count"},
16-
AllowCredentials: true,
17-
})
18-
r.Use(corsMiddleware.Handler)
9+
func OptEnableCORS(r *chiWrapper) {
10+
r.enableCORS = true
1911
}
2012

2113
func OptHealthCheck(path string, checker APIHandler) Option {
22-
return func(r Router) {
23-
r.Use(HealthCheck(path, checker))
14+
return func(r *chiWrapper) {
15+
r.healthEndpoint = path
16+
r.healthHandler = checker
2417
}
2518
}
2619

2720
func OptVersionHeader(svcName, version string) Option {
28-
return func(r Router) {
29-
r.Use(VersionHeader(svcName, version))
30-
21+
return func(r *chiWrapper) {
22+
if version == "" {
23+
version = "unknown"
24+
}
25+
r.version = version
26+
r.svcName = svcName
3127
}
3228
}
3329

3430
func OptTracingMiddleware(log logrus.FieldLogger, svcName string) Option {
35-
return func(r Router) {
36-
r.Use(tracing.Middleware(log, svcName))
31+
return func(r *chiWrapper) {
32+
r.svcName = svcName
33+
r.enableTracing = true
3734
}
3835
}
39-
40-

router/router.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,25 @@ package router
33
import (
44
"net/http"
55

6+
"github.com/netlify/netlify-commons/tracing"
7+
"github.com/rs/cors"
8+
69
"github.com/go-chi/chi"
710
"github.com/sebest/xff"
811
"github.com/sirupsen/logrus"
912
)
1013

1114
type chiWrapper struct {
1215
chi chi.Router
16+
17+
version string
18+
svcName string
19+
20+
healthEndpoint string
21+
healthHandler APIHandler
22+
23+
enableTracing bool
24+
enableCORS bool
1325
}
1426

1527
// Router wraps the chi router to make it slightly more accessible
@@ -37,21 +49,41 @@ type Router interface {
3749

3850
// creates a router with sensible defaults (xff, request id, cors)
3951
func New(log logrus.FieldLogger, options ...Option) Router {
40-
r := &chiWrapper{chi.NewRouter()}
52+
r := &chiWrapper{
53+
chi: chi.NewRouter(),
54+
version: "unknown",
55+
}
4156

4257
xffmw, _ := xff.Default()
4358
r.Use(xffmw.Handler)
4459
for _, opt := range options {
4560
opt(r)
4661
}
62+
r.Use(VersionHeader(r.svcName, r.version))
63+
if r.enableCORS {
64+
corsMiddleware := cors.New(cors.Options{
65+
AllowedMethods: []string{"GET", "POST", "PATCH", "PUT", "DELETE"},
66+
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
67+
ExposedHeaders: []string{"Link", "X-Total-Count"},
68+
AllowCredentials: true,
69+
})
70+
r.Use(corsMiddleware.Handler)
71+
}
72+
73+
if r.healthEndpoint != "" {
74+
r.Use(HealthCheck(r.healthEndpoint, r.healthHandler))
75+
}
76+
if r.enableTracing {
77+
r.Use(tracing.Middleware(log, r.svcName))
78+
}
4779

4880
return r
4981
}
5082

5183
// Route allows creating a generic route
5284
func (r *chiWrapper) Route(pattern string, fn func(Router)) {
5385
r.chi.Route(pattern, func(c chi.Router) {
54-
fn(&chiWrapper{c})
86+
fn(&chiWrapper{chi: c})
5587
})
5688
}
5789

0 commit comments

Comments
 (0)