diff --git a/app/config.py b/app/config.py index 7dc4078..a98a510 100644 --- a/app/config.py +++ b/app/config.py @@ -54,10 +54,18 @@ class Settings(BaseSettings): # Token für Unsubscribe-Links (HMAC-Secret) unsubscribe_secret: str = "change-me-in-prod" - # Gitea-API-Token für Feedback-Issues (Issue #feedback-widget) + # Gitea-API-Token (Tobias' persoenlicher Token) — fuer alle internen + # Operationen ausser User-Feedback (siehe gitea_feedback_token). # Wert in .env: GITEA_TOKEN= # Token-Quelle: cat ~/.claude/.gitea-token gitea_token: str = "" + # Separater Token fuer das Feedback-Widget. Authentisiert sich als + # eigener Account (z.B. `gwoe-feedback`), damit User-Feedback-Issues + # nicht unter Tobias' Identitaet erscheinen — saubere Trennung + # zwischen Owner und externen Eingaben. + # Wert in .env: GITEA_FEEDBACK_TOKEN= + # Fallback: wenn leer, wird gitea_token verwendet (Rueckwaerts-Kompat). + gitea_feedback_token: str = "" gitea_api_url: str = "https://repo.toppyr.de/api/v1" gitea_repo_owner: str = "tobias" gitea_repo_name: str = "gwoe-antragspruefer" diff --git a/app/main.py b/app/main.py index 93d6970..4a33748 100644 --- a/app/main.py +++ b/app/main.py @@ -4336,8 +4336,13 @@ async def submit_feedback( issue_body = "\n".join(body_parts) - if not settings.gitea_token: - logger.warning("GITEA_TOKEN nicht gesetzt — Feedback-Issue kann nicht angelegt werden") + # Bevorzugt den Feedback-Bot-Token (Account gwoe-feedback), faellt + # auf Tobias' persoenlichen Token nur zurueck, wenn der Bot-Token + # leer ist (Migrations-Phase). Damit erscheinen Feedback-Issues unter + # einer eigenen Identitaet, statt unter Tobias' Namen. + token = settings.gitea_feedback_token or settings.gitea_token + if not token: + logger.warning("GITEA_FEEDBACK_TOKEN/GITEA_TOKEN nicht gesetzt — Feedback-Issue kann nicht angelegt werden") raise HTTPException( status_code=503, detail="Feedback-Funktion ist derzeit nicht konfiguriert (kein Gitea-Token)." @@ -4346,7 +4351,6 @@ async def submit_feedback( base_url = settings.gitea_api_url owner = settings.gitea_repo_owner repo = settings.gitea_repo_name - token = settings.gitea_token headers = {"Authorization": f"token {token}", "Content-Type": "application/json"} async with httpx.AsyncClient(timeout=15.0) as session: diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 290c7b1..56f5639 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -21,6 +21,7 @@ services: - EMBEDDING_MODEL_READ=${EMBEDDING_MODEL_READ:-text-embedding-v3} - BASE_URL=${BASE_URL:-https://gwoe-dev.toppyr.de} - GITEA_TOKEN=${GITEA_TOKEN} + - GITEA_FEEDBACK_TOKEN=${GITEA_FEEDBACK_TOKEN} - GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1} - GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias} - GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer} diff --git a/docker-compose.yml b/docker-compose.yml index 93423a8..e0e6ebb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,11 @@ services: - UNSUBSCRIBE_SECRET=${UNSUBSCRIBE_SECRET} - BASE_URL=${BASE_URL:-https://gwoe.toppyr.de} # Gitea-Anbindung fuer Feedback-Widget (#149-Folge) + # GITEA_TOKEN: Tobias' Token fuer interne Ops (Issue-Aggregat etc.) + # GITEA_FEEDBACK_TOKEN: separater Token vom Bot-Account 'gwoe-feedback', + # damit User-Feedback-Issues nicht als Tobias erscheinen. - GITEA_TOKEN=${GITEA_TOKEN} + - GITEA_FEEDBACK_TOKEN=${GITEA_FEEDBACK_TOKEN} - GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1} - GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias} - GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer}