From 9262ae79dd9df5524759d83f3d54cf293813687e Mon Sep 17 00:00:00 2001 From: cottongin Date: Sun, 2 Nov 2025 16:48:18 -0500 Subject: [PATCH] nailed it --- .gitignore | 3 +++ bridge/kosmi/kosmi.go | 25 +++++++++++++++++++++---- docker-compose.yml | 4 ++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 8e3b58a..bfbe0ea 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ build/ .examples/ chat-summaries/ bin/ + +# Persistent data directory (contains cached tokens) +data/ diff --git a/bridge/kosmi/kosmi.go b/bridge/kosmi/kosmi.go index f3508f9..1a75eaa 100644 --- a/bridge/kosmi/kosmi.go +++ b/bridge/kosmi/kosmi.go @@ -70,12 +70,29 @@ func (b *Bkosmi) Connect() error { var token string if email != "" && password != "" { - b.Log.Info("Authenticating with email/password...") - token, err = loginWithChromedp(email, password, b.Log) + // Try to load cached token first + cachedToken, err := loadTokenCache(email, b.Log) if err != nil { - return fmt.Errorf("authentication failed: %w", err) + b.Log.Warnf("Failed to load token cache: %v", err) + } + + if cachedToken != nil { + // Use cached token + token = cachedToken.Token + } else { + // No valid cache, authenticate with browser + b.Log.Info("Authenticating with email/password...") + token, err = loginWithChromedp(email, password, b.Log) + if err != nil { + return fmt.Errorf("authentication failed: %w", err) + } + b.Log.Info("✅ Authentication successful") + + // Save token to cache + if err := saveTokenCache(token, email, b.Log); err != nil { + b.Log.Warnf("Failed to cache token: %v", err) + } } - b.Log.Info("✅ Authentication successful") } else { b.Log.Info("No credentials provided, using anonymous access") // token will be empty, client will get anonymous token diff --git a/docker-compose.yml b/docker-compose.yml index 8a8f2ca..e55be18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,12 +14,16 @@ services: - ./matterbridge.toml:/app/matterbridge.toml:ro,z # Optional: Mount a directory for logs - ./logs:/app/logs:z + # Mount data directory for persistent token cache + - ./data:/app/data:z # If you need to expose any ports (e.g., for API or webhooks) # ports: # - "4242:4242" environment: # Optional: Set timezone - TZ=America/New_York + # Data directory for persistent storage (token cache, etc.) + - MATTERBRIDGE_DATA_DIR=/app/data # Optional: Set memory limits (much lower now without browser!) # mem_limit: 128m # mem_reservation: 64m