mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Minimal deterministic Agones HTTP surface for the allocated Compose smoke."""
|
|
import json
|
|
import os
|
|
import ssl
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
if "/gameservers" not in self.path:
|
|
self.send_error(404)
|
|
return
|
|
body = {"items": [{"metadata": {"name": "allocator-ready-1", "labels": {
|
|
"cosmic-clash.io/region": "EU", "cosmic-clash.io/build": "build-1",
|
|
"cosmic-clash.io/protocol": "1", "cosmic-clash.io/transport": "enet"
|
|
}}, "status": {"state": "Ready"}}]}
|
|
self._json(body)
|
|
|
|
def do_POST(self):
|
|
if "/gameserverallocations" not in self.path:
|
|
self.send_error(404)
|
|
return
|
|
length = int(self.headers.get("Content-Length", "0"))
|
|
request = json.loads(self.rfile.read(length))
|
|
selectors = request.get("spec", {}).get("selectors", [])
|
|
labels = selectors[0].get("matchLabels", {}) if selectors else {}
|
|
if labels.get("cosmic-clash.io/region") != "EU" or labels.get("cosmic-clash.io/transport") != "enet":
|
|
self.send_error(422, "incompatible selector")
|
|
return
|
|
self._json({"status": {"state": "Allocated", "gameServerName": "allocator-ready-1",
|
|
"address": "127.0.0.1", "ports": [{"name": "default", "port": 31001}]}})
|
|
|
|
def _json(self, body):
|
|
encoded = json.dumps(body).encode()
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "application/json")
|
|
self.send_header("Content-Length", str(len(encoded)))
|
|
self.end_headers()
|
|
self.wfile.write(encoded)
|
|
|
|
def log_message(self, *_args):
|
|
return
|
|
|
|
|
|
server = HTTPServer(("0.0.0.0", 8443), Handler)
|
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
|
context.load_cert_chain(os.environ["FAKE_AGONES_TLS_CERT"], os.environ["FAKE_AGONES_TLS_KEY"])
|
|
server.socket = context.wrap_socket(server.socket, server_side=True)
|
|
server.serve_forever()
|