Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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();
            }
        }
Beispiel #10
0
        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.");
        }
Beispiel #11
0
 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));
 }
Beispiel #12
0
        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);
        }
Beispiel #15
0
        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);
            }
        }