Skip to content

Commit bcd8bde

Browse files
committed
middleware/earlydata: backport to v2
Backport of gofiber#2270 to v2.
1 parent 18ff026 commit bcd8bde

File tree

4 files changed

+61
-55
lines changed

4 files changed

+61
-55
lines changed

Diff for: middleware/earlydata/README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ First import the middleware from Fiber,
3636

3737
```go
3838
import (
39-
"github.com/gofiber/fiber/v3"
40-
"github.com/gofiber/fiber/v3/middleware/earlydata"
39+
"github.com/gofiber/fiber/v2"
40+
"github.com/gofiber/fiber/v2/middleware/earlydata"
4141
)
4242
```
4343

@@ -65,17 +65,17 @@ type Config struct {
6565
// Next defines a function to skip this middleware when returned true.
6666
//
6767
// Optional. Default: nil
68-
Next func(c fiber.Ctx) bool
68+
Next func(c *fiber.Ctx) bool
6969

7070
// IsEarlyData returns whether the request is an early-data request.
7171
//
7272
// Optional. Default: a function which checks if the "Early-Data" request header equals "1".
73-
IsEarlyData func(c fiber.Ctx) bool
73+
IsEarlyData func(c *fiber.Ctx) bool
7474

7575
// AllowEarlyData returns whether the early-data request should be allowed or rejected.
7676
//
7777
// Optional. Default: a function which rejects the request on unsafe and allows the request on safe HTTP request methods.
78-
AllowEarlyData func(c fiber.Ctx) bool
78+
AllowEarlyData func(c *fiber.Ctx) bool
7979

8080
// Error is returned in case an early-data request is rejected.
8181
//
@@ -88,11 +88,11 @@ type Config struct {
8888

8989
```go
9090
var ConfigDefault = Config{
91-
IsEarlyData: func(c fiber.Ctx) bool {
91+
IsEarlyData: func(c *fiber.Ctx) bool {
9292
return c.Get("Early-Data") == "1"
9393
},
9494

95-
AllowEarlyData: func(c fiber.Ctx) bool {
95+
AllowEarlyData: func(c *fiber.Ctx) bool {
9696
return fiber.IsMethodSafe(c.Method())
9797
},
9898

Diff for: middleware/earlydata/config.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package earlydata
22

33
import (
4-
"github.com/gofiber/fiber/v3"
4+
"github.com/gofiber/fiber/v2"
55
)
66

77
const (
@@ -14,17 +14,17 @@ type Config struct {
1414
// Next defines a function to skip this middleware when returned true.
1515
//
1616
// Optional. Default: nil
17-
Next func(c fiber.Ctx) bool
17+
Next func(c *fiber.Ctx) bool
1818

1919
// IsEarlyData returns whether the request is an early-data request.
2020
//
2121
// Optional. Default: a function which checks if the "Early-Data" request header equals "1".
22-
IsEarlyData func(c fiber.Ctx) bool
22+
IsEarlyData func(c *fiber.Ctx) bool
2323

2424
// AllowEarlyData returns whether the early-data request should be allowed or rejected.
2525
//
2626
// Optional. Default: a function which rejects the request on unsafe and allows the request on safe HTTP request methods.
27-
AllowEarlyData func(c fiber.Ctx) bool
27+
AllowEarlyData func(c *fiber.Ctx) bool
2828

2929
// Error is returned in case an early-data request is rejected.
3030
//
@@ -33,12 +33,14 @@ type Config struct {
3333
}
3434

3535
// ConfigDefault is the default config
36+
//
37+
//nolint:gochecknoglobals // Using a global var is fine here
3638
var ConfigDefault = Config{
37-
IsEarlyData: func(c fiber.Ctx) bool {
39+
IsEarlyData: func(c *fiber.Ctx) bool {
3840
return c.Get(DefaultHeaderName) == DefaultHeaderTrueValue
3941
},
4042

41-
AllowEarlyData: func(c fiber.Ctx) bool {
43+
AllowEarlyData: func(c *fiber.Ctx) bool {
4244
return fiber.IsMethodSafe(c.Method())
4345
},
4446

Diff for: middleware/earlydata/earlydata.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package earlydata
22

33
import (
4-
"github.com/gofiber/fiber/v3"
4+
"github.com/gofiber/fiber/v2"
55
)
66

77
const (
88
localsKeyAllowed = "earlydata_allowed"
99
)
1010

11-
func IsEarly(c fiber.Ctx) bool {
11+
func IsEarly(c *fiber.Ctx) bool {
1212
return c.Locals(localsKeyAllowed) != nil
1313
}
1414

@@ -19,7 +19,7 @@ func New(config ...Config) fiber.Handler {
1919
cfg := configDefault(config...)
2020

2121
// Return new handler
22-
return func(c fiber.Ctx) error {
22+
return func(c *fiber.Ctx) error {
2323
// Don't execute middleware if Next returns true
2424
if cfg.Next != nil && cfg.Next(c) {
2525
return c.Next()

Diff for: middleware/earlydata/earlydata_test.go

+43-39
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
//nolint:bodyclose // Much easier to just ignore memory leaks in tests
12
package earlydata_test
23

34
import (
@@ -7,9 +8,9 @@ import (
78
"net/http/httptest"
89
"testing"
910

10-
"github.com/gofiber/fiber/v3"
11-
"github.com/gofiber/fiber/v3/middleware/earlydata"
12-
"github.com/stretchr/testify/require"
11+
"github.com/gofiber/fiber/v2"
12+
"github.com/gofiber/fiber/v2/middleware/earlydata"
13+
"github.com/gofiber/fiber/v2/utils"
1314
)
1415

1516
const (
@@ -33,12 +34,11 @@ func appWithConfig(t *testing.T, c *fiber.Config) *fiber.App {
3334

3435
// Middleware to test IsEarly func
3536
const localsKeyTestValid = "earlydata_testvalid"
36-
app.Use(func(c fiber.Ctx) error {
37+
app.Use(func(c *fiber.Ctx) error {
3738
isEarly := earlydata.IsEarly(c)
3839

3940
switch h := c.Get(headerName); h {
40-
case "",
41-
headerValOff:
41+
case "", headerValOff:
4242
if isEarly {
4343
return errors.New("is early-data even though it's not")
4444
}
@@ -64,16 +64,20 @@ func appWithConfig(t *testing.T, c *fiber.Config) *fiber.App {
6464
return c.Next()
6565
})
6666

67-
app.Add([]string{
68-
fiber.MethodGet,
69-
fiber.MethodPost,
70-
}, "/", func(c fiber.Ctx) error {
71-
if !c.Locals(localsKeyTestValid).(bool) {
72-
return errors.New("handler called even though validation failed")
73-
}
67+
{
68+
{
69+
handler := func(c *fiber.Ctx) error {
70+
if !c.Locals(localsKeyTestValid).(bool) { //nolint:forcetypeassert,errcheck // We store nothing else in the pool
71+
return errors.New("handler called even though validation failed")
72+
}
7473

75-
return nil
76-
})
74+
return nil
75+
}
76+
77+
app.Get("/", handler)
78+
app.Post("/", handler)
79+
}
80+
}
7781

7882
return app
7983
}
@@ -89,36 +93,36 @@ func Test_EarlyData(t *testing.T) {
8993
req := httptest.NewRequest(fiber.MethodGet, "/", http.NoBody)
9094

9195
resp, err := app.Test(req)
92-
require.NoError(t, err)
93-
require.Equal(t, fiber.StatusOK, resp.StatusCode)
96+
utils.AssertEqual(t, nil, err)
97+
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
9498

9599
req.Header.Set(headerName, headerValOff)
96100
resp, err = app.Test(req)
97-
require.NoError(t, err)
98-
require.Equal(t, fiber.StatusOK, resp.StatusCode)
101+
utils.AssertEqual(t, nil, err)
102+
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
99103

100104
req.Header.Set(headerName, headerValOn)
101105
resp, err = app.Test(req)
102-
require.NoError(t, err)
103-
require.Equal(t, fiber.StatusOK, resp.StatusCode)
106+
utils.AssertEqual(t, nil, err)
107+
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
104108
}
105109

106110
{
107111
req := httptest.NewRequest(fiber.MethodPost, "/", http.NoBody)
108112

109113
resp, err := app.Test(req)
110-
require.NoError(t, err)
111-
require.Equal(t, fiber.StatusOK, resp.StatusCode)
114+
utils.AssertEqual(t, nil, err)
115+
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
112116

113117
req.Header.Set(headerName, headerValOff)
114118
resp, err = app.Test(req)
115-
require.NoError(t, err)
116-
require.Equal(t, fiber.StatusOK, resp.StatusCode)
119+
utils.AssertEqual(t, nil, err)
120+
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
117121

118122
req.Header.Set(headerName, headerValOn)
119123
resp, err = app.Test(req)
120-
require.NoError(t, err)
121-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
124+
utils.AssertEqual(t, nil, err)
125+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
122126
}
123127
}
124128

@@ -129,36 +133,36 @@ func Test_EarlyData(t *testing.T) {
129133
req := httptest.NewRequest(fiber.MethodGet, "/", http.NoBody)
130134

131135
resp, err := app.Test(req)
132-
require.NoError(t, err)
133-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
136+
utils.AssertEqual(t, nil, err)
137+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
134138

135139
req.Header.Set(headerName, headerValOff)
136140
resp, err = app.Test(req)
137-
require.NoError(t, err)
138-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
141+
utils.AssertEqual(t, nil, err)
142+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
139143

140144
req.Header.Set(headerName, headerValOn)
141145
resp, err = app.Test(req)
142-
require.NoError(t, err)
143-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
146+
utils.AssertEqual(t, nil, err)
147+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
144148
}
145149

146150
{
147151
req := httptest.NewRequest(fiber.MethodPost, "/", http.NoBody)
148152

149153
resp, err := app.Test(req)
150-
require.NoError(t, err)
151-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
154+
utils.AssertEqual(t, nil, err)
155+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
152156

153157
req.Header.Set(headerName, headerValOff)
154158
resp, err = app.Test(req)
155-
require.NoError(t, err)
156-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
159+
utils.AssertEqual(t, nil, err)
160+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
157161

158162
req.Header.Set(headerName, headerValOn)
159163
resp, err = app.Test(req)
160-
require.NoError(t, err)
161-
require.Equal(t, fiber.StatusTooEarly, resp.StatusCode)
164+
utils.AssertEqual(t, nil, err)
165+
utils.AssertEqual(t, fiber.StatusTooEarly, resp.StatusCode)
162166
}
163167
}
164168

0 commit comments

Comments
 (0)