import json from datetime import datetime from typing import Optional from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import Flow from app.core.config import settings def build_flow(state: Optional[str] = None) -> Flow: flow = Flow.from_client_secrets_file( settings.GOOGLE_CLIENT_SECRET_FILE, scopes=settings.scopes_list(), state=state, ) flow.redirect_uri = settings.GOOGLE_REDIRECT_URI return flow def creds_from_token_json(token_json: str) -> Credentials: data = json.loads(token_json) # google.oauth2.credentials.Credentials acepta kwargs del token JSON return Credentials(**data) def token_json_from_creds(creds: Credentials) -> str: # Convertimos a dict estándar data = { "token": creds.token, "refresh_token": creds.refresh_token, "token_uri": creds.token_uri, "client_id": creds.client_id, "client_secret": creds.client_secret, "scopes": creds.scopes, "id_token": getattr(creds, "id_token", None), } # Algunos campos pueden ser None; igual está ok. return json.dumps(data, ensure_ascii=False)