|
- # SPDX-FileCopyrightText: 2026 Slavi Pantaleev
- #
- # SPDX-License-Identifier: AGPL-3.0-or-later
-
- """Exercise local Matrix registration and report observations to verify.yml."""
-
- import json
- import secrets
- import sys
- from urllib.error import HTTPError
- from urllib.parse import quote
- from urllib.request import Request, urlopen
-
-
- base_url, registration_token = sys.argv[1:]
-
-
- def request(path, body=None, access_token=None):
- headers = {"Content-Type": "application/json"}
- if access_token:
- headers["Authorization"] = f"Bearer {access_token}"
- data = json.dumps(body).encode() if body is not None else None
- req = Request(base_url + path, data=data, headers=headers)
- try:
- response = urlopen(req, timeout=15)
- except HTTPError as error:
- response = error
- with response:
- return {"status": response.status, "body": json.load(response)}
-
-
- # A fresh localpart lets `molecule verify` run repeatedly against the same database.
- username = "alice_" + secrets.token_hex(6)
- credentials = {"username": username, "password": secrets.token_urlsafe(24)}
- result = {"username": username}
- result["challenge"] = request("/_matrix/client/v3/register", credentials)
- session = result["challenge"]["body"].get("session", "")
- auth = {"type": "m.login.registration_token", "session": session}
- result["bad_token"] = request(
- "/_matrix/client/v3/register",
- {**credentials, "auth": {**auth, "token": registration_token + "-invalid"}},
- )
- registration = request(
- "/_matrix/client/v3/register",
- {**credentials, "auth": {**auth, "token": registration_token}},
- )
- access_token = registration["body"].pop("access_token", None)
- result["registration"] = registration
- if access_token:
- result["whoami"] = request("/_matrix/client/v3/account/whoami", access_token=access_token)
- user_id = quote(registration["body"]["user_id"], safe="")
- result["profile"] = request(f"/_matrix/client/v3/profile/{user_id}/displayname")
- result["media"] = request("/_matrix/client/v1/media/config", access_token=access_token)
- result["well_known"] = request("/.well-known/matrix/client")
- print(json.dumps(result))
|