Files
IRC-kosmi-relay/cmd/test-browser-auth/main.go
cottongin d314193540 Fix stale cmd/ scripts, export LoginWithChromedp, clean up vet warnings
Update 5 cmd/ test utilities that referenced APIs that drifted after
bridge refactors (NewBrowserAuthManager, bridge.NewConfig, changed
function signatures). Rewrite test-kosmi and test-native to use
NewGraphQLWSClient directly. Export LoginWithChromedp for use by cmd
scripts. Fix redundant-newline vet warnings across 5 cmd/ files.
Remove unreachable code and replace deprecated ioutil calls in
bridge/helper/lottie_convert.go.

Made-with: Cursor
2026-04-05 05:49:26 -04:00

78 lines
1.7 KiB
Go

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 <email> <password>")
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 ""
}