Matrix Docker Ansible eploy
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 line
1.8 KiB

  1. # SPDX-FileCopyrightText: 2026 Slavi Pantaleev
  2. #
  3. # SPDX-License-Identifier: AGPL-3.0-or-later
  4. """Small HTTPS Matrix federation OpenID userinfo fixture for Molecule."""
  5. import json
  6. import ssl
  7. from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
  8. from urllib.parse import parse_qs, urlparse
  9. KNOWN_TOKEN = "known-openid-token"
  10. KNOWN_SUBJECT = "@alice:matrix-openid-fixture:8443"
  11. REQUESTS = []
  12. class OpenIDHandler(BaseHTTPRequestHandler):
  13. def send_json(self, status, document):
  14. body = json.dumps(document, separators=(",", ":")).encode()
  15. self.send_response(status)
  16. self.send_header("Content-Type", "application/json")
  17. self.send_header("Content-Length", str(len(body)))
  18. self.end_headers()
  19. self.wfile.write(body)
  20. def do_GET(self): # noqa: N802 - BaseHTTPRequestHandler API
  21. parsed = urlparse(self.path)
  22. if parsed.path == "/_molecule/requests":
  23. self.send_json(200, {"requests": REQUESTS})
  24. return
  25. if parsed.path != "/_matrix/federation/v1/openid/userinfo":
  26. self.send_json(404, {"errcode": "M_NOT_FOUND"})
  27. return
  28. token = parse_qs(parsed.query).get("access_token", [""])[0]
  29. REQUESTS.append({"path": parsed.path, "access_token": token})
  30. if token == KNOWN_TOKEN:
  31. self.send_json(200, {"sub": KNOWN_SUBJECT})
  32. return
  33. self.send_json(401, {"errcode": "M_UNAUTHORIZED", "error": "unknown token"})
  34. def log_message(self, message, *args):
  35. print("openid-fixture:", message % args, flush=True)
  36. server = ThreadingHTTPServer(("0.0.0.0", 8443), OpenIDHandler)
  37. tls_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
  38. tls_context.load_cert_chain("/fixture/cert.pem", "/fixture/key.pem")
  39. server.socket = tls_context.wrap_socket(server.socket, server_side=True)
  40. server.serve_forever()