mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-09-17 21:30:09 +00:00
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
# 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))
|