Matrix Docker Ansible eploy
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

56 wiersze
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))