diff --git a/internal/auth/jwt_test.go b/internal/auth/jwt_test.go new file mode 100644 index 0000000..2a0d7fe --- /dev/null +++ b/internal/auth/jwt_test.go @@ -0,0 +1,76 @@ +package auth + +import ( + "testing" + + "github.com/golang-jwt/jwt/v5" +) + +func TestCheckPermissions(t *testing.T) { + validator := NewValidator( + "https://authentik.riotpiao.com/application/o/sqs/", + "sqs", + "https://authentik.riotpiao.com/application/o/sqs/jwks/", + ) + + // Test 1: Finds sqs:read + claims1 := jwt.MapClaims{ + "permissions": []interface{}{"sqs:read", "memory:write"}, + } + if !validator.CheckPermissions(claims1, "sqs:read", "sqs:write") { + t.Fatal("expected to find sqs:read permission") + } + + // Test 2: Finds wildcard + claims2 := jwt.MapClaims{ + "permissions": []interface{}{"*"}, + } + if !validator.CheckPermissions(claims2, "sqs:read") { + t.Fatal("expected to find wildcard permission") + } + + // Test 3: Rejects when missing + claims3 := jwt.MapClaims{ + "permissions": []interface{}{"memory:read"}, + } + if validator.CheckPermissions(claims3, "sqs:read") { + t.Fatal("expected to reject missing permission") + } + + // Test 4: Handles missing permissions claim + claims4 := jwt.MapClaims{} + if validator.CheckPermissions(claims4, "sqs:read") { + t.Fatal("expected to reject missing permissions claim") + } + + t.Log("✅ All permission checks passed") +} + +func TestValidateBearerToken(t *testing.T) { + validator := NewValidator( + "https://authentik.riotpiao.com/application/o/sqs/", + "sqs", + "https://authentik.riotpiao.com/application/o/sqs/jwks/", + ) + + // Test 1: Empty token + _, err := validator.ValidateBearerToken("") + if err == nil { + t.Fatal("expected error for empty token") + } + t.Logf("✅ Correctly rejected empty token: %v", err) + + // Test 2: Invalid format + _, err = validator.ValidateBearerToken("not-a-bearer-token") + if err == nil { + t.Fatal("expected error for invalid format") + } + t.Logf("✅ Correctly rejected invalid format: %v", err) + + // Test 3: Invalid token payload + _, err = validator.ValidateBearerToken("Bearer invalid.token.format") + if err == nil { + t.Fatal("expected error for invalid token") + } + t.Logf("✅ Correctly rejected invalid token: %v", err) +}