Skip to content

Commit 07b760b

Browse files
committed
fix context bug
1 parent 86817e7 commit 07b760b

File tree

5 files changed

+21
-25
lines changed

5 files changed

+21
-25
lines changed

examples/simple.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,19 @@ func main() {
3737
})
3838

3939
app := intake.New(apiLogger)
40-
app.GlobalMiddleware(middleware.Logging(apiLogger, middleware.LogLevel{
40+
eps := intake.Endpoints{
41+
intake.NewEndpoint(http.MethodGet, "/test-get", testSimple),
42+
}
43+
eps.Use(middleware.Logging(apiLogger, middleware.LogLevel{
4144
Log100s: true,
4245
Log200s: true,
4346
Log300s: true,
4447
Log400s: true,
4548
Log500s: true,
46-
}), middleware.Recover)
47-
eps := intake.Endpoints{
48-
intake.NewEndpoint(http.MethodGet, "/test-get", testSimple),
49-
}
49+
}))
50+
eps.Use(middleware.Timeout(time.Second * 2))
5051
app.AddEndpoints(eps)
5152

52-
53-
5453
app.Run(&http.Server{
5554
Addr: ":8000",
5655
Handler: app.Router,

middleware/logging.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package middleware
22

33
import (
4-
"net/http"
5-
"time"
6-
74
"github.com/dbubel/intake"
85
"github.com/julienschmidt/httprouter"
96
"github.com/sirupsen/logrus"
7+
"net/http"
8+
"time"
109
)
1110

1211
type LogLevel struct {
@@ -21,6 +20,7 @@ func Logging(l *logrus.Logger, levels LogLevel) func(handler intake.Handler) int
2120
return func(next intake.Handler) intake.Handler {
2221
return func(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
2322
t := time.Now()
23+
2424
defer func() {
2525
var code int
2626
if err := intake.FromContext(r, "response-code", &code); err != nil {
@@ -31,6 +31,7 @@ func Logging(l *logrus.Logger, levels LogLevel) func(handler intake.Handler) int
3131
if err := intake.FromContext(r, "response-length", &responseLength); err != nil {
3232
l.WithError(err).Error("error getting response length from context")
3333
}
34+
3435
printLog := func() {
3536
l.WithFields(logrus.Fields{
3637
"method": r.Method,
@@ -54,7 +55,6 @@ func Logging(l *logrus.Logger, levels LogLevel) func(handler intake.Handler) int
5455
} else if code >= 500 && levels.Log500s {
5556
printLog()
5657
}
57-
5858
}()
5959

6060
next(w, r, params)

middleware/timeout.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ func Timeout(t time.Duration) func(handler intake.Handler) intake.Handler {
1818
// cancel at the specified duration.
1919
ctx, cancel := context.WithTimeout(r.Context(), t)
2020
defer cancel()
21-
next(w, r.WithContext(ctx), params)
21+
*r = *r.WithContext(ctx)
22+
next(w, r, params)
2223
}
2324
}
2425
}

requests.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package intake
22

33
import (
4-
"bytes"
54
"context"
6-
"encoding/gob"
75
"encoding/json"
86
"fmt"
97
"io"
@@ -30,22 +28,20 @@ func UnmarshalJSON(r io.Reader, v interface{}) error {
3028
}
3129

3230
func AddToContext(r *http.Request, key string, v interface{}) error {
33-
var b bytes.Buffer
34-
e := gob.NewEncoder(&b)
35-
if err := e.Encode(v); err != nil {
31+
encoded, err := json.Marshal(v)
32+
if err != nil {
3633
return err
3734
}
38-
*r = *r.WithContext(context.WithValue(r.Context(), key, b))
35+
*r = *r.WithContext(context.WithValue(r.Context(), key, encoded))
3936
return nil
4037
}
4138

4239
func FromContext(r *http.Request, key string, v interface{}) error {
43-
data, ok := r.Context().Value(key).(bytes.Buffer)
40+
data, ok := r.Context().Value(key).([]byte)
4441
if !ok {
45-
return fmt.Errorf("error casting from context for (%s)", key)
42+
return fmt.Errorf("error casting to []byte for key %s", key)
4643
}
47-
d := gob.NewDecoder(&data)
48-
if err := d.Decode(v); err != nil {
44+
if err := json.Unmarshal(data, v); err != nil {
4945
return err
5046
}
5147
return nil

responder.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package intake
33
import (
44
"encoding/json"
55
"encoding/xml"
6-
"fmt"
76
"net/http"
87
)
98

@@ -40,11 +39,12 @@ func RespondXML(w http.ResponseWriter, r *http.Request, code int, data interface
4039
func Respond(w http.ResponseWriter, r *http.Request, code int, data []byte) (int, error) {
4140
err := AddToContext(r, "response-code", code)
4241
if err != nil {
43-
fmt.Println("adding", err.Error())
42+
return 0, err
4443
}
44+
4545
err = AddToContext(r, "response-length", len(data))
4646
if err != nil {
47-
fmt.Println("adding 1", err.Error())
47+
return 0, err
4848
}
4949
contentType := http.DetectContentType(data)
5050
w.Header().Set("Content-Type", contentType)

0 commit comments

Comments
 (0)