package main import ( "encoding/base64" "encoding/json" "fmt" "os" "strings" bkosmi "github.com/42wim/matterbridge/bridge/kosmi" "github.com/sirupsen/logrus" ) func main() { if len(os.Args) < 3 { fmt.Println("Usage: test-browser-auth ") fmt.Println("") fmt.Println("This tests the browser-based authentication by:") fmt.Println("1. Launching headless Chrome") fmt.Println("2. Logging in to Kosmi") fmt.Println("3. Extracting the JWT token") fmt.Println("4. Parsing token expiry") os.Exit(1) } email := os.Args[1] password := os.Args[2] log := logrus.New() log.SetLevel(logrus.DebugLevel) entry := logrus.NewEntry(log) fmt.Println("🚀 Testing browser-based authentication...") fmt.Println() token, err := bkosmi.LoginWithChromedp(email, password, entry) if err != nil { fmt.Printf("❌ Authentication failed: %v\n", err) os.Exit(1) } fmt.Println() fmt.Println("✅ Authentication successful!") fmt.Println() fmt.Printf("Token (first 50 chars): %s...\n", token[:min(50, len(token))]) fmt.Printf("Token length: %d characters\n", len(token)) fmt.Println() userID := extractUserIDFromJWT(token) if userID != "" { fmt.Printf("User ID: %s\n", userID) } else { fmt.Println("(Could not extract user ID from token)") } fmt.Println() fmt.Println("🎉 Test completed successfully!") } func extractUserIDFromJWT(token string) string { parts := strings.Split(token, ".") if len(parts) != 3 { return "" } payload, err := base64.RawURLEncoding.DecodeString(parts[1]) if err != nil { return "" } var claims map[string]interface{} if err := json.Unmarshal(payload, &claims); err != nil { return "" } if sub, ok := claims["sub"].(string); ok { return sub } return "" }