]> git.deb.at Git - rhonda/impostor.git/commitdiff
Ban characters not supported by Among Us text renderer (#78)
authorJakub Staroń <kubastaron@hotmail.com>
Sun, 25 Oct 2020 15:33:34 +0000 (16:33 +0100)
committerGitHub <noreply@github.com>
Sun, 25 Oct 2020 15:33:34 +0000 (16:33 +0100)
src/Impostor.Server/Config/DisconnectMessages.cs
src/Impostor.Server/Net/Manager/ClientManager.cs

index 6f2bf7096df5fa49ae02997c0b82c4e0a73811bc..a86735f8f1ae93b69a6a44e20357664fb7c26572 100644 (file)
@@ -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
index 828ca60ce9926dcc9fb54a9d93e691089d3cb18e..5fbe823c46fb59588c2edde0a15d9551f2dea9c9 100644 (file)
@@ -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;
             }