From 1f0d9ec8452f15c27cd33c4e3874454c35993743 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Tue, 8 Apr 2025 14:37:33 +0200 Subject: Use internal/pkg structure --- api/auth/auth.go | 57 --------------------------------------- api/auth/auth_test.go | 74 --------------------------------------------------- 2 files changed, 131 deletions(-) delete mode 100644 api/auth/auth.go delete mode 100644 api/auth/auth_test.go (limited to 'api/auth') diff --git a/api/auth/auth.go b/api/auth/auth.go deleted file mode 100644 index b382beb..0000000 --- a/api/auth/auth.go +++ /dev/null @@ -1,57 +0,0 @@ -package auth - -import ( - "errors" - "os" - "strings" - "time" - - "github.com/golang-jwt/jwt/v5" -) - -var jwtKey = []byte(os.Getenv("JWT_SECRET")) - -type Claims struct { - UserID int `json:"user_id"` - jwt.RegisteredClaims -} - -func GenerateJWT(userID int) (string, error) { - expirationTime := time.Now().Add(5 * time.Hour) - claims := &Claims{ - UserID: userID, - RegisteredClaims: jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(expirationTime), - }, - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - tokenString, err := token.SignedString(jwtKey) - if err != nil { - return "", err - } - return tokenString, nil -} - -func ValidateJWT(tokenString string) (*Claims, error) { - claims := &Claims{} - // A token has a form `Bearer ...` - tokenParts := strings.Split(tokenString, " ") - if len(tokenParts) != 2 { - return nil, errors.New("not valid JWT") - } - - token, err := jwt.ParseWithClaims(tokenParts[1], claims, func(token *jwt.Token) (interface{}, error) { - return jwtKey, nil - }) - - if err != nil { - return nil, err - } - - if !token.Valid { - return nil, err - } - - return claims, nil -} diff --git a/api/auth/auth_test.go b/api/auth/auth_test.go deleted file mode 100644 index 50b6c9b..0000000 --- a/api/auth/auth_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package auth - -import ( - "os" - "testing" - "time" - - "github.com/golang-jwt/jwt/v5" - "github.com/stretchr/testify/assert" -) - -func TestGenerateAndValidateJWT(t *testing.T) { - // Set up the JWT secret for the test. - os.Setenv("JWT_SECRET", "testsecret") - jwtKey = []byte(os.Getenv("JWT_SECRET")) - - userID := 123 - tokenString, err := GenerateJWT(userID) - assert.NoError(t, err) - assert.NotEmpty(t, tokenString) - - claims, err := ValidateJWT(tokenString) - assert.NoError(t, err) - assert.NotNil(t, claims) - assert.Equal(t, userID, claims.UserID) - assert.True(t, claims.ExpiresAt.After(time.Now())) -} - -func TestValidateJWT_InvalidToken(t *testing.T) { - os.Setenv("JWT_SECRET", "testsecret") - jwtKey = []byte(os.Getenv("JWT_SECRET")) - - _, err := ValidateJWT("invalid_token") - assert.Error(t, err) -} - -func TestValidateJWT_ExpiredToken(t *testing.T) { - os.Setenv("JWT_SECRET", "testsecret") - jwtKey = []byte(os.Getenv("JWT_SECRET")) - - // Create a token that has already expired. - claims := &Claims{ - UserID: 123, - RegisteredClaims: jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time.Now().Add(-1 * time.Hour)), - }, - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - tokenString, err := token.SignedString(jwtKey) - assert.NoError(t, err) - - _, err = ValidateJWT(tokenString) - assert.Error(t, err) -} - -func TestValidateJWT_WrongSecret(t *testing.T) { - os.Setenv("JWT_SECRET", "testsecret") - jwtKey = []byte(os.Getenv("JWT_SECRET")) - - userID := 123 - tokenString, err := GenerateJWT(userID) - assert.NoError(t, err) - - // Set a different secret for validation. - wrongKey := []byte("wrongsecret") - - claims := &Claims{} - _, err = jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { - return wrongKey, nil - }) - - assert.Error(t, err) -} -- cgit v1.2.3-18-g5258