Add Basic Check For Recent User Suspensions In `AuthenticationController LoginParent`

This commit is contained in:
Alan Moon 2024-12-12 14:43:46 -08:00
parent 0e90d5a111
commit 56f724813f

View File

@ -6,6 +6,7 @@ using sodoff.Model;
using sodoff.Schema;
using sodoff.Util;
using sodoff.Configuration;
using sodoff.Services;
namespace sodoff.Controllers.Common;
@ -14,10 +15,12 @@ public class AuthenticationController : Controller {
private readonly DBContext ctx;
private readonly IOptions<ApiServerConfig> config;
private readonly ModerationService moderationService;
public AuthenticationController(DBContext ctx, IOptions<ApiServerConfig> config) {
public AuthenticationController(DBContext ctx, IOptions<ApiServerConfig> config, ModerationService moderationService) {
this.ctx = ctx;
this.config = config;
this.moderationService = moderationService;
}
[HttpPost]
@ -53,6 +56,14 @@ public class AuthenticationController : Controller {
return Ok(new ParentLoginInfo { Status = MembershipUserStatus.InvalidPassword });
}
// check for recent bans, if recent ban is not up and is a complete suspension, disallow login
UserBan? userBan = moderationService.GetLatestBanFromUser(user);
if(userBan is not null) {
if (userBan.BanType != UserBanType.IndefiniteSuspension && DateTime.UtcNow >= userBan.EndsAt) { moderationService.RemoveBanFromUser(user, userBan); userBan.EndsAt = DateTime.UtcNow; } // remove ban if its up and set retreived userban to have an end date of now
if (userBan.BanType == UserBanType.IndefiniteSuspension || (userBan.BanType == UserBanType.TemporarySuspension && DateTime.UtcNow < userBan.EndsAt)) return Ok(new ParentLoginInfo{ Status = MembershipUserStatus.UserIsBanned });
}
// Create session
Session session = new Session {
User = user,