From: Jakub Staroń Date: Sun, 25 Oct 2020 15:33:34 +0000 (+0100) Subject: Ban characters not supported by Among Us text renderer (#78) X-Git-Tag: v1.2.2~83 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=61e33564d9d86b4c9eb93399b3e7e79ca69fad27;p=rhonda%2Fimpostor.git Ban characters not supported by Among Us text renderer (#78) --- 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; }