From e3c60c74fcb05512ba65be3b71f14589460de2f8 Mon Sep 17 00:00:00 2001 From: RW Date: Mon, 1 Dec 2025 12:42:11 +0100 Subject: [PATCH 1/3] Handle contrib v3 imports in token migrators --- cmd/internal/migrations/v3/jwt_extractor.go | 4 +++- .../migrations/v3/jwt_extractor_test.go | 24 +++++++++++++++++++ .../migrations/v3/paseto_extractor.go | 3 ++- .../migrations/v3/paseto_extractor_test.go | 24 +++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/cmd/internal/migrations/v3/jwt_extractor.go b/cmd/internal/migrations/v3/jwt_extractor.go index e0b0f9d..d16c422 100644 --- a/cmd/internal/migrations/v3/jwt_extractor.go +++ b/cmd/internal/migrations/v3/jwt_extractor.go @@ -13,7 +13,9 @@ import ( ) func MigrateJWTExtractor(cmd *cobra.Command, cwd string, _, _ *semver.Version) error { - reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib/)?jwt(?:/v\d+)?"(?:\s*//[^\n]*)?`) + // The import matcher also needs to work after contrib packages were already migrated + // to their v3 module paths (e.g. github.com/gofiber/contrib/v3/jwt). + reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib/(?:v\d+/)?jwt|jwt)(?:/v\d+)?"(?:\s*//[^\n]*)?`) reAuthScheme := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*([^,\n]+)`) reAuthLine := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*[^\n]+\n?`) reFilter := regexp.MustCompile(`(?m)^(\s*)Filter:\s*`) diff --git a/cmd/internal/migrations/v3/jwt_extractor_test.go b/cmd/internal/migrations/v3/jwt_extractor_test.go index b0af6a4..039b170 100644 --- a/cmd/internal/migrations/v3/jwt_extractor_test.go +++ b/cmd/internal/migrations/v3/jwt_extractor_test.go @@ -94,6 +94,30 @@ var _ = authjwt.New(authjwt.Config{ assert.Contains(t, buf.String(), "Migrating jwt middleware configs") } +func Test_MigrateJWTExtractor_ContribV3Import(t *testing.T) { + t.Parallel() + + dir, err := os.MkdirTemp("", "mjwt_v3import") + require.NoError(t, err) + defer func() { require.NoError(t, os.RemoveAll(dir)) }() + + file := writeTempFile(t, dir, `package main +import jwtware "github.com/gofiber/contrib/v3/jwt" +var _ = jwtware.New(jwtware.Config{ + TokenLookup: "cookie:jwt", +})`) + + var buf bytes.Buffer + cmd := newCmd(&buf) + require.NoError(t, v3.MigrateJWTExtractor(cmd, dir, nil, nil)) + + content := readFile(t, file) + assert.NotContains(t, content, "TokenLookup") + assert.Regexp(t, `Extractor:\s*extractors.FromCookie\("jwt"\)`, content) + assert.Contains(t, content, `"github.com/gofiber/fiber/v3/extractors"`) + assert.Contains(t, buf.String(), "Migrating jwt middleware configs") +} + func Test_MigrateJWTExtractor_InlineConfig(t *testing.T) { t.Parallel() diff --git a/cmd/internal/migrations/v3/paseto_extractor.go b/cmd/internal/migrations/v3/paseto_extractor.go index 17cc4ed..13453f6 100644 --- a/cmd/internal/migrations/v3/paseto_extractor.go +++ b/cmd/internal/migrations/v3/paseto_extractor.go @@ -13,7 +13,8 @@ import ( ) func MigratePasetoExtractor(cmd *cobra.Command, cwd string, _, _ *semver.Version) error { - reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/contrib/paseto(?:/v\d+)?"`) + // Keep matching even if contrib imports were already migrated to github.com/gofiber/contrib/v3/... + reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/contrib/(?:v\d+/)?paseto(?:/v\d+)?"`) reTokenPrefix := regexp.MustCompile(`(?m)\s*TokenPrefix:\s*([^,\n]+)`) changed, err := internal.ChangeFileContent(cwd, func(content string) string { diff --git a/cmd/internal/migrations/v3/paseto_extractor_test.go b/cmd/internal/migrations/v3/paseto_extractor_test.go index fc8f0ec..95d0582 100644 --- a/cmd/internal/migrations/v3/paseto_extractor_test.go +++ b/cmd/internal/migrations/v3/paseto_extractor_test.go @@ -110,6 +110,30 @@ var _ = authpaseto.New(authpaseto.Config{ assert.Contains(t, buf.String(), "Migrating paseto middleware configs") } +func Test_MigratePasetoExtractor_ContribV3Import(t *testing.T) { + t.Parallel() + + dir, err := os.MkdirTemp("", "mpaseto_v3import") + require.NoError(t, err) + defer func() { require.NoError(t, os.RemoveAll(dir)) }() + + file := writeTempFile(t, dir, `package main +import pasetoware "github.com/gofiber/contrib/v3/paseto" +var _ = pasetoware.New(pasetoware.Config{ + TokenLookup: [2]string{"cookie", "session"}, +})`) + + var buf bytes.Buffer + cmd := newCmd(&buf) + require.NoError(t, v3.MigratePasetoExtractor(cmd, dir, nil, nil)) + + content := readFile(t, file) + assert.NotContains(t, content, "TokenLookup") + assert.Contains(t, content, `Extractor: extractors.FromCookie("session")`) + assert.Contains(t, content, `"github.com/gofiber/fiber/v3/extractors"`) + assert.Contains(t, buf.String(), "Migrating paseto middleware configs") +} + func Test_MigratePasetoExtractor_SkipUnrelatedPackage(t *testing.T) { t.Parallel() From c85790a98efd1f57da479c86994ea417058b884c Mon Sep 17 00:00:00 2001 From: RW Date: Mon, 1 Dec 2025 12:46:23 +0100 Subject: [PATCH 2/3] Update cmd/internal/migrations/v3/jwt_extractor.go Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- cmd/internal/migrations/v3/jwt_extractor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/internal/migrations/v3/jwt_extractor.go b/cmd/internal/migrations/v3/jwt_extractor.go index d16c422..38620b6 100644 --- a/cmd/internal/migrations/v3/jwt_extractor.go +++ b/cmd/internal/migrations/v3/jwt_extractor.go @@ -15,7 +15,7 @@ import ( func MigrateJWTExtractor(cmd *cobra.Command, cwd string, _, _ *semver.Version) error { // The import matcher also needs to work after contrib packages were already migrated // to their v3 module paths (e.g. github.com/gofiber/contrib/v3/jwt). - reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib/(?:v\d+/)?jwt|jwt)(?:/v\d+)?"(?:\s*//[^\n]*)?`) +reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib(?:/v\d+)?/)?jwt(?:/v\d+)?"(?:\s*//[^\n]*)?`) reAuthScheme := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*([^,\n]+)`) reAuthLine := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*[^\n]+\n?`) reFilter := regexp.MustCompile(`(?m)^(\s*)Filter:\s*`) From 54e2d7c3849c0f0e6cf5a59db8129775d3eb1770 Mon Sep 17 00:00:00 2001 From: RW Date: Mon, 1 Dec 2025 12:56:34 +0100 Subject: [PATCH 3/3] Fix regex for JWT import matcher --- cmd/internal/migrations/v3/jwt_extractor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/internal/migrations/v3/jwt_extractor.go b/cmd/internal/migrations/v3/jwt_extractor.go index 38620b6..4a37aa4 100644 --- a/cmd/internal/migrations/v3/jwt_extractor.go +++ b/cmd/internal/migrations/v3/jwt_extractor.go @@ -15,7 +15,7 @@ import ( func MigrateJWTExtractor(cmd *cobra.Command, cwd string, _, _ *semver.Version) error { // The import matcher also needs to work after contrib packages were already migrated // to their v3 module paths (e.g. github.com/gofiber/contrib/v3/jwt). -reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib(?:/v\d+)?/)?jwt(?:/v\d+)?"(?:\s*//[^\n]*)?`) + reImport := regexp.MustCompile(`(?m)^\s*(?:import\s+)?(?:([\w\.]+)\s+)?"github\.com/gofiber/(?:contrib(?:/v\d+)?/)?jwt(?:/v\d+)?"(?:\s*//[^\n]*)?`) reAuthScheme := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*([^,\n]+)`) reAuthLine := regexp.MustCompile(`(?m)^\s*AuthScheme:\s*[^\n]+\n?`) reFilter := regexp.MustCompile(`(?m)^(\s*)Filter:\s*`)