app/services/gmail_service.py:53: """Return {client_id, client_secret, redirect_uri} for OAuth flows. app/services/gmail_service.py:57: if config and config.client_id: app/services/gmail_service.py:59: "client_id": config.client_id, app/services/gmail_service.py:61: "redirect_uri": config.redirect_uri or f"{settings.BASE_URL}/auth/google/callback", app/services/gmail_service.py:71: "client_id": inst["client_id"], app/services/gmail_service.py:73: "redirect_uri": f"{settings.BASE_URL}/auth/google/callback", app/services/gmail_service.py:88: if not inst or not inst.get("client_id") or not inst.get("client_secret"): app/services/gmail_service.py:89: raise GmailOauthError("JSON must contain an 'installed' or 'web' object with client_id and client_secret") app/services/gmail_service.py:92: "client_id": inst["client_id"], app/services/gmail_service.py:94: "redirect_uris": inst.get("redirect_uris", []), app/services/gmail_service.py:109: "client_id": client["client_id"], app/services/gmail_service.py:110: "redirect_uri": client["redirect_uri"], app/services/gmail_service.py:125: "client_id": client["client_id"], app/services/gmail_service.py:127: "redirect_uri": client["redirect_uri"], app/services/gmail_service.py:141: "client_id": client["client_id"], app/services/gmail_service.py:204: client_id=(client_config or {}).get("client_id"), app/services/gmail_service.py:387: return {"client_id": cfg.client_id, "client_secret": cfg.client_secret, app/services/gmail_service.py:388: "redirect_uri": cfg.redirect_uri or f"{settings.BASE_URL}/auth/google/callback"} app/services/gmail_service.py:398: return {"client_id": cfg.client_id, "client_secret": cfg.client_secret, app/services/gmail_service.py:399: "redirect_uri": cfg.redirect_uri or f"{settings.BASE_URL}/auth/google/callback"}