Prepare v0.6.7-alpha discovery release
This commit is contained in:
parent
ef30369865
commit
54937fad4b
7 changed files with 75 additions and 12 deletions
|
|
@ -184,6 +184,8 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
|
|||
payload = self._read_json_object()
|
||||
if payload is None:
|
||||
return
|
||||
if self._reject_incompatible_game_version(payload):
|
||||
return
|
||||
try:
|
||||
room, token, verification_token = self.server.registry.create(
|
||||
self._client_address(), payload
|
||||
|
|
@ -211,6 +213,8 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
|
|||
payload = self._read_json_object()
|
||||
if payload is None:
|
||||
return
|
||||
if self._reject_incompatible_game_version(payload):
|
||||
return
|
||||
try:
|
||||
room = self.server.registry.update(
|
||||
room_id,
|
||||
|
|
@ -300,6 +304,22 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
|
|||
except ValueError:
|
||||
return peer_text
|
||||
|
||||
def _reject_incompatible_game_version(self, payload: dict[str, Any]) -> bool:
|
||||
game_version = payload.get("game_version")
|
||||
if not isinstance(game_version, str) or game_version.strip() == __version__:
|
||||
return False
|
||||
self._send_error(
|
||||
HTTPStatus.CONFLICT,
|
||||
"game_version_mismatch",
|
||||
(
|
||||
f"This discovery server only lists NETfishing {__version__} rooms. "
|
||||
"Your room will not be listed until the game and discovery server "
|
||||
"use the same version."
|
||||
),
|
||||
{"required_game_version": __version__},
|
||||
)
|
||||
return True
|
||||
|
||||
def _room_id_from_path(self) -> str | None:
|
||||
path = urlsplit(self.path).path
|
||||
prefix = "/v1/rooms/"
|
||||
|
|
@ -341,8 +361,17 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
|
|||
raise ValueError
|
||||
return values[0]
|
||||
|
||||
def _send_error(self, status: HTTPStatus, code: str, message: str) -> None:
|
||||
self._send_json(status, {"error": {"code": code, "message": message}})
|
||||
def _send_error(
|
||||
self,
|
||||
status: HTTPStatus,
|
||||
code: str,
|
||||
message: str,
|
||||
details: dict[str, Any] | None = None,
|
||||
) -> None:
|
||||
error: dict[str, Any] = {"code": code, "message": message}
|
||||
if details is not None:
|
||||
error.update(details)
|
||||
self._send_json(status, {"error": error})
|
||||
|
||||
def _send_json(self, status: HTTPStatus, payload: dict[str, Any]) -> None:
|
||||
body = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue