mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-04-19 19:14:51 +00:00
Fix missing filtering, filter inconsistencies, and filter logging (#1082)
* Fix missing filtering, filter inconsistencies, and filter logging * Remove unused import and replace removed logger * Make filter log arguments optional * Update ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs Co-authored-by: sudokoko <sudo@koko.rip> * Update ProjectLighthouse.Servers.Website/Pages/Debug/FilterTestPage.cshtml.cs Co-authored-by: sudokoko <sudo@koko.rip> * Replace filter location strings with enum * Rename enum to FilterLocation for readability --------- Co-authored-by: sudokoko <sudo@koko.rip>
This commit is contained in:
parent
a3022ff5b4
commit
f059b20489
13 changed files with 59 additions and 38 deletions
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RiderProjectSettingsUpdater">
|
||||
<option name="vcsConfiguration" value="2" />
|
||||
<option name="singleClickDiffPreview" value="1" />
|
||||
<option name="vcsConfiguration" value="3" />
|
||||
</component>
|
||||
</project>
|
|
@ -3,12 +3,10 @@ using LBPUnion.ProjectLighthouse.Configuration;
|
|||
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 class CommentController : ControllerBase
|
|||
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();
|
||||
|
|
|
@ -10,6 +10,7 @@ using LBPUnion.ProjectLighthouse.Serialization;
|
|||
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 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.";
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ using LBPUnion.ProjectLighthouse.Types.Entities.Level;
|
|||
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 @@ public class PublishController : ControllerBase
|
|||
// 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 @@ public class PublishController : ControllerBase
|
|||
return this.BadRequest();
|
||||
}
|
||||
|
||||
slot.Description = CensorHelper.FilterMessage(slot.Description);
|
||||
slot.Description = CensorHelper.FilterMessage(slot.Description, FilterLocation.SlotDescription, user.Username);
|
||||
|
||||
if (slot.Description.Length > 512)
|
||||
{
|
||||
|
|
|
@ -99,7 +99,9 @@ public class ReviewController : ControllerBase
|
|||
GameReview? newReview = await this.DeserializeBody<GameReview>();
|
||||
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();
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ using LBPUnion.ProjectLighthouse.Configuration;
|
|||
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.Profile;
|
|||
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 class UserController : ControllerBase
|
|||
|
||||
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;
|
||||
|
|
|
@ -6,6 +6,7 @@ using LBPUnion.ProjectLighthouse.Logging;
|
|||
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 class SlotPageController : ControllerBase
|
|||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -5,6 +5,7 @@ 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.Logging;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
@ -49,11 +50,7 @@ public class UserPageController : ControllerBase
|
|||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -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 class FilterTestPage : BaseLayout
|
|||
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();
|
||||
|
|
|
@ -5,6 +5,7 @@ using LBPUnion.ProjectLighthouse.Files;
|
|||
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 class SlotSettingsPage : BaseLayout
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ using LBPUnion.ProjectLighthouse.Helpers;
|
|||
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 @@ public class UserSettingsPage : BaseLayout
|
|||
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 &&
|
||||
|
|
|
@ -2,6 +2,9 @@ using System;
|
|||
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 class CensorHelper
|
|||
}
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
13
ProjectLighthouse/Types/Filter/FilterLocation.cs
Normal file
13
ProjectLighthouse/Types/Filter/FilterLocation.cs
Normal file
|
@ -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,
|
||||
}
|
Loading…
Add table
Reference in a new issue