Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
+19
-8
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user