chwellofficial/nt360Slides
0
1"""2Presenton Version Server (test/dev stub)3 4This simulates the remote version-check endpoint that the Electron app polls.5In production, replace UPDATE_SERVER_URL in the Electron app with your hosted URL.6 7Usage:8 python test_server.py [--port 8765]9 10Endpoint:11 GET /versions -> JSON with latest version and download info12"""13 14import json15import argparse16from http.server import BaseHTTPRequestHandler, HTTPServer17from urllib.parse import urlparse18 19VERSIONS = {20 "latest": "0.7.0",21 "versions": [22 "0.5.0",23 "0.6.0",24 "0.6.1-beta",25 "0.7.0",26 ],27 "download_url": "https://github.com/presenton/presenton/releases/latest",28 "release_notes": "Bug fixes, performance improvements, and new AI model support.",29}30 31 32class VersionHandler(BaseHTTPRequestHandler):33 def do_GET(self):34 parsed = urlparse(self.path)35 36 if parsed.path == "/versions":37 body = json.dumps(VERSIONS, indent=2).encode()38 self.send_response(200)39 self.send_header("Content-Type", "application/json")40 self.send_header("Content-Length", str(len(body)))41 self.send_header("Access-Control-Allow-Origin", "*")42 self.end_headers()43 self.wfile.write(body)44 else:45 self.send_response(404)46 self.end_headers()47 self.wfile.write(b'{"error": "Not found"}')48 49 def do_OPTIONS(self):50 self.send_response(200)51 self.send_header("Access-Control-Allow-Origin", "*")52 self.send_header("Access-Control-Allow-Methods", "GET, OPTIONS")53 self.end_headers()54 55 def log_message(self, format, *args):56 print(f"[VersionServer] {self.address_string()} - {format % args}", flush=True)57 58 59def main():60 parser = argparse.ArgumentParser(description="Presenton version check server")61 parser.add_argument("--port", type=int, default=8765, help="Port to listen on")62 parser.add_argument("--host", type=str, default="0.0.0.0", help="Host to bind to")63 args = parser.parse_args()64 65 server = HTTPServer((args.host, args.port), VersionHandler)66 print(f"Presenton version server running at http://{args.host}:{args.port}", flush=True)67 print(f" GET /versions -> version information", flush=True)68 print(f" Current 'latest' set to: {VERSIONS['latest']}", flush=True)69 print("Press Ctrl+C to stop.", flush=True)70 71 try:72 server.serve_forever()73 except KeyboardInterrupt:74 print("\nServer stopped.", flush=True)75 76 77if __name__ == "__main__":78 main()79 