Bot-test virker mod drift, CI kører testene, protokol opdateret
CI / test (push) Successful in 20s

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
agw
2026-10-01 20:37:34 +02:00
parent 10652ee219
commit 09d56eb8db
3 changed files with 37 additions and 10 deletions
+19 -8
View File
@@ -11,11 +11,11 @@ faser blev nået og slutstillingen blev vist.
import argparse
import asyncio
import http.cookiejar
import json
import random
import re
import sys
import urllib.error
import urllib.parse
import urllib.request
@@ -25,15 +25,26 @@ HOST_HEADERS = {"X-authentik-username": "bot-host", "X-authentik-groups": "Famil
def create_room(base: str) -> str:
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
req = urllib.request.Request(f"{base}/host/", headers=HOST_HEADERS)
html = opener.open(req).read().decode()
# CSRF-cookien er Secure i drift; over http til localhost sender vi den selv tilbage.
resp = urllib.request.urlopen(urllib.request.Request(f"{base}/host/", headers=HOST_HEADERS))
html = resp.read().decode()
cookie = re.search(r"csrftoken=([^;]+)", resp.headers.get("Set-Cookie", "")).group(1)
token = re.search(r'name="csrfmiddlewaretoken" value="([^"]+)"', html).group(1)
data = urllib.parse.urlencode({"csrfmiddlewaretoken": token}).encode()
req = urllib.request.Request(f"{base}/host/new", data=data, headers={**HOST_HEADERS, "Referer": f"{base}/host/"})
resp = opener.open(req)
return resp.geturl().rstrip("/").rsplit("/", 1)[-1]
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, *a, **k):
return None
req = urllib.request.Request(f"{base}/host/new", data=data, headers={
**HOST_HEADERS, "Referer": f"{base}/host/", "Cookie": f"csrftoken={cookie}"})
try:
urllib.request.build_opener(NoRedirect).open(req)
except urllib.error.HTTPError as e:
if e.code != 302:
raise
return e.headers["Location"].rstrip("/").rsplit("/", 1)[-1]
raise RuntimeError("forventede redirect til værtssiden")
async def host(ws_base, code, seen: list, done: asyncio.Event):