2025-11-01 21:00:16 -04:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2026-04-05 05:49:26 -04:00
|
|
|
"encoding/base64"
|
|
|
|
|
"encoding/json"
|
2025-11-01 21:00:16 -04:00
|
|
|
"fmt"
|
|
|
|
|
"os"
|
2026-04-05 05:49:26 -04:00
|
|
|
"strings"
|
2025-11-01 21:00:16 -04:00
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
2026-04-05 05:49:26 -04:00
|
|
|
token, err := bkosmi.LoginWithChromedp(email, password, entry)
|
2025-11-01 21:00:16 -04:00
|
|
|
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()
|
|
|
|
|
|
2026-04-05 05:49:26 -04:00
|
|
|
userID := extractUserIDFromJWT(token)
|
2025-11-01 21:00:16 -04:00
|
|
|
if userID != "" {
|
|
|
|
|
fmt.Printf("User ID: %s\n", userID)
|
2026-04-05 05:49:26 -04:00
|
|
|
} else {
|
|
|
|
|
fmt.Println("(Could not extract user ID from token)")
|
2025-11-01 21:00:16 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println()
|
|
|
|
|
fmt.Println("🎉 Test completed successfully!")
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-05 05:49:26 -04:00
|
|
|
func extractUserIDFromJWT(token string) string {
|
|
|
|
|
parts := strings.Split(token, ".")
|
|
|
|
|
if len(parts) != 3 {
|
|
|
|
|
return ""
|
2025-11-01 21:00:16 -04:00
|
|
|
}
|
2026-04-05 05:49:26 -04:00
|
|
|
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 ""
|
2025-11-01 21:00:16 -04:00
|
|
|
}
|