From d9abcb3ef440d19b09c05dd25f9fb83d44d9f889 Mon Sep 17 00:00:00 2001 From: Lars Date: Mon, 11 Aug 2025 11:01:23 +0200 Subject: [PATCH] llm-api/wiki_router.py aktualisiert --- llm-api/wiki_router.py | 56 ++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/llm-api/wiki_router.py b/llm-api/wiki_router.py index 8d46d15..bd83626 100644 --- a/llm-api/wiki_router.py +++ b/llm-api/wiki_router.py @@ -118,42 +118,66 @@ def health() -> Dict[str, str]: @router.post("/login", response_model=WikiLoginResponse) def login(data: WikiLoginRequest): - # Token holen + # 1) Token holen try: - token_resp = wiki_session.get( + tok = wiki_session.get( WIKI_API_URL, - params={"action": "query", "meta": "tokens", "type": "login", "format": "json"}, + params={"action":"query","meta":"tokens","type":"login","format":"json"}, timeout=10, ) - token_resp.raise_for_status() - token = token_resp.json().get("query", {}).get("tokens", {}).get("logintoken") + tok.raise_for_status() + logintoken = tok.json().get("query", {}).get("tokens", {}).get("logintoken") + if not logintoken: + raise HTTPException(status_code=502, detail="Kein Login-Token erhalten") except Exception as e: raise HTTPException(status_code=502, detail=f"Token-Error: {e}") - if not token: - raise HTTPException(status_code=502, detail="Kein Login-Token erhalten") - # clientlogin + # 2) Versuch: clientlogin (mit loginreturnurl!) try: - login_resp = wiki_session.post( + cl = wiki_session.post( WIKI_API_URL, data={ "action": "clientlogin", "format": "json", "username": data.username, "password": data.password, - "logintoken": token, + "logintoken": logintoken, + "loginreturnurl": "https://example.org/" # notwendig bei manchen Setups }, timeout=15, ) - login_resp.raise_for_status() - status = login_resp.json().get("clientlogin", {}).get("status") - if status != "PASS": - raise HTTPException(status_code=401, detail=f"Login fehlgeschlagen: {status}") + cl.raise_for_status() + clj = cl.json().get("clientlogin", {}) + if clj.get("status") == "PASS": + return WikiLoginResponse(status="success") + # Falls UI/FAIL/etc.: weiter mit Legacy + except Exception as e: + # nicht sofort fehlschlagen – Legacy probieren + pass + + # 3) Fallback: action=login (Legacy) + try: + lg = wiki_session.post( + WIKI_API_URL, + data={ + "action": "login", + "format": "json", + "lgname": data.username, + "lgpassword": data.password, + "lgtoken": logintoken, + }, + timeout=15, + ) + lg.raise_for_status() + res = lg.json().get("login", {}).get("result") + if res == "Success": + return WikiLoginResponse(status="success") + raise HTTPException(status_code=401, detail=f"Login fehlgeschlagen (legacy): {res}") except HTTPException: raise except Exception as e: - raise HTTPException(status_code=502, detail=f"Login-Error: {e}") - return WikiLoginResponse(status="success") + raise HTTPException(status_code=502, detail=f"Login-Error (legacy): {e}") + @router.get("/semantic/pages") def semantic_pages(category: str = Query(..., description="Kategorie ohne 'Category:'")) -> Dict[str, Any]: