public string GetAutoBanDuration(string callsign, int banTypeId) { CheckAccess(); using (var db = new CSSDataContext()) { DataAccess.Login login = DataAccess.Login.FindLoginByUsernameOrCallsign(db, callsign); DataAccess.BanType banType = db.BanTypes.FirstOrDefault(p => p.Id == banTypeId); if (login != null && banType != null) { TimeSpan?duration = DataAccess.Ban.CalculateDuration(login.Identity, banType); if (duration == null) { return("Infinite"); } else { return(duration.Value.ToString()); } } else { throw new Exception("Could not find login or ban type."); } } }
public void TestBan() { DataAccess.BanType banType = Initialize(); //Test Set, ListBans, Remove, ensure user has requisite permissions. var adminService = new Administration(); var result = adminService.SetBan(new BanData() { BanMode = BanMode.Auto, BanTypeId = banType.Id, Username = "******", Password = "******", Reason = "#1 Orion is being a general dick.", Alias = "Orion", }); Assert.IsTrue(result); //Ensure banned user can no longer log in var clientService = new ClientService(); var loginResult = clientService.Login(new LoginData() { Username = "******", Password = "******", Alias = "Orion" }); Assert.AreEqual(LoginStatus.AccountLocked, loginResult.Status); //List bans var bans = adminService.ListBans(new AuthenticatedData() { Username = "******", Password = "******" }, "Orion"); //Remove all bans var ban = bans.FirstOrDefault(); adminService.RemoveBan(new BanData() { Username = "******", Password = "******", BanId = ban.Id }); bans = adminService.ListBans(new AuthenticatedData() { Username = "******", Password = "******" }, "Orion"); Assert.AreEqual(0, bans.Where(p => p.InEffect == true).Count()); //Ensure user can log in. clientService = new ClientService(); loginResult = clientService.Login(new LoginData() { Username = "******", Password = "******", Alias = "Orion", LobbyId = 1 }); Assert.AreEqual(LoginStatus.Authenticated, loginResult.Status); //Set two sequential bans. result = adminService.SetBan(new BanData() { BanMode = BanMode.Auto, Username = "******", Password = "******", BanTypeId = banType.Id, Reason = "#2 Orion is being a general dick.", Alias = "Orion", }); Assert.IsTrue(result); result = adminService.SetBan(new BanData() { BanMode = BanMode.Auto, Username = "******", Password = "******", BanTypeId = banType.Id, Reason = "#3 Orion is /STILL/ being a general dick.", Alias = "Orion", }); Assert.IsTrue(result); //Retrieve ban bans = adminService.ListBans(new AuthenticatedData() { Username = "******", Password = "******" }, "Orion"); Assert.AreEqual(2, bans.Where(p => p.InEffect == true).Count()); var firstBan = bans.Where(p => p.InEffect == true).OrderBy(p => p.DateCreated).First(); var lastBan = bans.Where(p => p.InEffect == true).OrderBy(p => p.DateCreated).Last(); var firstDuration = (firstBan.DateExpires.Value - firstBan.DateCreated).TotalMinutes; var lastDuration = (lastBan.DateExpires.Value - lastBan.DateCreated).TotalMinutes; Assert.IsTrue(lastDuration > firstDuration); //Reset ban length adminService.SetBan(new BanData() { Username = "******", Password = "******", BanId = firstBan.Id, BanMode = BanMode.Custom, Duration = TimeSpan.MinValue, Alias = "Orion" }); adminService.SetBan(new BanData() { Username = "******", Password = "******", BanId = lastBan.Id, BanMode = BanMode.Custom, Duration = TimeSpan.MinValue, Alias = "Orion" }); bans = adminService.ListBans(new AuthenticatedData() { Username = "******", Password = "******" }, "Orion"); Assert.AreEqual(2, bans.Where(p => p.InEffect == true).Count()); Assert.AreEqual(0, bans.Where(p => p.InEffect == true && p.DateExpires > DateTime.Now).Count()); }