diff --git a/cmd/internal/migrations/v3/jwt_extractor.go b/cmd/internal/migrations/v3/jwt_extractor.go index e0b0f9d..4a37aa4 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(?:/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()