5.2 KiB
Checkliste: Google Cloud — PORTA (OAuth + Speech)
Operative Liste: was im Google Cloud Projekt (z. B. Organisation poweron-center-ai-org, Projekt PowerOn Porta) eingerichtet werden muss und welche Gateway-Variablen/Code-Stellen dazu passen.
Detaillierte OAuth-Schritte und Troubleshooting: google-oauth-setup.md.
1) Google Cloud Console — APIs aktivieren
Projekt auswählen → APIs & Services → Library.
| API | Wofür im Gateway |
|---|---|
| Gmail API | Mail-Connector (readonly-Scope) |
| Google Drive API | Drive-Connector (readonly) |
| Google Calendar API | Kalender-Connector (readonly) |
| People API | Kontakte (readonly) |
| Cloud Speech-to-Text API | STT (/voice-google/stt/*) |
| Cloud Text-to-Speech API | TTS über ConnectorGoogleSpeech |
2) OAuth-Zustimmungsbildschirm
APIs & Services → OAuth consent screen.
- App-Name, Support-Mail, Developer Contact wie von Google gefordert.
- Scopes müssen zur Code-Basis passen (Single Source of Truth):
platform-core/modules/auth/oauthProviderConfig.py → googleAuthScopes, googleDataScopes
Kurzreferenz:
| Zweck | Scopes |
|---|---|
| Nur Login (Auth-App) | openid, userinfo.email, userinfo.profile |
| Datenverbindung (Data-App) | wie Auth plus gmail.readonly, drive.readonly, calendar.readonly, contacts.readonly |
Hinweis: Nach Scope-Erweiterung müssen Nutzer Google-Verbindungen in der UI Reconnect auslösen (siehe google-oauth-setup.md).
3) OAuth 2.0 Client(s) — „Web application“
APIs & Services → Credentials → Create credentials → OAuth client ID.
Das Gateway unterstützt getrennte Auth- und Data-Clients (unterschiedliche Client-IDs) oder einen gemeinsamen Client (in den Envs sind ID/Secret für Auth und Data oft identisch).
Authorized redirect URIs — pro öffentlich erreichbare Gateway-Basis-URL zwei Einträge (Pfad exakt, inkl. http/https):
| Pfad | Verwendung |
|---|---|
{origin}/api/google/auth/login/callback |
Login-Flow (Service_GOOGLE_AUTH_REDIRECT_URI) |
{origin}/api/google/auth/connect/callback |
Connect/Reconnect (Service_GOOGLE_DATA_REDIRECT_URI) |
In diesem Repo typische Origins (jeweils beide Callbacks eintragen):
- Lokal:
http://localhost:8000 - INT:
https://gateway-int.poweron.swiss - PROD:
https://gateway-prod.poweron.swiss - Forgejo/ALT-Prod (falls genutzt):
https://api.poweron.swiss— inenv-gateway-prod-forgejo.envGoogle*_REDIRECT_URIggf. noch setzen.
Backend-Routing: platform-core/modules/routes/routeSecurityGoogle.py.
4) Speech / Voice (ohne User-OAuth)
Credentials → API key (empfohlen:auf Speech + TTS beschränken) oder Service-Account nach Vorgabe des Connector (siehe platform-core/modules/connectors/connectorVoiceGoogle.py: Connector_GoogleSpeech_API_KEY_SECRET kann API-Key oder SA-JSON sein).
Doku STT/TTS: b-reference/platform-core/voice-google.md.
5) Gateway — Env-Dateien anpassen
Alle Werte ohne echte Secrets im Wiki; in den Deploy-Envs mit eurem Verschlüsselungsworkflow pflegen (encrypt-env-secrets.md).
| Variable | Bedeutung |
|---|---|
Service_GOOGLE_AUTH_CLIENT_ID |
OAuth Client (Login) |
Service_GOOGLE_AUTH_CLIENT_SECRET |
Geheimnis (verschlüsselt) |
Service_GOOGLE_AUTH_REDIRECT_URI |
Muss 1:1 mit Google Console Login-Callback übereinstimmen |
Service_GOOGLE_DATA_CLIENT_ID |
OAuth Client (Connector); darf = Auth sein |
Service_GOOGLE_DATA_CLIENT_SECRET |
Geheimnis (verschlüsselt) |
Service_GOOGLE_DATA_REDIRECT_URI |
Muss 1:1 mit Google Console Connect-Callback übereinstimmen |
Connector_GoogleSpeech_API_KEY_SECRET |
Speech/TTS API-Key oder SA-JSON (verschlüsselt) |
Dateien (Stand Repo): platform-core/env-gateway-dev.env, env-gateway-int.env, env-gateway-prod.env, env-gateway-prod-forgejo.env, ggf. platform-core/.env.
Zusätzlich — wenn neues Frontend oder neuer API-Host:
APP_API_URLmuss die Basis sein, unter der/api/google/...erreichbar ist (Cookie/SameSite-Kontext).APP_ALLOWED_ORIGINS— CORS für das UI, falls neue Origins dazukommen.
6) Gateway — Python (nur bei Scope-/API-Änderungen)
| Datei | Wann anfassen |
|---|---|
platform-core/modules/auth/oauthProviderConfig.py |
Neue/entfernte Google-Scopes für Login oder Datenverbindung |
platform-core/modules/routes/routeSecurityGoogle.py |
Nur bei Flow-/Route-Änderungen (unüblich) |
platform-core/modules/auth/tokenManager.py |
Nutzt Service_GOOGLE_DATA_* für Refresh — keine manuelle Anpassung bei reiner Registrierung |
Token-Refresh und Microsoft/Google Data: platform-core/modules/auth/tokenManager.py.
7) Smoke-Tests
- Login mit Google: redirected zu Google, Rückkehr ohne
redirect_uri_mismatch - Verbindungen → Google connect/reconnect
- Drive/Mail/Kalender/Kontakte je nach Feature smoke-testen
- STT/TTS: kurzer Aufruf über Voice-Route (siehe
voice-google.md)