feat(feedback): separater Gitea-Bot-Account fuer Feedback-Issues
Bisher wurden Issues aus dem Feedback-Widget unter Tobias' Identitaet angelegt (GITEA_TOKEN ist sein persoenlicher Token). Folge: echte Tobias-Issues und User-Feedback waren in der Authoren-Spalte nicht mehr unterscheidbar. Neuer Gitea-Account 'gwoe-feedback' (Display: Gast-Feedback) bekommt seinen eigenen Token mit Scope write:issue+write:repository, ist Collaborator mit write-Perm auf das Repo. Code nimmt diesen Token bevorzugt; wenn er leer ist, faellt er auf gitea_token zurueck (Rueckwaerts-Kompat fuer noch-nicht-konfigurierte Umgebungen). ENV: GITEA_FEEDBACK_TOKEN — in beide Compose-Files reingereicht, in beide .env-Files eingetragen.
This commit is contained in:
parent
468d7d508f
commit
238f99023c
@ -54,10 +54,18 @@ class Settings(BaseSettings):
|
|||||||
# Token für Unsubscribe-Links (HMAC-Secret)
|
# Token für Unsubscribe-Links (HMAC-Secret)
|
||||||
unsubscribe_secret: str = "change-me-in-prod"
|
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>
|
# Wert in .env: GITEA_TOKEN=<token>
|
||||||
# Token-Quelle: cat ~/.claude/.gitea-token
|
# Token-Quelle: cat ~/.claude/.gitea-token
|
||||||
gitea_token: str = ""
|
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=<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_api_url: str = "https://repo.toppyr.de/api/v1"
|
||||||
gitea_repo_owner: str = "tobias"
|
gitea_repo_owner: str = "tobias"
|
||||||
gitea_repo_name: str = "gwoe-antragspruefer"
|
gitea_repo_name: str = "gwoe-antragspruefer"
|
||||||
|
|||||||
10
app/main.py
10
app/main.py
@ -4336,8 +4336,13 @@ async def submit_feedback(
|
|||||||
|
|
||||||
issue_body = "\n".join(body_parts)
|
issue_body = "\n".join(body_parts)
|
||||||
|
|
||||||
if not settings.gitea_token:
|
# Bevorzugt den Feedback-Bot-Token (Account gwoe-feedback), faellt
|
||||||
logger.warning("GITEA_TOKEN nicht gesetzt — Feedback-Issue kann nicht angelegt werden")
|
# 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(
|
raise HTTPException(
|
||||||
status_code=503,
|
status_code=503,
|
||||||
detail="Feedback-Funktion ist derzeit nicht konfiguriert (kein Gitea-Token)."
|
detail="Feedback-Funktion ist derzeit nicht konfiguriert (kein Gitea-Token)."
|
||||||
@ -4346,7 +4351,6 @@ async def submit_feedback(
|
|||||||
base_url = settings.gitea_api_url
|
base_url = settings.gitea_api_url
|
||||||
owner = settings.gitea_repo_owner
|
owner = settings.gitea_repo_owner
|
||||||
repo = settings.gitea_repo_name
|
repo = settings.gitea_repo_name
|
||||||
token = settings.gitea_token
|
|
||||||
headers = {"Authorization": f"token {token}", "Content-Type": "application/json"}
|
headers = {"Authorization": f"token {token}", "Content-Type": "application/json"}
|
||||||
|
|
||||||
async with httpx.AsyncClient(timeout=15.0) as session:
|
async with httpx.AsyncClient(timeout=15.0) as session:
|
||||||
|
|||||||
@ -21,6 +21,7 @@ services:
|
|||||||
- EMBEDDING_MODEL_READ=${EMBEDDING_MODEL_READ:-text-embedding-v3}
|
- EMBEDDING_MODEL_READ=${EMBEDDING_MODEL_READ:-text-embedding-v3}
|
||||||
- BASE_URL=${BASE_URL:-https://gwoe-dev.toppyr.de}
|
- BASE_URL=${BASE_URL:-https://gwoe-dev.toppyr.de}
|
||||||
- GITEA_TOKEN=${GITEA_TOKEN}
|
- GITEA_TOKEN=${GITEA_TOKEN}
|
||||||
|
- GITEA_FEEDBACK_TOKEN=${GITEA_FEEDBACK_TOKEN}
|
||||||
- GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1}
|
- GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1}
|
||||||
- GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias}
|
- GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias}
|
||||||
- GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer}
|
- GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer}
|
||||||
|
|||||||
@ -24,7 +24,11 @@ services:
|
|||||||
- UNSUBSCRIBE_SECRET=${UNSUBSCRIBE_SECRET}
|
- UNSUBSCRIBE_SECRET=${UNSUBSCRIBE_SECRET}
|
||||||
- BASE_URL=${BASE_URL:-https://gwoe.toppyr.de}
|
- BASE_URL=${BASE_URL:-https://gwoe.toppyr.de}
|
||||||
# Gitea-Anbindung fuer Feedback-Widget (#149-Folge)
|
# 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_TOKEN=${GITEA_TOKEN}
|
||||||
|
- GITEA_FEEDBACK_TOKEN=${GITEA_FEEDBACK_TOKEN}
|
||||||
- GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1}
|
- GITEA_API_URL=${GITEA_API_URL:-https://repo.toppyr.de/api/v1}
|
||||||
- GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias}
|
- GITEA_REPO_OWNER=${GITEA_REPO_OWNER:-tobias}
|
||||||
- GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer}
|
- GITEA_REPO_NAME=${GITEA_REPO_NAME:-gwoe-antragspruefer}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user