Matrix Docker Ansible eploy
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

56 строки
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))