Matrix Docker Ansible eploy
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

56 řádky
2.1 KiB

  1. # SPDX-FileCopyrightText: 2026 Slavi Pantaleev
  2. #
  3. # SPDX-License-Identifier: AGPL-3.0-or-later
  4. """Exercise local Matrix registration and report observations to verify.yml."""
  5. import json
  6. import secrets
  7. import sys
  8. from urllib.error import HTTPError
  9. from urllib.parse import quote
  10. from urllib.request import Request, urlopen
  11. base_url, registration_token = sys.argv[1:]
  12. def request(path, body=None, access_token=None):
  13. headers = {"Content-Type": "application/json"}
  14. if access_token:
  15. headers["Authorization"] = f"Bearer {access_token}"
  16. data = json.dumps(body).encode() if body is not None else None
  17. req = Request(base_url + path, data=data, headers=headers)
  18. try:
  19. response = urlopen(req, timeout=15)
  20. except HTTPError as error:
  21. response = error
  22. with response:
  23. return {"status": response.status, "body": json.load(response)}
  24. # A fresh localpart lets `molecule verify` run repeatedly against the same database.
  25. username = "alice_" + secrets.token_hex(6)
  26. credentials = {"username": username, "password": secrets.token_urlsafe(24)}
  27. result = {"username": username}
  28. result["challenge"] = request("/_matrix/client/v3/register", credentials)
  29. session = result["challenge"]["body"].get("session", "")
  30. auth = {"type": "m.login.registration_token", "session": session}
  31. result["bad_token"] = request(
  32. "/_matrix/client/v3/register",
  33. {**credentials, "auth": {**auth, "token": registration_token + "-invalid"}},
  34. )
  35. registration = request(
  36. "/_matrix/client/v3/register",
  37. {**credentials, "auth": {**auth, "token": registration_token}},
  38. )
  39. access_token = registration["body"].pop("access_token", None)
  40. result["registration"] = registration
  41. if access_token:
  42. result["whoami"] = request("/_matrix/client/v3/account/whoami", access_token=access_token)
  43. user_id = quote(registration["body"]["user_id"], safe="")
  44. result["profile"] = request(f"/_matrix/client/v3/profile/{user_id}/displayname")
  45. result["media"] = request("/_matrix/client/v1/media/config", access_token=access_token)
  46. result["well_known"] = request("/.well-known/matrix/client")
  47. print(json.dumps(result))