Skip to content

Commit

Permalink
feat(): add gzip middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
ncarlier committed Mar 18, 2020
1 parent a56b099 commit b8e0f2a
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 16 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ module github.com/ncarlier/readflow

require (
github.com/Masterminds/squirrel v1.1.0
github.com/NYTimes/gziphandler v1.1.1
github.com/SherClockHolmes/webpush-go v1.1.0
github.com/antonmedv/expr v1.1.4
github.com/asaskevich/EventBus v0.0.0-20180315140547-d46933a94f05
Expand All @@ -21,7 +22,6 @@ require (
github.com/rs/zerolog v1.12.0
github.com/sergi/go-diff v1.0.0 // indirect
github.com/sirupsen/logrus v1.4.1 // indirect
github.com/stretchr/testify v1.3.0 // indirect
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc
google.golang.org/appengine v1.5.0 // indirect
gopkg.in/yaml.v2 v2.2.8
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
github.com/Masterminds/squirrel v1.1.0 h1:baP1qLdoQCeTw3ifCdOq2dkYc6vGcmRdaociKLbEJXs=
github.com/Masterminds/squirrel v1.1.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/SherClockHolmes/webpush-go v1.1.0 h1:WjWbwo0Bf1Cbd8Yr0myrpYYlcN7VvQz/TVmUTjxL35g=
github.com/SherClockHolmes/webpush-go v1.1.0/go.mod h1:Jbd13H6kOFZubRMAaEHQS+e0EpP/aSHtLKeo9gsyO5k=
github.com/antonmedv/expr v1.1.4 h1:ReeidbMJQZsujmBaYdaCEtfAvSH5bd/HHApjhyorBlE=
Expand Down
21 changes: 17 additions & 4 deletions pkg/api/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package api
import (
"fmt"
"net/http"
"net/url"
"strings"
"time"

"github.com/ncarlier/readflow/pkg/config"
Expand All @@ -13,14 +15,25 @@ func nextRequestID() string {
return fmt.Sprintf("%d", time.Now().UnixNano())
}

var commonMiddlewares = []middleware.Middleware{
middleware.Cors,
middleware.Logger,
middleware.Tracing(nextRequestID),
func buildOriginFromPublicURL(publicURL string) string {
if publicURL == "" {
return "*"
}
u, err := url.Parse(publicURL)
if err != nil {
return "*"
}
return fmt.Sprintf("%s://%s", u.Scheme, strings.TrimPrefix(u.Host, "api."))
}

// NewRouter creates router with declared routes
func NewRouter(conf *config.Config) *http.ServeMux {
commonMiddlewares := []middleware.Middleware{
middleware.Cors(buildOriginFromPublicURL(conf.PublicURL)),
middleware.Gzip,
middleware.Logger,
middleware.Tracing(nextRequestID),
}
router := http.NewServeMux()
for _, route := range routes(conf) {
handler := route.Handler
Expand Down
2 changes: 1 addition & 1 deletion pkg/metric/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ func NewRouter() *http.ServeMux {

handler := promhttp.Handler()
handler = middleware.Methods("GET")(handler)
handler = middleware.Cors(handler)
handler = middleware.Cors("*")(handler)
handler = middleware.Logger(handler)
router.Handle("/metrics", handler)

Expand Down
22 changes: 12 additions & 10 deletions pkg/middleware/cors.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@ import (
)

// Cors is a middleware to enabling CORS on HTTP requests
func Cors(inner http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, Authorization")
func Cors(allowOrigin string) Middleware {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", allowOrigin)
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, Authorization")

if r.Method != "OPTIONS" {
inner.ServeHTTP(w, r)
}
return
})
if r.Method != "OPTIONS" {
next.ServeHTTP(w, r)
}
return
})
}
}
12 changes: 12 additions & 0 deletions pkg/middleware/gzip.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package middleware

import (
"net/http"

"github.com/NYTimes/gziphandler"
)

// Gzip is a middleware to enabling GZIP on HTTP requests
func Gzip(inner http.Handler) http.Handler {
return gziphandler.GzipHandler(inner)
}

0 comments on commit b8e0f2a

Please sign in to comment.