#!/usr/bin/env python3 """A stand-in for a host's browser sign-in, for tests: POST starts a request, GET / says pending once and then approved with TOKEN. Usage: login-server.py """ import http.server import json import sys PORT, TOKEN = int(sys.argv[1]), sys.argv[2] polls = {} class Handler(http.server.BaseHTTPRequestHandler): def log_message(self, *args): pass def reply(self, value): body = json.dumps({"data": value}).encode() self.send_response(200) self.send_header("content-type", "application/json") self.send_header("content-length", str(len(body))) self.end_headers() self.wfile.write(body) def do_POST(self): self.rfile.read(int(self.headers.get("content-length") or 0)) self.reply({"challengeId": "chal1", "verifyUrl": f"http://127.0.0.1:{PORT}/verify/chal1", "expiresAt": ""}) def do_GET(self): n = polls.get(self.path, 0) + 1 polls[self.path] = n self.reply({"challengeId": "chal1", "status": "pending" if n < 2 else "approved", "token": TOKEN if n >= 2 else None}) http.server.HTTPServer(("127.0.0.1", PORT), Handler).serve_forever()