You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.1 KiB
Python

1 day ago
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)