@@ -94,6 +94,29 @@ var _ = authjwt.New(authjwt.Config{
9494 assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
9595}
9696
97+ func Test_MigrateJWTExtractor_InlineConfig (t * testing.T ) {
98+ t .Parallel ()
99+
100+ dir , err := os .MkdirTemp ("" , "mjwt_inline" )
101+ require .NoError (t , err )
102+ defer func () { require .NoError (t , os .RemoveAll (dir )) }()
103+
104+ file := writeTempFile (t , dir , `package main
105+ import jwtware "github.com/gofiber/contrib/jwt"
106+
107+ var _ = jwtware.New(jwtware.Config{TokenLookup: "cookie:jwt"})` )
108+
109+ var buf bytes.Buffer
110+ cmd := newCmd (& buf )
111+ require .NoError (t , v3 .MigrateJWTExtractor (cmd , dir , nil , nil ))
112+
113+ content := readFile (t , file )
114+ assert .NotContains (t , content , "TokenLookup" )
115+ assert .Regexp (t , `Extractor:\s*extractors.FromCookie\("jwt"\)` , content )
116+ assert .Contains (t , content , `"github.com/gofiber/fiber/v3/extractors"` )
117+ assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
118+ }
119+
97120func Test_MigrateJWTExtractor_ImportWithComment (t * testing.T ) {
98121 t .Parallel ()
99122
@@ -124,6 +147,76 @@ func JWTMiddleware() fiber.Handler {
124147 assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
125148}
126149
150+ func Test_MigrateJWTExtractor_FiberV2Middleware (t * testing.T ) {
151+ t .Parallel ()
152+
153+ dir , err := os .MkdirTemp ("" , "mjwt_fiber_v2" )
154+ require .NoError (t , err )
155+ defer func () { require .NoError (t , os .RemoveAll (dir )) }()
156+
157+ file := writeTempFile (t , dir , `package auth
158+
159+ import (
160+ "os"
161+ "strconv"
162+
163+ jwtware "github.com/gofiber/contrib/jwt"
164+ "github.com/gofiber/fiber/v2"
165+ "github.com/golang-jwt/jwt/v5"
166+ )
167+
168+ // JWT error message.
169+ func jwtError(c *fiber.Ctx, err error) error {
170+ if err.Error() == "Missing or malformed JWT" {
171+ return c.Status(fiber.StatusBadRequest).JSON(&fiber.Map{
172+ "status": "error",
173+ "message": "Missing or malformed JWT!",
174+ })
175+ }
176+
177+ return c.Status(fiber.StatusUnauthorized).JSON(&fiber.Map{
178+ "status": "error",
179+ "message": "Invalid or expired JWT!",
180+ })
181+ }
182+
183+ // Guards a specific endpoint in the API.
184+ func JWTMiddleware() fiber.Handler {
185+ return jwtware.New(jwtware.Config{
186+ ErrorHandler: jwtError,
187+ SigningKey: jwtware.SigningKey{Key: []byte(os.Getenv("JWT_SECRET"))},
188+ TokenLookup: "cookie:jwt",
189+ })
190+ }
191+
192+ // Gets user data (their ID) from the JWT middleware. Should be executed after calling 'JWTMiddleware()'.
193+ func GetDataFromJWT(c *fiber.Ctx) error {
194+ jwtData := c.Locals("user").(*jwt.Token)
195+ claims := jwtData.Claims.(jwt.MapClaims)
196+ parsedUserID := claims["uid"].(string)
197+ userID, err := strconv.Atoi(parsedUserID)
198+ if err != nil {
199+ return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{
200+ "status": "fail",
201+ "message": err.Error(),
202+ })
203+ }
204+
205+ c.Locals("currentUser", userID)
206+ return c.Next()
207+ }` )
208+
209+ var buf bytes.Buffer
210+ cmd := newCmd (& buf )
211+ require .NoError (t , v3 .MigrateJWTExtractor (cmd , dir , nil , nil ))
212+
213+ content := readFile (t , file )
214+ assert .NotContains (t , content , "TokenLookup" )
215+ assert .Regexp (t , `Extractor:\s*extractors.FromCookie\("jwt"\)` , content )
216+ assert .Contains (t , content , `"github.com/gofiber/fiber/v3/extractors"` )
217+ assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
218+ }
219+
127220func Test_MigrateJWTExtractor_LegacyImportPath (t * testing.T ) {
128221 t .Parallel ()
129222
@@ -157,6 +250,36 @@ func JWTMiddleware() fiber.Handler {
157250 assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
158251}
159252
253+ func Test_MigrateJWTExtractor_PointerConfig (t * testing.T ) {
254+ t .Parallel ()
255+
256+ dir , err := os .MkdirTemp ("" , "mjwt_pointer" )
257+ require .NoError (t , err )
258+ defer func () { require .NoError (t , os .RemoveAll (dir )) }()
259+
260+ file := writeTempFile (t , dir , `package main
261+ import (
262+ jwtware "github.com/gofiber/contrib/jwt"
263+ "github.com/gofiber/fiber/v2"
264+ )
265+
266+ func JWTMiddleware() fiber.Handler {
267+ return jwtware.New(&jwtware.Config{
268+ TokenLookup: "cookie:jwt",
269+ })
270+ }` )
271+
272+ var buf bytes.Buffer
273+ cmd := newCmd (& buf )
274+ require .NoError (t , v3 .MigrateJWTExtractor (cmd , dir , nil , nil ))
275+
276+ content := readFile (t , file )
277+ assert .NotContains (t , content , "TokenLookup" )
278+ assert .Regexp (t , `Extractor:\s*extractors.FromCookie\("jwt"\)` , content )
279+ assert .Contains (t , content , `"github.com/gofiber/fiber/v3/extractors"` )
280+ assert .Contains (t , buf .String (), "Migrating jwt middleware configs" )
281+ }
282+
160283func Test_MigrateJWTExtractor_SkipUnrelatedPackage (t * testing.T ) {
161284 t .Parallel ()
162285
0 commit comments