Matrix Docker Ansible eploy
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

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