|
- # SPDX-FileCopyrightText: 2026 Slavi Pantaleev
- #
- # SPDX-License-Identifier: AGPL-3.0-or-later
-
- """Small HTTPS Matrix federation OpenID userinfo fixture for Molecule."""
-
- import json
- import ssl
- from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
- from urllib.parse import parse_qs, urlparse
-
-
- KNOWN_TOKEN = "known-openid-token"
- KNOWN_SUBJECT = "@alice:matrix-openid-fixture:8443"
- REQUESTS = []
-
-
- class OpenIDHandler(BaseHTTPRequestHandler):
- def send_json(self, status, document):
- body = json.dumps(document, separators=(",", ":")).encode()
- self.send_response(status)
- self.send_header("Content-Type", "application/json")
- self.send_header("Content-Length", str(len(body)))
- self.end_headers()
- self.wfile.write(body)
-
- def do_GET(self): # noqa: N802 - BaseHTTPRequestHandler API
- parsed = urlparse(self.path)
- if parsed.path == "/_molecule/requests":
- self.send_json(200, {"requests": REQUESTS})
- return
-
- if parsed.path != "/_matrix/federation/v1/openid/userinfo":
- self.send_json(404, {"errcode": "M_NOT_FOUND"})
- return
-
- token = parse_qs(parsed.query).get("access_token", [""])[0]
- REQUESTS.append({"path": parsed.path, "access_token": token})
- if token == KNOWN_TOKEN:
- self.send_json(200, {"sub": KNOWN_SUBJECT})
- return
-
- self.send_json(401, {"errcode": "M_UNAUTHORIZED", "error": "unknown token"})
-
- def log_message(self, message, *args):
- print("openid-fixture:", message % args, flush=True)
-
-
- server = ThreadingHTTPServer(("0.0.0.0", 8443), OpenIDHandler)
- tls_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
- tls_context.load_cert_chain("/fixture/cert.pem", "/fixture/key.pem")
- server.socket = tls_context.wrap_socket(server.socket, server_side=True)
- server.serve_forever()
|