From 61e33564d9d86b4c9eb93399b3e7e79ca69fad27 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jakub=20Staro=C5=84?= Date: Sun, 25 Oct 2020 16:33:34 +0100 Subject: [PATCH] Ban characters not supported by Among Us text renderer (#78) --- .../Config/DisconnectMessages.cs | 2 ++ .../Net/Manager/ClientManager.cs | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Impostor.Server/Config/DisconnectMessages.cs b/src/Impostor.Server/Config/DisconnectMessages.cs index 6f2bf70..a86735f 100644 --- a/src/Impostor.Server/Config/DisconnectMessages.cs +++ b/src/Impostor.Server/Config/DisconnectMessages.cs @@ -13,5 +13,7 @@ "running in server redirection mode."; public const string UsernameLength = "Your username is too long, please make it shorter."; + + public const string UsernameIllegalCharacters = "Your username contains illegal characters, please remove them."; } } \ No newline at end of file diff --git a/src/Impostor.Server/Net/Manager/ClientManager.cs b/src/Impostor.Server/Net/Manager/ClientManager.cs index 828ca60..5fbe823 100644 --- a/src/Impostor.Server/Net/Manager/ClientManager.cs +++ b/src/Impostor.Server/Net/Manager/ClientManager.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Impostor.Api.Innersloth; @@ -54,8 +55,21 @@ namespace Impostor.Server.Net.Manager return clientId; } + private static bool IsCharAllowed(char i) + { + return i == ' ' || (i >= 'A' && i <= 'Z') || (i >= 'a' && i <= 'z') || (i >= '0' && i <= '9') || (i >= 'À' && i <= 'ÿ') || (i >= 'Ѐ' && i <= 'џ') || (i >= 'ㄱ' && i <= 'ㆎ') || (i >= '가' && i <= '힣'); + } + public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion) { + if (!SupportedVersions.Contains(clientVersion)) + { + using var packet = MessageWriter.Get(MessageType.Reliable); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.IncorrectVersion); + await connection.SendAsync(packet); + return; + } + if (name.Length > 10) { using var packet = MessageWriter.Get(MessageType.Reliable); @@ -64,10 +78,10 @@ namespace Impostor.Server.Net.Manager return; } - if (!SupportedVersions.Contains(clientVersion)) + if (string.IsNullOrWhiteSpace(name) || !name.All(IsCharAllowed)) { using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.IncorrectVersion); + Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameIllegalCharacters); await connection.SendAsync(packet); return; } -- 2.39.5