Fix get_manifest

This commit is contained in:
Nirvana
2025-11-21 11:58:51 +01:00
parent d2f7cb5065
commit 60cc65d92c
3 changed files with 44 additions and 27 deletions
@@ -472,36 +472,45 @@ class Magenta2Provider(StreamingProvider):
return False
def get_persona_token(self, force_refresh: bool = False) -> str:
"""Get persona token with simple provider-level caching"""
"""
Get persona token - PRIMARY authentication entry point
"""
logger.debug(f"🟢 get_persona_token START (force_refresh: {force_refresh})")
if not self.authenticator.token_flow_manager:
logger.error("🔴 TokenFlowManager not initialized")
raise Exception("TokenFlowManager not initialized")
# Optional: Add simple time-based caching at provider level
if not force_refresh and hasattr(self, '_persona_cache'):
cache_time, cached_token = self._persona_cache
# Cache for 5 minutes at provider level (TokenFlowManager has proper JWT expiry)
if time.time() - cache_time < 300:
return cached_token
try:
persona_result = self.authenticator.token_flow_manager.get_persona_token(
force_refresh=force_refresh
)
# Get from TokenFlowManager (which has proper JWT expiry caching)
persona_result = self.authenticator.token_flow_manager.get_persona_token(
force_refresh=force_refresh
)
if not persona_result.success:
logger.error(f"🔴 get_persona_token FAILED: {persona_result.error}")
raise Exception(f"Failed to get persona token: {persona_result.error}")
if not persona_result.success:
raise Exception(f"Failed to get persona token: {persona_result.error}")
logger.debug(f"🟢 get_persona_token SUCCESS, token length: {len(persona_result.persona_token)}")
return persona_result.persona_token
# Optional: Cache in provider (simple time-based)
if not hasattr(self, '_persona_cache'):
self._persona_cache = (time.time(), persona_result.persona_token)
else:
self._persona_cache = (time.time(), persona_result.persona_token)
return persona_result.persona_token
except Exception as e:
logger.error(f"🔴 get_persona_token EXCEPTION: {type(e).__name__}: {e}")
import traceback
logger.error(f"🔴 FULL TRACEBACK: {traceback.format_exc()}")
raise
def _ensure_authenticated(self) -> str:
"""Ensure we have a valid persona token"""
return self.get_persona_token(force_refresh=False)
logger.debug("🟢 _ensure_authenticated START")
try:
token = self.get_persona_token(force_refresh=False)
logger.debug(f"🟢 _ensure_authenticated SUCCESS, token length: {len(token)}")
return token
except Exception as e:
logger.error(f"🔴 _ensure_authenticated FAILED: {type(e).__name__}: {e}")
import traceback
logger.error(f"🔴 FULL TRACEBACK: {traceback.format_exc()}")
raise
def get_dynamic_manifest_params(self, channel: StreamingChannel, **kwargs) -> Optional[str]:
return None
@@ -98,7 +98,7 @@ class TokenFlowManager:
return cached_result
# Get the yo_digital token
token_result = self.get_yo_digital_token(force_refresh)
token_result = self.get_yo_digital_token(force_refresh) # 🚨 This might return None!
if not token_result.success or not token_result.access_token:
logger.debug("=== GET_PERSONA_TOKEN FAILED (token_result failed) ===")
@@ -109,7 +109,7 @@ class TokenFlowManager:
# Compose persona token with expiry information using existing method
from .token_utils import PersonaTokenComposer
composition_result = PersonaTokenComposer.compose_from_jwt(
composition_result = PersonaTokenComposer.compose_from_jwt( # 🚨 This might return None!
token_result.access_token,
MAGENTA2_FALLBACK_ACCOUNT_URI
)
@@ -199,34 +199,40 @@ class PersonaTokenComposer:
@staticmethod
def compose_from_jwt(jwt_token: str, fallback_account_uri: str = None) -> Optional[PersonaCompositionResult]:
"""Compose persona token and return with expiry information"""
logger.debug(f"🟢 PersonaTokenComposer.compose_from_jwt START")
try:
logger.debug(f"🟢 Input JWT token length: {len(jwt_token) if jwt_token else 0}")
claims = JWTParser.parse(jwt_token)
if not claims:
logger.error("🔴 JWTParser.parse returned None")
return None
# Extract the dc_cts_personaToken (this is the actual persona JWT)
persona_jwt = claims.dc_cts_persona_token
if not persona_jwt:
logger.warning("JWT missing dc_cts_personaToken")
logger.warning("🔴 JWT missing dc_cts_personaToken")
return None
# Get account_uri from claims or use fallback
account_uri = claims.account_uri or fallback_account_uri
if not account_uri:
logger.warning("JWT missing account_uri and no fallback provided")
logger.warning("🔴 JWT missing account_uri and no fallback provided")
return None
# Compose the persona token
composed_token = PersonaTokenComposer._compose_token(account_uri, persona_jwt)
if not composed_token:
logger.error("🔴 _compose_token returned None")
return None
# Extract expiry from the PERSONA JWT (dc_cts_personaToken), not the original JWT
persona_expiry = PersonaTokenComposer._get_jwt_expiry(persona_jwt)
if not persona_expiry:
logger.warning("Could not extract expiry from persona JWT")
logger.warning("🔴 Could not extract expiry from persona JWT")
return None
logger.debug(f"🟢 PersonaTokenComposer.compose_from_jwt SUCCESS")
return PersonaCompositionResult(
persona_token=composed_token,
persona_jwt=persona_jwt,
@@ -234,7 +240,9 @@ class PersonaTokenComposer:
)
except Exception as e:
logger.error(f"Error composing persona token: {e}")
logger.error(f"🔴 Error in PersonaTokenComposer.compose_from_jwt: {e}")
import traceback
logger.error(f"🔴 FULL TRACEBACK: {traceback.format_exc()}")
return None
@staticmethod