Core/Chat: Disallow hyperlinks from being inserted in various guild-related freetext fields (the client already blocks this)

Port From (https://github.com/TrinityCore/TrinityCore/commit/ee5c0e5372308f4a6e52b14a14f5ee6a683b58dc)
This commit is contained in:
hondacrx
2022-01-20 16:56:00 -05:00
parent 13386aab0f
commit 169abc1531
2 changed files with 55 additions and 0 deletions
+42
View File
@@ -136,6 +136,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildUpdateMotdText)]
void HandleGuildUpdateMotdText(GuildUpdateMotdText packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.MotdText))
return;
if (packet.MotdText.Length > 255)
return;
Guild guild = GetPlayer().GetGuild();
if (guild)
guild.HandleSetMOTD(this, packet.MotdText);
@@ -144,6 +150,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildSetMemberNote)]
void HandleGuildSetMemberNote(GuildSetMemberNote packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.Note))
return;
if (packet.Note.Length > 31)
return;
Guild guild = GetPlayer().GetGuild();
if (guild)
guild.HandleSetMemberNote(this, packet.Note, packet.NoteeGUID, packet.IsPublic);
@@ -161,6 +173,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildAddRank)]
void HandleGuildAddRank(GuildAddRank packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.Name))
return;
if (packet.Name.Length > 15)
return;
Guild guild = GetPlayer().GetGuild();
if (guild)
guild.HandleAddNewRank(this, packet.Name);
@@ -177,6 +195,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildUpdateInfoText)]
void HandleGuildUpdateInfoText(GuildUpdateInfoText packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.InfoText))
return;
if (packet.InfoText.Length > 500)
return;
Guild guild = GetPlayer().GetGuild();
if (guild)
guild.HandleSetInfo(this, packet.InfoText);
@@ -491,6 +515,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildBankUpdateTab)]
void HandleGuildBankUpdateTab(GuildBankUpdateTab packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.Name))
return;
if ((packet.Name.Length > 15) || (packet.Icon.Length > 127))
return;
if (!string.IsNullOrEmpty(packet.Name) && !string.IsNullOrEmpty(packet.Icon))
{
if (GetPlayer().GetGameObjectIfCanInteractWith(packet.Banker, GameObjectTypes.GuildBank))
@@ -521,6 +551,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildBankSetTabText)]
void HandleGuildBankSetTabText(GuildBankSetTabText packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.TabText))
return;
if (packet.TabText.Length > 500)
return;
Guild guild = GetPlayer().GetGuild();
if (guild)
guild.SetBankTabText((byte)packet.Tab, packet.TabText);
@@ -529,6 +565,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.GuildSetRankPermissions)]
void HandleGuildSetRankPermissions(GuildSetRankPermissions packet)
{
if (!DisallowHyperlinksAndMaybeKick(packet.RankName))
return;
if (packet.RankName.Length > 15)
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
+13
View File
@@ -588,6 +588,19 @@ namespace Game
return m_muteTime <= GameTime.GetGameTime();
}
public bool DisallowHyperlinksAndMaybeKick(string str)
{
if (!str.Contains('|'))
return true;
Log.outError(LogFilter.Network, $"Player {GetPlayer().GetName()} ({GetPlayer().GetGUID()}) sent a message which illegally contained a hyperlink:\n{str}");
if (WorldConfig.GetIntValue(WorldCfg.ChatStrictLinkCheckingKick) != 0)
KickPlayer();
return false;
}
public void SendNotification(CypherStrings str, params object[] args)
{
SendNotification(Global.ObjectMgr.GetCypherString(str), args);