Matrix Docker Ansible eploy
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

56 líneas
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))