""" Presenton Version Server (test/dev stub) This simulates the remote version-check endpoint that the Electron app polls. In production, replace UPDATE_SERVER_URL in the Electron app with your hosted URL. Usage: python test_server.py [--port 8765] Endpoint: GET /versions -> JSON with latest version and download info """ import json import argparse from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse VERSIONS = { "latest": "0.7.0", "versions": [ "0.5.0", "0.6.0", "0.6.1-beta", "0.7.0", ], "download_url": "https://github.com/presenton/presenton/releases/latest", "release_notes": "Bug fixes, performance improvements, and new AI model support.", } class VersionHandler(BaseHTTPRequestHandler): def do_GET(self): parsed = urlparse(self.path) if parsed.path == "/versions": body = json.dumps(VERSIONS, indent=2).encode() self.send_response(200) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(body))) self.send_header("Access-Control-Allow-Origin", "*") self.end_headers() self.wfile.write(body) else: self.send_response(404) self.end_headers() self.wfile.write(b'{"error": "Not found"}') def do_OPTIONS(self): self.send_response(200) self.send_header("Access-Control-Allow-Origin", "*") self.send_header("Access-Control-Allow-Methods", "GET, OPTIONS") self.end_headers() def log_message(self, format, *args): print(f"[VersionServer] {self.address_string()} - {format % args}", flush=True) def main(): parser = argparse.ArgumentParser(description="Presenton version check server") parser.add_argument("--port", type=int, default=8765, help="Port to listen on") parser.add_argument("--host", type=str, default="0.0.0.0", help="Host to bind to") args = parser.parse_args() server = HTTPServer((args.host, args.port), VersionHandler) print(f"Presenton version server running at http://{args.host}:{args.port}", flush=True) print(f" GET /versions -> version information", flush=True) print(f" Current 'latest' set to: {VERSIONS['latest']}", flush=True) print("Press Ctrl+C to stop.", flush=True) try: server.serve_forever() except KeyboardInterrupt: print("\nServer stopped.", flush=True) if __name__ == "__main__": main()