From f538ceb79371776afa386e9bc7648366f16b897c Mon Sep 17 00:00:00 2001 From: Patrikkk Date: Mon, 1 Jun 2020 15:24:02 +0200 Subject: [PATCH] Adding EmojiHandler to handle an exploit. Adding sendemoji permission and checks. I know, this is not something important, but I'm going through the new packets one by one and adding events developers can work with, patching exploits, and thought this could be a core permission. --- CHANGELOG.md | 3 ++- TShockAPI/DB/GroupManager.cs | 3 ++- TShockAPI/Handlers/EmojiHandler.cs | 31 ++++++++++++++++++++++++++++++ TShockAPI/Permissions.cs | 3 +++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 TShockAPI/Handlers/EmojiHandler.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 9860f9d5..67a650ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large. ## Upcoming Changes -* Add Emoji event to GetDataHandler. This packet is received when a player tries to display an emote. +* Add Emoji event to GetDataHandler. This packet is received when a player tries to display an emote. + * Adding EmojiHandler to handle an exploit. Adding `tshock.sendemoji` permission and checks. Added this permission to guest group by default. ## TShock 4.4.0 (Pre-release 10) * Fix all rope coils. (@Olink) diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index 584ad374..3cff37a1 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -65,7 +65,8 @@ namespace TShockAPI.DB Permissions.canpartychat, Permissions.cantalkinthird, Permissions.canchat, - Permissions.synclocalarea)); + Permissions.synclocalarea, + Permissions.sendemoji)); AddDefaultGroup("default", "guest", string.Join(",", diff --git a/TShockAPI/Handlers/EmojiHandler.cs b/TShockAPI/Handlers/EmojiHandler.cs new file mode 100644 index 00000000..39570d80 --- /dev/null +++ b/TShockAPI/Handlers/EmojiHandler.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TShockAPI.Handlers +{ + /// + /// Handles an exploit and checks for permissions. + /// + public class EmojiHandler + { + public void OnEmoji(object sender, GetDataHandlers.EmojiEventArgs args) + { + if (args.PlayerIndex != args.Player.Index) + { + TShock.Log.ConsoleError($"EmojiHandler: Packet is spoofing to be player ID {args.PlayerIndex}! - From [{args.Player.Index}]{args.Player.Name}"); + args.Handled = true; + return; + } + + if (!args.Player.HasPermission(Permissions.sendemoji)) + { + args.Player.SendErrorMessage("You have no permission to send emotes!"); + args.Handled = true; + return; + } + } + } +} diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index baf21a73..4b196380 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -468,6 +468,9 @@ namespace TShockAPI [Description("Player can resync themselves with server state.")] public static readonly string synclocalarea = "tshock.synclocalarea"; + + [Description("Player can send emotes.")] + public static readonly string sendemoji = "tshock.sendemoji"; #endregion /// /// Lists all commands associated with a given permission