Skip to content

Commit 40a4d5e

Browse files
committed
Fix Koko suggestions
1 parent 3fb1441 commit 40a4d5e

File tree

10 files changed

+40
-42
lines changed

10 files changed

+40
-42
lines changed

ProjectLighthouse.Servers.GameServer/Controllers/CommentController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ from blockedProfile in this.database.BlockedProfiles
9797
.ApplyPagination(pageData)
9898
.ToListAsync()).ToSerializableList(c => GameComment.CreateFromEntity(c, token.UserId));
9999

100-
if (type == CommentType.Level && slotType == "developer" && user.IsModerator && pageData.PageStart == 1) {
100+
if (type == CommentType.Level && slotType == "developer" && user.IsModerator && pageData.PageStart == 1)
101+
{
101102
comments.Insert(0, new GameComment
102103
{
103104
CommentId = 0,

ProjectLighthouse.Servers.GameServer/Controllers/MessageController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public async Task<IActionResult> Announce()
5656
GameTokenEntity token = this.GetToken();
5757

5858
UserEntity? user = await this.database.UserFromGameToken(token);
59+
if (user == null) return this.BadRequest();
5960

6061
StringBuilder announceText = new(ServerConfiguration.Instance.AnnounceText);
6162

@@ -67,7 +68,7 @@ public async Task<IActionResult> Announce()
6768
announceText.Append(BaseLayoutStrings.ReadOnlyWarn.Translate(LocalizationManager.DefaultLang) + "\n\n");
6869
}
6970

70-
if (EmailEnforcementConfiguration.Instance.EnableEmailEnforcement)
71+
if (ServerConfiguration.Instance.EmailEnforcement.EnableEmailEnforcement)
7172
{
7273
announceText.Append("\n\n" + BaseLayoutStrings.EmailEnforcementWarnMain.Translate(LocalizationManager.DefaultLang) + "\n\n");
7374

ProjectLighthouse.Servers.GameServer/Controllers/Resources/PhotosController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public async Task<IActionResult> UserPhotosBy(string user)
216216

217217
[HttpGet("photos/with")]
218218
public async Task<IActionResult> UserPhotosWith(string user)
219-
{
219+
{
220220
int targetUserId = await this.database.UserIdFromUsername(user);
221221
if (targetUserId == 0) return this.NotFound();
222222

ProjectLighthouse.Servers.GameServer/Controllers/Resources/ResourcesController.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ public async Task<IActionResult> FilterResources()
3535
}
3636

3737
[HttpGet("r/{hash}")]
38-
public async Task<IActionResult> GetResource(string hash)
38+
public Task<IActionResult> GetResource(string hash)
3939
{
4040
string path = FileHelper.GetResourcePath(hash);
4141

4242
string fullPath = Path.GetFullPath(path);
4343

4444
// Prevent directory traversal attacks
45-
if (!fullPath.StartsWith(FileHelper.FullResourcePath)) return this.BadRequest();
45+
if (!fullPath.StartsWith(FileHelper.FullResourcePath)) return Task.FromResult<IActionResult>(this.BadRequest());
4646

47-
if (FileHelper.ResourceExists(hash)) return this.File(IOFile.OpenRead(path), "application/octet-stream");
47+
if (FileHelper.ResourceExists(hash)) return Task.FromResult<IActionResult>(this.File(IOFile.OpenRead(path), "application/octet-stream"));
4848

49-
return this.NotFound();
49+
return Task.FromResult<IActionResult>(this.NotFound());
5050
}
5151

5252
[HttpPost("upload/{hash}/unattributed")]

ProjectLighthouse.Servers.GameServer/Controllers/UserController.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ public class UserController : ControllerBase
2929
{
3030
private readonly DatabaseContext database;
3131

32-
private static readonly bool emailEnforcementEnabled = EmailEnforcementConfiguration.Instance.EnableEmailEnforcement;
33-
3432
public UserController(DatabaseContext database)
3533
{
3634
this.database = database;

ProjectLighthouse.Servers.GameServer/Middlewares/EmailEnforcementMiddleware.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ namespace LBPUnion.ProjectLighthouse.Servers.GameServer.Middlewares;
88

99
public class EmailEnforcementMiddleware : MiddlewareDBContext
1010
{
11-
private static readonly HashSet<string> enforcedPaths = EmailEnforcementConfiguration.Instance.BlockedEndpoints;
11+
private static readonly HashSet<string> enforcedPaths = ServerConfiguration.Instance.EmailEnforcement.BlockedEndpoints;
1212

1313
public EmailEnforcementMiddleware(RequestDelegate next) : base(next)
1414
{ }
1515

1616
public override async Task InvokeAsync(HttpContext context, DatabaseContext database)
1717
{
18-
if (EmailEnforcementConfiguration.Instance.EnableEmailEnforcement)
18+
if (ServerConfiguration.Instance.EmailEnforcement.EnableEmailEnforcement)
1919
{
2020
// Split path into segments
2121
string[] pathSegments = context.Request.Path.ToString().Split("/", StringSplitOptions.RemoveEmptyEntries);

ProjectLighthouse.Servers.Website/Pages/UserSettingsPage.cshtml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ [FromForm] string? language
6464
}
6565
}
6666

67-
if (ServerConfiguration.Instance.Mail.MailEnabled &&
68-
SMTPHelper.IsValidEmail(this.Database, email) &&
67+
if (ServerConfiguration.Instance.Mail.MailEnabled &&
68+
email != null && SMTPHelper.IsValidEmail(this.Database, email) &&
6969
(this.User == this.ProfileUser || this.User.IsAdmin))
7070
{
7171
if (this.ProfileUser.EmailAddress != email)

ProjectLighthouse/Configuration/EmailEnforcementConfiguration.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#nullable enable
22
using System.Collections.Generic;
3-
using System.IO;
43
using YamlDotNet.Serialization;
54

65
namespace LBPUnion.ProjectLighthouse.Configuration;
@@ -13,15 +12,15 @@ public class EmailEnforcementConfiguration : ConfigurationBase<EmailEnforcementC
1312

1413
public override bool NeedsConfiguration { get; set; } = false;
1514

16-
public bool EnableEmailEnforcement { get; set; } = false;
17-
public bool EnableEmailBlacklist { get; set; } = false;
15+
public bool EnableEmailEnforcement => false;
16+
public bool EnableEmailBlacklist => false;
1817

1918
// No blacklist by default, add path to blacklist
20-
public string BlacklistFilePath { get; set; } = "";
19+
public string BlacklistFilePath => "";
2120

2221
// Endpoints to be blocked
2322
// This is kind of a random list so some may need to be added or removed
24-
public HashSet<string> BlockedEndpoints { get; set; } = new()
23+
public HashSet<string> BlockedEndpoints => new()
2524
{
2625
// Comments
2726
"rateUserComment",

ProjectLighthouse/Configuration/ServerConfiguration.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class ServerConfiguration : ConfigurationBase<ServerConfiguration>
1111
// This is so Lighthouse can properly identify outdated configurations and update them with newer settings accordingly.
1212
// If you are modifying anything here, this value MUST be incremented.
1313
// Thanks for listening~
14-
public override int ConfigVersion { get; set; } = 27;
14+
public override int ConfigVersion { get; set; } = 28;
1515

1616
public override string ConfigName { get; set; } = "lighthouse.yml";
1717
public string WebsiteListenUrl { get; set; } = "http://localhost:10060";
@@ -46,5 +46,7 @@ public class ServerConfiguration : ConfigurationBase<ServerConfiguration>
4646
public RichPresenceConfiguration RichPresenceConfiguration { get; set; } = new();
4747
public NotificationConfiguration NotificationConfiguration { get; set; } = new();
4848

49+
public EmailEnforcementConfiguration EmailEnforcement { get; set; } = new();
50+
4951
public override ConfigurationBase<ServerConfiguration> Deserialize(IDeserializer deserializer, string text) => deserializer.Deserialize<ServerConfiguration>(text);
5052
}

ProjectLighthouse/Helpers/EmailHelper.cs

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System.IO;
77
using System.Linq;
88
using System.Threading.Tasks;
9-
using LBPUnion.ProjectLighthouse.Configuration;
9+
using LBPUnion.ProjectLighthouse.Configuration;
1010
using LBPUnion.ProjectLighthouse.Database;
1111
using LBPUnion.ProjectLighthouse.Extensions;
1212
using LBPUnion.ProjectLighthouse.Logging;
@@ -20,15 +20,16 @@ namespace LBPUnion.ProjectLighthouse.Helpers;
2020

2121
public static class SMTPHelper
2222
{
23+
private static readonly string blacklistFilePath = ServerConfiguration.Instance.EmailEnforcement.BlacklistFilePath;
24+
25+
// Null check blacklistFilePath and read into array
26+
private static readonly string[] blacklistFile =
27+
!string.IsNullOrWhiteSpace(blacklistFilePath) ? File.ReadAllLines(blacklistFilePath) : [];
28+
2329
// (User id, timestamp of last request + 30 seconds)
2430
private static readonly ConcurrentDictionary<int, long> recentlySentMail = new();
2531

2632
private const long emailCooldown = 1000 * 30;
27-
28-
// To prevent ReadAllLines() exception when BlacklistFilePath is empty
29-
private static readonly string[] blacklistFile =
30-
!string.IsNullOrWhiteSpace(EmailEnforcementConfiguration.Instance.BlacklistFilePath)
31-
? File.ReadAllLines(EmailEnforcementConfiguration.Instance.BlacklistFilePath) : [];
3233

3334
private static readonly HashSet<string> blacklistedDomains = new(blacklistFile);
3435

@@ -84,28 +85,24 @@ public static async Task SendPasswordResetEmail(DatabaseContext database, IMailS
8485
public static bool IsValidEmail(DatabaseContext database, string email)
8586
{
8687
// Email should not be empty, should be an actual email, and shouldn't already be used by an account
87-
if (!string.IsNullOrWhiteSpace(email) && emailValidator.IsValid(email) && !EmailIsUsed(database, email).Result)
88-
{
89-
// Don't even bother if there are no domains in blacklist (AKA file path is empty/invalid, or file itself is empty)
90-
if (EmailEnforcementConfiguration.Instance.EnableEmailBlacklist && blacklistedDomains.Count > 0)
91-
{
92-
// Get domain by splitting at '@' character
93-
string domain = email.Split('@')[1];
88+
if (string.IsNullOrWhiteSpace(email) || !emailValidator.IsValid(email) || EmailIsUsed(database, email).Result)
89+
return false;
9490

95-
// Return false if domain is found in blacklist
96-
if (blacklistedDomains.Contains(domain))
97-
{
98-
Logger.Info($"Invalid email address {email} submitted by user.", LogArea.Email);
99-
return false;
100-
}
91+
// Don't even bother if there are no domains in blacklist (AKA file path is empty/invalid, or file itself is empty)
92+
if (ServerConfiguration.Instance.EmailEnforcement.EnableEmailBlacklist && blacklistedDomains.Count > 0)
93+
{
94+
// Get domain by splitting at '@' character
95+
string domain = email.Split('@')[1];
10196

102-
return true;
97+
// Return false if domain is found in blacklist
98+
if (blacklistedDomains.Contains(domain))
99+
{
100+
Logger.Info($"Invalid email address {email} submitted by user.", LogArea.Email);
101+
return false;
103102
}
104-
105-
return true;
106103
}
107104

108-
return false;
105+
return true;
109106
}
110107

111108
// Don't want to allocate every single time we call EmailAddressAttribute.IsValidEmail()

0 commit comments

Comments
 (0)