diff --git a/.idea/.idea.ProjectLighthouse/.idea/projectSettingsUpdater.xml b/.idea/.idea.ProjectLighthouse/.idea/projectSettingsUpdater.xml
index 4bb9f4d2a..64af657f5 100644
--- a/.idea/.idea.ProjectLighthouse/.idea/projectSettingsUpdater.xml
+++ b/.idea/.idea.ProjectLighthouse/.idea/projectSettingsUpdater.xml
@@ -1,6 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/CommentController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/CommentController.cs
index a906b170b..7e3baeb9e 100644
--- a/ProjectLighthouse.Servers.GameServer/Controllers/CommentController.cs
+++ b/ProjectLighthouse.Servers.GameServer/Controllers/CommentController.cs
@@ -3,12 +3,10 @@
using LBPUnion.ProjectLighthouse.Database;
using LBPUnion.ProjectLighthouse.Extensions;
using LBPUnion.ProjectLighthouse.Helpers;
-using LBPUnion.ProjectLighthouse.Logging;
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Levels;
-using LBPUnion.ProjectLighthouse.Types.Logging;
using LBPUnion.ProjectLighthouse.Types.Serialization;
using LBPUnion.ProjectLighthouse.Types.Users;
using Microsoft.AspNetCore.Authorization;
@@ -144,11 +142,7 @@ public async Task PostComment(string? username, string? slotType,
targetId = await this.database.UserIdFromUsername(username!);
}
- string filteredText = CensorHelper.FilterMessage(comment.Message);
-
- if (ServerConfiguration.Instance.LogChatFiltering && filteredText != comment.Message)
- Logger.Info($"Censored profane word(s) from in-game comment sent by {username}: \"{comment.Message}\" => \"{filteredText}\"",
- LogArea.Filter);
+ string filteredText = CensorHelper.FilterMessage(comment.Message, FilterLocation.ChatMessage, username);
bool success = await this.database.PostComment(token.UserId, targetId, type, filteredText);
if (success) return this.Ok();
diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs
index 26ae10acf..42b1d1b7b 100644
--- a/ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs
+++ b/ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs
@@ -10,6 +10,7 @@
using LBPUnion.ProjectLighthouse.Types.Entities.Notifications;
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Logging;
using LBPUnion.ProjectLighthouse.Types.Mail;
using LBPUnion.ProjectLighthouse.Types.Serialization;
@@ -143,15 +144,10 @@ public async Task Filter(IMailService mailService)
string username = await this.database.UsernameFromGameToken(token);
- string filteredText = CensorHelper.FilterMessage(message);
-
if (ServerConfiguration.Instance.LogChatMessages) Logger.Info($"{username}: \"{message}\"", LogArea.Filter);
- if (ServerConfiguration.Instance.LogChatFiltering && filteredText != message)
- Logger.Info(
- $"Censored profane word(s) from in-game text sent by {username}: \"{message}\" => \"{filteredText}\"",
- LogArea.Filter);
+ message = CensorHelper.FilterMessage(message, FilterLocation.ChatMessage, username);
- return this.Ok(filteredText);
+ return this.Ok(message);
}
}
\ No newline at end of file
diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/PublishController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/PublishController.cs
index 7bedc01dc..dfb42c710 100644
--- a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/PublishController.cs
+++ b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/PublishController.cs
@@ -10,6 +10,7 @@
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
using LBPUnion.ProjectLighthouse.Types.Logging;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Resources;
using LBPUnion.ProjectLighthouse.Types.Serialization;
using LBPUnion.ProjectLighthouse.Types.Users;
@@ -142,7 +143,7 @@ await this.database.SendNotification(user.UserId,
// Yes Rider, this isn't null
Debug.Assert(slot.Resources != null, "slot.ResourceList != null");
- slot.Name = CensorHelper.FilterMessage(slot.Name);
+ slot.Name = CensorHelper.FilterMessage(slot.Name, FilterLocation.SlotName, user.Username);
if (slot.Name.Length > 64)
{
@@ -153,7 +154,7 @@ await this.database.SendNotification(user.UserId,
return this.BadRequest();
}
- slot.Description = CensorHelper.FilterMessage(slot.Description);
+ slot.Description = CensorHelper.FilterMessage(slot.Description, FilterLocation.SlotDescription, user.Username);
if (slot.Description.Length > 512)
{
diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/ReviewController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/ReviewController.cs
index 0dd54c078..3b2a7fbbf 100644
--- a/ProjectLighthouse.Servers.GameServer/Controllers/Slots/ReviewController.cs
+++ b/ProjectLighthouse.Servers.GameServer/Controllers/Slots/ReviewController.cs
@@ -99,7 +99,9 @@ public async Task PostReview(int slotId)
GameReview? newReview = await this.DeserializeBody();
if (newReview == null) return this.BadRequest();
- newReview.Text = CensorHelper.FilterMessage(newReview.Text);
+ // Temporary fix until this can be refactored to use a UserEntity properly
+ string username = await this.database.UsernameFromGameToken(token);
+ newReview.Text = CensorHelper.FilterMessage(newReview.Text, FilterLocation.SlotReview, username);
if (newReview.Text.Length > 512) return this.BadRequest();
diff --git a/ProjectLighthouse.Servers.GameServer/Controllers/UserController.cs b/ProjectLighthouse.Servers.GameServer/Controllers/UserController.cs
index 7019cdd76..7301bc52c 100644
--- a/ProjectLighthouse.Servers.GameServer/Controllers/UserController.cs
+++ b/ProjectLighthouse.Servers.GameServer/Controllers/UserController.cs
@@ -3,6 +3,7 @@
using LBPUnion.ProjectLighthouse.Database;
using LBPUnion.ProjectLighthouse.Extensions;
using LBPUnion.ProjectLighthouse.Files;
+using LBPUnion.ProjectLighthouse.Helpers;
using LBPUnion.ProjectLighthouse.Logging;
using LBPUnion.ProjectLighthouse.Servers.GameServer.Helpers;
using LBPUnion.ProjectLighthouse.Servers.GameServer.Types.Users;
@@ -11,6 +12,7 @@
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
using LBPUnion.ProjectLighthouse.Types.Levels;
using LBPUnion.ProjectLighthouse.Types.Logging;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Serialization;
using LBPUnion.ProjectLighthouse.Types.Users;
using Microsoft.AspNetCore.Authorization;
@@ -79,7 +81,9 @@ public async Task UpdateUser()
if (update.Biography.Length > 512) return this.BadRequest();
- user.Biography = update.Biography;
+ string filteredBio = CensorHelper.FilterMessage(update.Biography, FilterLocation.UserBiography, user.Username);
+
+ user.Biography = filteredBio;
}
if (update.Location != null) user.Location = update.Location;
diff --git a/ProjectLighthouse.Servers.Website/Controllers/SlotPageController.cs b/ProjectLighthouse.Servers.Website/Controllers/SlotPageController.cs
index 7f22b0b6b..1b4381c1a 100644
--- a/ProjectLighthouse.Servers.Website/Controllers/SlotPageController.cs
+++ b/ProjectLighthouse.Servers.Website/Controllers/SlotPageController.cs
@@ -6,6 +6,7 @@
using LBPUnion.ProjectLighthouse.Types.Entities.Level;
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Logging;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@@ -73,11 +74,7 @@ public async Task PostComment([FromRoute] int id, [FromForm] stri
}
string username = await this.database.UsernameFromWebToken(token);
- string filteredText = CensorHelper.FilterMessage(msg);
-
- if (ServerConfiguration.Instance.LogChatFiltering && filteredText != msg)
- Logger.Info($"Censored profane word(s) from slot comment sent by {username}: \"{msg}\" => \"{filteredText}\"",
- LogArea.Filter);
+ string filteredText = CensorHelper.FilterMessage(msg, FilterLocation.SlotReview, username);
bool success = await this.database.PostComment(token.UserId, id, CommentType.Level, filteredText);
if (success)
diff --git a/ProjectLighthouse.Servers.Website/Controllers/UserPageController.cs b/ProjectLighthouse.Servers.Website/Controllers/UserPageController.cs
index afd23458d..9c1883529 100644
--- a/ProjectLighthouse.Servers.Website/Controllers/UserPageController.cs
+++ b/ProjectLighthouse.Servers.Website/Controllers/UserPageController.cs
@@ -5,6 +5,7 @@
using LBPUnion.ProjectLighthouse.Logging;
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
using LBPUnion.ProjectLighthouse.Types.Entities.Token;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Types.Logging;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@@ -49,11 +50,7 @@ public async Task PostComment([FromRoute] int id, [FromForm] stri
}
string username = await this.database.UsernameFromWebToken(token);
- string filteredText = CensorHelper.FilterMessage(msg);
-
- if (ServerConfiguration.Instance.LogChatFiltering && filteredText != msg)
- Logger.Info($"Censored profane word(s) from user comment sent by {username}: \"{msg}\" => \"{filteredText}\"",
- LogArea.Filter);
+ string filteredText = CensorHelper.FilterMessage(msg, FilterLocation.UserComment, username);
bool success = await this.database.PostComment(token.UserId, id, CommentType.Profile, filteredText);
if (success)
diff --git a/ProjectLighthouse.Servers.Website/Pages/Debug/FilterTestPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/Debug/FilterTestPage.cshtml.cs
index fe61d7e87..e8e613ec0 100644
--- a/ProjectLighthouse.Servers.Website/Pages/Debug/FilterTestPage.cshtml.cs
+++ b/ProjectLighthouse.Servers.Website/Pages/Debug/FilterTestPage.cshtml.cs
@@ -3,6 +3,7 @@
using LBPUnion.ProjectLighthouse.Helpers;
#endif
using LBPUnion.ProjectLighthouse.Database;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
using Microsoft.AspNetCore.Mvc;
@@ -19,7 +20,7 @@ public FilterTestPage(DatabaseContext database) : base(database)
public IActionResult OnGet(string? text = null)
{
#if DEBUG
- if (text != null) this.FilteredText = CensorHelper.FilterMessage(text);
+ if (text != null) this.FilteredText = CensorHelper.FilterMessage(text, FilterLocation.Test);
this.Text = text;
return this.Page();
diff --git a/ProjectLighthouse.Servers.Website/Pages/SlotSettingsPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/SlotSettingsPage.cshtml.cs
index b461d9825..2c44a87cb 100644
--- a/ProjectLighthouse.Servers.Website/Pages/SlotSettingsPage.cshtml.cs
+++ b/ProjectLighthouse.Servers.Website/Pages/SlotSettingsPage.cshtml.cs
@@ -5,6 +5,7 @@
using LBPUnion.ProjectLighthouse.Helpers;
using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
using LBPUnion.ProjectLighthouse.Types.Entities.Level;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@@ -36,15 +37,15 @@ public async Task OnPost([FromRoute] int slotId, [FromForm] strin
if (name != null)
{
- name = CensorHelper.FilterMessage(name);
- if (this.Slot.Name != name && name.Length <= 64)
+ name = CensorHelper.FilterMessage(name, FilterLocation.SlotName, this.User.Username);
+ if (this.Slot.Name != name && name.Length <= 64)
this.Slot.Name = name;
}
if (description != null)
{
- description = CensorHelper.FilterMessage(description);
- if (this.Slot.Description != description && description?.Length <= 512)
+ description = CensorHelper.FilterMessage(description, FilterLocation.SlotDescription, this.User.Username);
+ if (this.Slot.Description != description && description.Length <= 512)
this.Slot.Description = description;
}
diff --git a/ProjectLighthouse.Servers.Website/Pages/UserSettingsPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/UserSettingsPage.cshtml.cs
index 85b0c242f..55375a425 100644
--- a/ProjectLighthouse.Servers.Website/Pages/UserSettingsPage.cshtml.cs
+++ b/ProjectLighthouse.Servers.Website/Pages/UserSettingsPage.cshtml.cs
@@ -7,6 +7,7 @@
using LBPUnion.ProjectLighthouse.Localization;
using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts;
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
+using LBPUnion.ProjectLighthouse.Types.Filter;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@@ -55,9 +56,12 @@ [FromForm] string? language
if (ServerConfiguration.Instance.UserGeneratedContentLimits.ReadOnlyMode)
return this.Redirect($"~/user/{userId}");
- biography = CensorHelper.FilterMessage(biography);
if (this.ProfileUser.Biography != biography && biography.Length <= 512)
- this.ProfileUser.Biography = biography;
+ {
+ string filteredBio = CensorHelper.FilterMessage(biography, FilterLocation.UserBiography, this.ProfileUser.Username);
+
+ this.ProfileUser.Biography = filteredBio;
+ }
}
if (ServerConfiguration.Instance.Mail.MailEnabled &&
diff --git a/ProjectLighthouse/Helpers/CensorHelper.cs b/ProjectLighthouse/Helpers/CensorHelper.cs
index e5ff79539..494d3ce06 100644
--- a/ProjectLighthouse/Helpers/CensorHelper.cs
+++ b/ProjectLighthouse/Helpers/CensorHelper.cs
@@ -2,6 +2,9 @@
using System.Collections.Generic;
using System.Text;
using LBPUnion.ProjectLighthouse.Configuration;
+using LBPUnion.ProjectLighthouse.Logging;
+using LBPUnion.ProjectLighthouse.Types.Filter;
+using LBPUnion.ProjectLighthouse.Types.Logging;
namespace LBPUnion.ProjectLighthouse.Helpers;
@@ -17,7 +20,7 @@ public static class CensorHelper
"UwU", "OwO", "uwu", "owo", "o3o", ">.>", "*pounces on you*", "*boops*", "*baps*", ":P", "x3", "O_O", "xD", ":3", ";3", "^w^",
};
- public static string FilterMessage(string message)
+ public static string FilterMessage(string message, FilterLocation filterLocation = FilterLocation.None, string username = null)
{
if (CensorConfiguration.Instance.UserInputFilterMode == FilterMode.None) return message;
StringBuilder stringBuilder = new(message);
@@ -44,7 +47,14 @@ public static string FilterMessage(string message)
}
}
- return stringBuilder.ToString();
+ string filteredMessage = stringBuilder.ToString();
+
+ if (ServerConfiguration.Instance.LogChatFiltering && filteredMessage != message)
+ Logger.Info(
+ $"Comment sent {(username != null ? $"by {username} " : "")}" + $"from {filterLocation}" +
+ $"\"{message}\" => \"{filteredMessage}\"", LogArea.Filter);
+
+ return filteredMessage;
}
private static void Censor(int profanityIndex, int profanityLength, StringBuilder message)
diff --git a/ProjectLighthouse/Types/Filter/FilterLocation.cs b/ProjectLighthouse/Types/Filter/FilterLocation.cs
new file mode 100644
index 000000000..5f439872b
--- /dev/null
+++ b/ProjectLighthouse/Types/Filter/FilterLocation.cs
@@ -0,0 +1,13 @@
+namespace LBPUnion.ProjectLighthouse.Types.Filter;
+
+public enum FilterLocation
+{
+ SlotName = 0,
+ SlotDescription = 1,
+ SlotReview = 2,
+ UserBiography = 3,
+ UserComment = 4,
+ ChatMessage = 5,
+ Test = 6,
+ None = 7,
+}
\ No newline at end of file