public override void AddUsersToRoles(string[] usernames, string[] roleNames) { using (var db = new DataAccess.CSSDataContext()) { foreach (string username in usernames) { DataAccess.Login login = db.Logins.FirstOrDefault(p => p.Username == username.Trim()); if (login != null) { foreach (string roleName in roleNames) { DataAccess.Role role = db.Roles.FirstOrDefault(p => p.Name == roleName.Trim()); if (login.Login_Roles.Count(p => p.LoginId == login.Id && p.RoleId == role.Id) > 0) { continue; } db.Login_Roles.InsertOnSubmit(new DataAccess.Login_Role() { Login = login, LoginId = login.Id, Role = role, RoleId = role.Id }); } } } db.SubmitChanges(); } }
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 TestPermanentBanCalculations() { Initialize(); DataAccess.BanClass banClass = new BanClass() { Id = (int)BanClassType.Major, Name = "Major" }; DataAccess.BanType banType = new BanType() { BanClass = banClass, BanClassId = banClass.Id, BaseTimeInMinutes = 30, Description = "Permanent ban after one infraction.", IsIncremental = true, InfractionsBeforePermanentBan = 1, SrNumber = 13 }; DataAccess.Login testUser = CreateUser(Guid.NewGuid().ToString().Substring(0, 20), "Test", "NA", 10); DataAccess.Identity identity = testUser.Identity; // Test 1x Ban - 30 minutes TimeSpan?duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(30, duration.Value.TotalMinutes); // Test 2x Ban - Permanent. testUser.Bans.Add(CreateBan(testUser, banType)); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(TimeSpan.MaxValue, duration.Value); // Test permanent ban on first infraction banType = new BanType() { BanClass = banClass, BanClassId = banClass.Id, BaseTimeInMinutes = 30, Description = "Permanent ban on first infraction.", IsIncremental = true, InfractionsBeforePermanentBan = 0, SrNumber = 9 }; testUser = CreateUser(Guid.NewGuid().ToString().Substring(0, 20), "Test", "NA", 10); identity = testUser.Identity; // Test 1x Ban - Permanent. testUser.Bans.Add(CreateBan(testUser, banType)); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(TimeSpan.MaxValue, duration.Value); }
public override string[] GetRolesForUser(string username) { List <string> rolesForUser = new List <string>(); using (var db = new DataAccess.CSSDataContext()) { DataAccess.Login login = db.Logins.FirstOrDefault(p => p.Username == username.Trim()); foreach (DataAccess.Login_Role loginRole in login.Login_Roles) { rolesForUser.Add(loginRole.Role.Name); } } return(rolesForUser.ToArray()); }
public override bool DeleteUser(string username, bool deleteAllRelatedData) { using (var db = new DataAccess.CSSDataContext()) { DataAccess.Login login = DataAccess.Login.FindLoginByUsernameOrCallsign(db, username); DataAccess.Identity identity = db.Identities.FirstOrDefault(p => p.Id == login.IdentityId); if (identity != null) { db.Identities.DeleteOnSubmit(identity); db.SubmitChanges(); return(true); } } return(false); }
public override string[] GetRolesForUser(string username) { List <string> rolesForUser = new List <string>(); using (var db = new DataAccess.CSSDataContext()) { DataAccess.Login login = Login.FindLoginByUsernameOrCallsign(db, username); if (login != null) { foreach (DataAccess.Login_Role loginRole in login.Login_Roles) { rolesForUser.Add(loginRole.Role.Name); } } } return(rolesForUser.ToArray()); }
public override bool ChangePassword(string username, string oldPassword, string newPassword) { string oldPasswordHash = Allegiance.CommunitySecuritySystem.Common.Utility.Encryption.SHA256Hash(oldPassword); string newPasswordHash = Allegiance.CommunitySecuritySystem.Common.Utility.Encryption.SHA256Hash(newPassword); using (var db = new DataAccess.CSSDataContext()) { DataAccess.Login login = DataAccess.Login.FindLogin(db, username, oldPasswordHash); if (login == null) { return(false); } login.Password = newPasswordHash; db.SubmitChanges(); } return(true); }
public override System.Web.Security.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status) { string passwordHash = Allegiance.CommunitySecuritySystem.Common.Utility.Encryption.SHA256Hash(password); DataAccess.Identity identity = null; using (var db = new DataAccess.CSSDataContext()) { if (DataAccess.Login.FindLoginByUsername(db, username) != null) { status = System.Web.Security.MembershipCreateStatus.DuplicateUserName; return(null); } if (DataAccess.Alias.ListAliases(db, username).Count > 0) { status = System.Web.Security.MembershipCreateStatus.UserRejected; return(null); } if (DataAccess.Identity.TryCreateIdentity(db, username, passwordHash, email, out identity) == true) { db.SubmitChanges(); } if (identity != null) { DataAccess.Login createdLogin = DataAccess.Login.FindLoginByUsername(db, username); if (createdLogin != null) { status = System.Web.Security.MembershipCreateStatus.Success; return(MembershipUserUtility.CreateMembershipUserFromLogin(createdLogin)); } } } status = System.Web.Security.MembershipCreateStatus.ProviderError; return(null); }
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) { using (var db = new DataAccess.CSSDataContext()) { foreach (string username in usernames) { DataAccess.Login login = db.Logins.FirstOrDefault(p => p.Username == username.Trim()); foreach (DataAccess.Login_Role loginRole in login.Login_Roles) { foreach (string roleName in roleNames) { if (loginRole.Role.Name.Equals(roleName.Trim()) == true) { db.Login_Roles.DeleteOnSubmit(loginRole); } } } } db.SubmitChanges(); } }
public BanInfo GetBanInfo(string callsign) { CheckAccess(); using (var db = new CSSDataContext()) { DataAccess.Login login = DataAccess.Login.FindLoginByUsernameOrCallsign(db, callsign); var activeBan = login.Identity.Bans.FirstOrDefault(p => p.InEffect == true && p.DateExpires > DateTime.Now); if (activeBan != null) { return(new BanInfo() { BanId = activeBan.Id, BanReason = (activeBan.BanType == null) ? activeBan.Reason : activeBan.BanType.Description, TimeRemaining = ((TimeSpan)(activeBan.DateExpires - DateTime.Now)).ToString(), TotalTime = ((TimeSpan)(activeBan.DateExpires - activeBan.DateCreated)).ToString() }); } } throw new Exception("Couldn't find ban info."); }
public static MembershipUser CreateMembershipUserFromLogin(DataAccess.Login login) { return(new MembershipUser("CssMembershipProvider", login.Username, login.Id, login.Email, String.Empty, String.Empty, true, login.IsBanned, login.DateCreated, login.Identity.DateLastLogin, login.Identity.DateLastLogin, DateTime.MinValue, DateTime.MinValue)); }
public override System.Web.Security.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status) { DataAccess.Identity identity = null; var connect = new Connect(); using (var db = new DataAccess.CSSDataContext()) { if (DataAccess.Login.FindLoginByUsernameOrCallsign(db, username) != null) { status = System.Web.Security.MembershipCreateStatus.DuplicateUserName; return(null); } if (DataAccess.Alias.ListAliases(db, username).Count > 0) { status = System.Web.Security.MembershipCreateStatus.UserRejected; return(null); } if (Settings.Default.UseIPConverge == true) { if (connect.CheckEmail(email) == false) { status = MembershipCreateStatus.DuplicateEmail; return(null); } if (connect.CheckUsername(username) == false) { status = MembershipCreateStatus.DuplicateUserName; return(null); } } status = DataAccess.Identity.TryCreateIdentity(db, username, password, email, out identity); if (status == MembershipCreateStatus.Success) { if (Settings.Default.UseIPConverge == true) { string ipAddress = "127.0.0.1"; if (HttpContext.Current != null) { ipAddress = HttpContext.Current.Request.UserHostAddress; } // TODO: If IP Converge is to be used ever, then working around IPC's MD5 password hashs will need to be done. //if (connect.AddMember(email, username, passwordHash, ipAddress) == false) //{ // status = MembershipCreateStatus.ProviderError; // return null; //} } } db.SubmitChanges(); if (identity != null) { DataAccess.Login createdLogin = DataAccess.Login.FindLoginByUsernameOrCallsign(db, username); if (createdLogin != null) { status = System.Web.Security.MembershipCreateStatus.Success; var memebershipUser = MembershipUserUtility.CreateMembershipUserFromLogin(createdLogin); if (memebershipUser != null) { SendWelcomeEmail(memebershipUser); } return(memebershipUser); } } } status = System.Web.Security.MembershipCreateStatus.ProviderError; return(null); }
public void TestMajorBanDurationCalculations() { Initialize(); DataAccess.BanClass banClass = new BanClass() { Id = (int)BanClassType.Major, Name = "Major" }; DataAccess.BanType banType = new BanType() { BanClass = banClass, BanClassId = banClass.Id, BaseTimeInMinutes = 30, Description = "Major 30 minute ban.", IsIncremental = true, SrNumber = 4 }; DataAccess.Login testUser = CreateUser(Guid.NewGuid().ToString().Substring(0, 20), "Test", "NA", 10); DataAccess.Identity identity = testUser.Identity; // Test 1x Ban - 30 minutes TimeSpan?duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(30, duration.Value.TotalMinutes); // Test 2x Ban - 120 minutes testUser.Bans.Add(CreateBan(testUser, banType)); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(120, duration.Value.TotalMinutes); // Test 3x Ban - 600 minutes testUser.Bans.Add(CreateBan(testUser, banType)); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(600, duration.Value.TotalMinutes); // Test 4x Minor Ban - 30 days testUser.Bans.Add(CreateBan(testUser, banType)); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(1440 * 30, duration.Value.TotalMinutes); /* TODO: re-add when proper logic is in place. * // Test 5x Ban - 60 days * identity.Bans.Add(CreateBan(testUser, banType)); * duration = Ban.CalculateDuration(identity, banType); * Assert.AreEqual(1440 * 60, duration.Value.TotalMinutes); * * // Test 6x Ban - Permanent * identity.Bans.Add(CreateBan(testUser, banType)); * duration = Ban.CalculateDuration(identity, banType); * Assert.AreEqual(1440 * 10, duration.Value.TotalMinutes); */ // test rolling window for major bans. testUser.Bans.Clear(); for (int i = 0; i < 3; i++) { testUser.Bans.Add(CreateBan(testUser, banType)); } duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(1440 * 30, duration.Value.TotalMinutes); // Test rolling window -- 4 recent bans testUser.Bans[0].DateCreated = DateTime.Now.AddDays(-180); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(600, duration.Value.TotalMinutes); // Test rolling window -- 3 recent bans testUser.Bans[1].DateCreated = DateTime.Now.AddDays(-180); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(120, duration.Value.TotalMinutes); // Test rolling window -- 2 recent bans testUser.Bans[2].DateCreated = DateTime.Now.AddDays(-180); duration = Ban.CalculateDuration(identity, banType); Assert.AreEqual(30, duration.Value.TotalMinutes); }
public void TestMinorBanDurationCalculations() { Initialize(); DataAccess.BanClass minorBanClass = new BanClass() { Id = (int)BanClassType.Minor, Name = "Minor" }; DataAccess.BanType minorBanType = new BanType() { BanClass = minorBanClass, BanClassId = minorBanClass.Id, BaseTimeInMinutes = 30, Description = "Minor 30 minute ban.", IsIncremental = true, RocNumber = 1 }; DataAccess.Login testUser = CreateUser(Guid.NewGuid().ToString().Substring(0, 20), "Test", "NA", 10); DataAccess.Identity identity = testUser.Identity; // Test 1x Minor Ban - 30 minutes TimeSpan?duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(30, duration.Value.TotalMinutes); // Test 2x Minor Ban - 15 hours testUser.Bans.Add(CreateBan(testUser, minorBanType)); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(900, duration.Value.TotalMinutes); // Test 3x Minor Ban - 5 days testUser.Bans.Add(CreateBan(testUser, minorBanType)); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test 4x Minor Ban - 5 days testUser.Bans.Add(CreateBan(testUser, minorBanType)); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test 5x Minor Ban - 5 days testUser.Bans.Add(CreateBan(testUser, minorBanType)); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test 6x Minor Ban - 10 days testUser.Bans.Add(CreateBan(testUser, minorBanType)); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(1440 * 10, duration.Value.TotalMinutes); // TODO: re-add when proper logic is in place. //// Test 7x Minor Ban - 30 days //identity.Bans.Add(CreateBan(testUser, minorBanType)); //duration = Ban.CalculateDuration(identity, minorBanType); //Assert.AreEqual(1440 * 30, duration.Value.TotalMinutes); //// Test 8x Minor Ban - 90 days //identity.Bans.Add(CreateBan(testUser, minorBanType)); //duration = Ban.CalculateDuration(identity, minorBanType); //Assert.AreEqual(1440 * 90, duration.Value.TotalMinutes); //// Test 9x Minor Ban - 90 days //identity.Bans.Add(CreateBan(testUser, minorBanType)); //duration = Ban.CalculateDuration(identity, minorBanType); //Assert.AreEqual(1440 * 90, duration.Value.TotalMinutes); // test rolling window for minor bans. testUser.Bans.Clear(); for (int i = 0; i < 5; i++) { testUser.Bans.Add(CreateBan(testUser, minorBanType)); } Assert.AreEqual(5, identity.Bans.Count()); // Test rolling window -- 4 recent bans == 5 days testUser.Bans[0].DateCreated = DateTime.Now.AddDays(-91); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test rolling window -- 3 recent bans == 5 days testUser.Bans[1].DateCreated = DateTime.Now.AddDays(-91); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test rolling window -- 2 recent bans == 5 days testUser.Bans[2].DateCreated = DateTime.Now.AddDays(-91); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(7200, duration.Value.TotalMinutes); // Test rolling window -- 1 recent ban == 15 hours testUser.Bans[3].DateCreated = DateTime.Now.AddDays(-91); duration = Ban.CalculateDuration(identity, minorBanType); Assert.AreEqual(900, duration.Value.TotalMinutes); // Test rolling window -- 0 recent bans == 30 minutes testUser.Bans[4].DateCreated = DateTime.Now.AddDays(-91); duration = Ban.CalculateDuration(testUser.Identity, minorBanType); Assert.AreEqual(30, duration.Value.TotalMinutes); }
public PlayerInfo GetPlayerInfo(string callsign) { CheckAccess(); using (var db = new CSSDataContext()) { DataAccess.Login login = DataAccess.Login.FindLoginByUsernameOrCallsign(db, callsign); var ban = login.Identity.Bans.OrderByDescending(p => p.DateCreated).FirstOrDefault(); string lastBanReason = "None"; string lastBanTime = String.Empty; string lastBanUser = String.Empty; string lastBanDuration = String.Empty; if (ban != null) { var bannedByLogin = db.Logins.FirstOrDefault(p => p.Id == ban.BannedByLoginId); string bannedByUsername = "******"; if (bannedByLogin != null) { bannedByUsername = bannedByLogin.Username; } lastBanReason = ban.BanType == null ? ban.Reason : ban.BanType.Description; lastBanTime = ban.DateCreated.ToString(); lastBanUser = bannedByUsername; if (ban.DateExpires == null) { lastBanDuration = "Permanent"; } else { lastBanDuration = ban.DateExpires.Value.Subtract(ban.DateCreated).ToString(); } } var activeBan = login.Identity.Bans.FirstOrDefault(p => p.InEffect == true && p.DateExpires > DateTime.Now); string banStatus = "Ok"; if (activeBan != null) { banStatus = "Banned Until: " + activeBan.DateExpires.ToString(); } string tags = String.Empty; string tokens = String.Empty; var alias = login.Aliases.FirstOrDefault(p => p.Callsign == callsign); foreach (var groupAliasGroupRole in alias.Group_Alias_GroupRoles) { if (String.IsNullOrEmpty(groupAliasGroupRole.Group.Tag) == false) { if (String.IsNullOrEmpty(tags) == true) { tags = groupAliasGroupRole.Group.Tag; } else { tags += ", " + groupAliasGroupRole.Group.Tag; } } if (groupAliasGroupRole.GroupRole.Token != null) { if (String.IsNullOrEmpty(tags) == true) { tokens = groupAliasGroupRole.GroupRole.Token.ToString(); } else { tokens += ", " + groupAliasGroupRole.GroupRole.Token; } } } IPrincipal principal = HttpContext.Current.User; string[] aliases; string defaultAlias; if (Business.Authorization.IsZoneLeadOrAdminOrSuperAdmin(HttpContext.Current.User) == true) { aliases = login.Aliases.OrderByDescending(p => p.IsDefault).Select(p => p.Callsign).ToArray(); defaultAlias = login.Aliases.Where(p => p.IsDefault == true).Select(p => p.Callsign).FirstOrDefault(); } else { aliases = new string [] { "Not Shown" }; defaultAlias = String.Empty; } PlayerInfo returnValue = new PlayerInfo() { Callsign = callsign, LastLogin = login.Identity.DateLastLogin.ToString(), Status = banStatus, Tag = tags, Token = tokens, LastBanTime = lastBanTime, LastBanReason = lastBanReason, LastBanUser = lastBanUser, LastBanDuration = lastBanDuration, Aliases = aliases, DefaultAlias = defaultAlias }; return(returnValue); } }