fix(multiplayer): validate ranked season expiry

This commit is contained in:
Josh Creek
2026-09-01 22:33:00 +01:00
parent d819658ace
commit ec0bc362cd
3 changed files with 18 additions and 2 deletions
+14 -2
View File
@@ -39,13 +39,25 @@ func apply(payload: Dictionary) -> bool:
provisional = bool(payload["provisional"])
season_id = String(payload.get("season_id", ""))
season_ends_at_unix = 0
if payload.has("season_ends_at") and payload["season_ends_at"] is String and not String(payload["season_ends_at"]).is_empty():
season_ends_at_unix = maxi(0, int(Time.get_unix_time_from_datetime_string(String(payload["season_ends_at"]))))
if payload.has("season_ends_at"):
if not payload["season_ends_at"] is String or not is_valid_season_timestamp(String(payload["season_ends_at"])):
return _reject("Profile response contains invalid season expiry")
var parsed_season_end := Time.get_unix_time_from_datetime_string(String(payload["season_ends_at"]))
if parsed_season_end < 0:
return _reject("Profile response contains invalid season expiry")
season_ends_at_unix = int(parsed_season_end)
available = true
error_message = ""
return true
static func is_valid_season_timestamp(value: String) -> bool:
if value.is_empty():
return false
var timestamp_pattern := RegEx.create_from_string("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$")
return timestamp_pattern.search(value) != null
func set_error(reason: String) -> void:
available = false
error_message = reason