예제 #1
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.");
                }
            }
        }
예제 #2
0
        public LauncherSignInResult LauncherSignIn(LauncherSignInData data)
        {
            try
            {
                LauncherSignInResult result = new LauncherSignInResult();

                bool succeeded = data.Authenticate();

                if (succeeded == true)
                {
                    result.Status = CheckInStatus.Ok;

                    using (CSSDataContext db = new CSSDataContext())
                    {
                        if (Identity.IsLinkedToAnOlderAccount(db, data.Username) == true)
                        {
                            result.LinkedAccount = Identity.GetOldestLinkedAcccountUsername(db, data.Username);
                            result.Status        = CheckInStatus.AccountLinked;
                        }
                    }
                }
                else
                {
                    result.Status = CheckInStatus.InvalidCredentials;
                }

                return(result);
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
예제 #3
0
        public ListAliasesResult ListAliases(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate())
                {
                    return(null);
                }

                ListAliasesResult result = new ListAliasesResult();

                using (var db = new CSSDataContext())
                {
                    result.Aliases = Alias.ListDecoratedAliases(db, data.Username, true);

                    result.AvailableAliasCount = Alias.GetAliasCount(db, data.Username);
                }

                return(result);
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
예제 #4
0
        public static bool Write(CSSDataContext db, LogType type, string message, bool submit)
        {
            try
            {
                db.Logs.InsertOnSubmit(new Log()
                {
                    DateOccurred = DateTime.Now,
                    Message      = message,
                    Type         = (byte)type
                });

                if (submit)
                {
                    db.SubmitChanges();
                }

                return(true);
            }
            catch (Exception error)
            {
                var errorMessage = new StringBuilder()
                                   .AppendLine("Failed to write data to log:")
                                   .Append("Type: ").AppendLine(type.ToString())
                                   .Append("Message: ").AppendLine(message);

                Debug.WriteLine(errorMessage);

                Error.Write(db, new Exception(errorMessage.ToString(), error), submit);
                return(false);
            }
        }
예제 #5
0
        static public List <IMessage> GetGroupMessages(CSSDataContext db, string callsign)
        {
            var messages = new List <IMessage>();
            var aliases  = Alias.ListAliases(db, callsign);

            foreach (var alias in aliases)
            {
                messages.AddRange(
                    alias.GroupMessage_Alias.Where(p => p.DateViewed == null).Select(p => (IMessage)p.GroupMessage).ToList()
                    );

                //messages.AddRange(alias.GroupMessages
                //    .Where(
                //        p => p.DateExpires <=  DateTime.Now
                //        &&	p.DateToSend >= DateTime.Now
                //        && p.GroupMessage_Alias
                //            .FirstOrDefault(r => r.Alias == alias && r.DateViewed == null) != null)
                //    .Select(q => (IMessage)q).ToList());

                foreach (var gma in alias.GroupMessage_Alias.Where(p => p.DateViewed == null && messages.Select(q => q.Id).Contains(p.GroupMessageId)))
                {
                    //if (messages.FirstOrDefault(p => p.Id == gma.GroupMessageId) != null)
                    gma.DateViewed = DateTime.Now;
                }

                db.SubmitChanges();
            }

            return(messages);
        }
예제 #6
0
        /// <summary>
        /// Calls BlackboxServer module to verify login and retrieve blackbox information.
        /// </summary>
        internal LoginResult Verify(bool useDebugBlackbox)
        {
            byte[] data;

            var alias = Alias;

            string ipAddress = "127.0.0.1";

            if (HttpContext.Current != null)
            {
                ipAddress = HttpContext.Current.Request.UserHostAddress;
            }

            var result = Validation.CreateSession(ipAddress, Username, Password, LobbyId, useDebugBlackbox, ref alias, out data);

            int rank = 0;

            using (CSSDataContext db = new CSSDataContext())
            {
                var rankDetail = DataAccess.Alias.GetRankForCallsign(db, alias);
                if (rankDetail != null)
                {
                    rank = (int)rankDetail.Rank;
                }
            }

            return(new LoginResult()
            {
                Status = result,
                BlackboxData = data,
                AcceptedAlias = alias,
                Rank = rank
            });
        }
예제 #7
0
        private void ClearDataForCallsign(string callsign)
        {
            using (var db = new CSSDataContext())
            {
                var login = Login.FindLoginByUsernameOrCallsign(db, callsign);

                if (login != null)
                {
                    foreach (var associatedLogin in login.Identity.Logins)
                    {
                        db.Alias.DeleteAllOnSubmit(associatedLogin.Aliases);
                        db.Login_UnlinkedLogins.DeleteAllOnSubmit(associatedLogin.Login_UnlinkedLogins);
                        db.Bans.DeleteAllOnSubmit(associatedLogin.Bans);
                        db.Bans.DeleteAllOnSubmit(associatedLogin.IssuedBans);
                        db.PollVotes.DeleteAllOnSubmit(associatedLogin.PollVotes);
                        db.MachineRecords.DeleteAllOnSubmit(associatedLogin.MachineRecords);
                        db.Logins.DeleteOnSubmit(associatedLogin);
                    }

                    db.PollVotes.DeleteAllOnSubmit(login.PollVotes);
                    db.Bans.DeleteAllOnSubmit(login.Bans);
                    db.Bans.DeleteAllOnSubmit(login.IssuedBans);
                    db.MachineRecords.DeleteAllOnSubmit(login.MachineRecords);
                    db.Logins.DeleteAllOnSubmit(db.Logins.Where(p => p.Id == login.Id));
                    db.Identities.DeleteOnSubmit(login.Identity);
                    db.LogIPs.DeleteAllOnSubmit(login.Identity.LogIPs);

                    db.SubmitChanges();
                }
            }
        }
예제 #8
0
        public void TestUnlinking()
        {
            TestMerging();

            using (DataAccess.CSSDataContext db = new CSSDataContext())
            {
                Identity principal     = Alias.GetAliasByCallsign(db, "User1").Login.Identity;
                Login    loginToUnlink = Alias.GetAliasByCallsign(db, "User2").Login;

                Identity.UnlinkLogin(db, principal, loginToUnlink);

                loginToUnlink = Alias.GetAliasByCallsign(db, "User3").Login;
                Identity.UnlinkLogin(db, principal, loginToUnlink);

                db.SubmitChanges();

                var user3 = Alias.GetAliasByCallsign(db, "User3").Login;
                Assert.AreEqual(2, user3.Identity.MachineRecords.Count());
                Assert.AreEqual(1, user3.Identity.PollVotes.Count());
                Assert.AreEqual(0, user3.Identity.Bans.Count());

                var user2 = Alias.GetAliasByCallsign(db, "User2").Login;
                Assert.AreEqual(0, user2.Identity.MachineRecords.Count());
                Assert.AreEqual(0, user2.Identity.PollVotes.Count());
                Assert.AreEqual(2, user2.Identity.Bans.Count());

                var user1 = Alias.GetAliasByCallsign(db, "User1").Login;
                Assert.AreEqual(0, user1.Identity.MachineRecords.Count());
                Assert.AreEqual(0, user1.Identity.PollVotes.Count());
                Assert.AreEqual(0, user1.Identity.Bans.Count());
            }
        }
예제 #9
0
        private void LoadTestVirtualMachineMarkers()
        {
            using (CSSDataContext db = new CSSDataContext())
            {
                db.VirtualMachineMarkers.InsertOnSubmit(new VirtualMachineMarker()
                {
                    IdentifierMask = "%|Virtual HD|%",
                    RecordTypeId   = 2
                });

                db.VirtualMachineMarkers.InsertOnSubmit(new VirtualMachineMarker()
                {
                    IdentifierMask = "%|VirtualBox %",
                    RecordTypeId   = 1
                });

                db.VirtualMachineMarkers.InsertOnSubmit(new VirtualMachineMarker()
                {
                    IdentifierMask = "%|VMware %",
                    RecordTypeId   = 1
                });

                db.VirtualMachineMarkers.InsertOnSubmit(new VirtualMachineMarker()
                {
                    IdentifierMask = "%|QEMU HARDDISK|%",
                    RecordTypeId   = 2
                });

                db.SubmitChanges();
            }
        }
예제 #10
0
        private void LoadTestMachineExclusions()
        {
            using (CSSDataContext db = new CSSDataContext())
            {
                db.MachineRecordExclusions.InsertOnSubmit(new MachineRecordExclusion()
                {
                    Id             = 1,
                    IdentifierMask = "Volume0",
                    RecordTypeId   = 2
                });

                db.MachineRecordExclusions.InsertOnSubmit(new MachineRecordExclusion()
                {
                    Id             = 2,
                    IdentifierMask = "%Volume1",
                    RecordTypeId   = 2
                });

                db.MachineRecordExclusions.InsertOnSubmit(new MachineRecordExclusion()
                {
                    Id             = 3,
                    IdentifierMask = "Volume2%",
                    RecordTypeId   = 2
                });

                db.MachineRecordExclusions.InsertOnSubmit(new MachineRecordExclusion()
                {
                    Id             = 4,
                    IdentifierMask = "%Volume3%",
                    RecordTypeId   = 2
                });

                db.SubmitChanges();
            }
        }
예제 #11
0
        protected void cvCaptcha_ServerValidate(object source, ServerValidateEventArgs args)
        {
            bool isValid = false;

            if (ViewState["captchaToken"] != null)
            {
                Guid captchaToken = (Guid)ViewState["captchaToken"];
                using (CSSDataContext db = new CSSDataContext())
                {
                    var captcha = db.Captchas.FirstOrDefault(p => p.Id == captchaToken);

                    //args.Value
                    //CustomValidator cvCaptcha = (CustomValidator)source;
                    //TextBox txtValidationCode = (TextBox) cvCaptcha.ControlToValidate;
                    if (captcha != null && args.Value.Equals(captcha.Answer, StringComparison.InvariantCultureIgnoreCase) == true)
                    {
                        isValid = true;
                    }
                }
            }

            if (isValid == false)
            {
                ViewState["captchaToken"] = null;
            }

            args.IsValid = isValid;
        }
예제 #12
0
        public static DataAccess.Alias GetAliasByCallsign(CSSDataContext db, string callsign)
        {
            string cleanCallsign = GetCallsignFromStringWithTokensAndTags(db, callsign);
            var    alias         = db.Alias.FirstOrDefault(p => p.Callsign == cleanCallsign);

            return(alias);
        }
예제 #13
0
        protected void btnSaveNewGroup_Click(object sender, EventArgs e)
        {
            using (CSSDataContext db = new CSSDataContext())
            {
                if (db.Groups.FirstOrDefault(p => p.Name == txtName.Text.Trim()) != null)
                {
                    lblErrorText.Text = "The group or squad name you specified: " + txtName.Text + " already exists.";
                    return;
                }

                if (db.Groups.FirstOrDefault(p => p.Tag == txtTag.Text.Trim()) != null)
                {
                    lblErrorText.Text = "The tag name you specified: " + txtTag.Text + " already exists.";
                    return;
                }

                db.Groups.InsertOnSubmit(new Group()
                {
                    Name        = txtName.Text.Trim(),
                    DateCreated = DateTime.Now,
                    IsSquad     = chkIsSquad.Checked,
                    Tag         = txtTag.Text
                });

                db.SubmitChanges();

                this.DataBind();
            }
        }
예제 #14
0
        public void ClearDatabase()
        {
            if (_initialized)
            {
                return;
            }

            using (var db = new CSSDataContext())
            {
                //Clear data
                try
                {
                    db.DeleteDatabase();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                }

                db.CreateDatabase();

                //Create any other functions which weren't created
                SetupFunctions(db);

                //Insert any test data
                InsertTestData(db);

                //Submit changes
                db.SubmitChanges();

                _initialized = true;
            }
        }
예제 #15
0
 public static void Clean()
 {
     using (var db = new CSSDataContext())
     {
         db.Errors.DeleteAllOnSubmit(db.Errors.Where(p => p.DateOccurred < DateTime.Now.AddDays(-30)));
         db.SubmitChanges();
     }
 }
예제 #16
0
        /// <summary>
        /// Gets the username of the oldest linked account to the username passed.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public static string GetOldestLinkedAcccountUsername(CSSDataContext db, string username)
        {
            var alias = Alias.GetAliasByCallsign(db, username);

            var oldestLogin = alias.Login.Identity.Logins.OrderBy(p => p.DateCreated).FirstOrDefault(p => p != alias.Login);

            return(oldestLogin.Username);
        }
예제 #17
0
 private void BindData()
 {
     using (CSSDataContext db = new CSSDataContext())
     {
         gvPolls.DataSource = db.Polls.OrderByDescending(p => p.DateExpires);
         gvPolls.DataBind();
     }
 }
예제 #18
0
        public void MarkRead(CSSDataContext db, int aliasId)
        {
            var ga = db.GroupMessage_Alias.FirstOrDefault(gma => gma.GroupMessageId == Id && gma.AliasId == aliasId);

            ga.DateViewed = DateTime.Now;

            db.SubmitChanges();
        }
 internal static List <Ban> ListBans(string alias)
 {
     using (var db = new CSSDataContext())
     {
         var login = Login.FindLoginByUsernameOrCallsign(db, alias);
         return(login.Identity.Bans.ToList());
     }
 }
 public static void Clean()
 {
     using (var db = new CSSDataContext())
     {
         db.LogIPs.DeleteAllOnSubmit(db.LogIPs.Where(p => p.LastAccessed < DateTime.Now.AddDays(-180)));
         db.SubmitChanges();
     }
 }
예제 #21
0
 public static CheckAliasResult ValidateAlias(string callsignWithTags)
 {
     using (var db = new CSSDataContext())
     {
         Alias alias;
         return(Alias.ValidateUsage(db, ref callsignWithTags, out alias));
     }
 }
        private BanType Initialize()
        {
            DataAccess.BanType banType;
            using (var db = new CSSDataContext())
            {
                banType = db.BanTypes.FirstOrDefault(p => p.RocNumber == 1);

                if (_initialized)
                {
                    return(banType);
                }

                if (db.Logins.FirstOrDefault(p => p.Username == "Admin") == null)
                {
                    //Create new user
                    CreateUser("Admin", "Test", "NA", 10);

                    var admin = Login.FindLoginByUsernameOrCallsign(db, "Admin");
                    admin.Login_Roles.Add(new Login_Role()
                    {
                        RoleId = (int)RoleType.Administrator
                    });
                    admin.Login_Roles.Add(new Login_Role()
                    {
                        RoleId = (int)RoleType.SuperAdministrator
                    });
                }

                db.Bans.DeleteAllOnSubmit(db.Bans);

                var banClass = new BanClass()
                {
                    Id   = 1,
                    Name = "Minor"
                };

                db.BanClasses.DeleteAllOnSubmit(db.BanClasses);
                db.BanClasses.InsertOnSubmit(banClass);

                banType = new BanType()
                {
                    BanClassId        = 1,
                    BaseTimeInMinutes = 30,
                    Description       = "Harassment / Threats",
                    IsIncremental     = true,
                    RocNumber         = 1
                };

                db.BanTypes.DeleteAllOnSubmit(db.BanTypes);
                db.BanTypes.InsertOnSubmit(banType);

                db.SubmitChanges();
            }

            _initialized = true;

            return(banType);
        }
예제 #23
0
파일: Task.cs 프로젝트: AllegianceZone/Auth
        internal static ActiveKey GenerateBlackbox(CSSDataContext db, bool debugMode)
        {
            var key = Compiler.Build(debugMode);

            db.ActiveKeys.InsertOnSubmit(key);
            db.SubmitChanges();

            return(key);
        }
        public ListMessageResult ListMessages(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate())
                {
                    return(null);
                }

                using (var db = new CSSDataContext())
                {
                    var messages = new List <IMessage>();
                    messages.AddRange(GroupMessage.GetGroupMessages(db, data.Username));
                    messages.AddRange(PersonalMessage.GetPrivateMessages(db, data.Username));
                    messages.AddRange(GroupMessage.GetGlobalMessages(db, data.Username));

                    //Re-insert messages into list since windows services
                    //don't seem to be able to handle objects wrapped in a baseclass.
                    //var result = messages
                    //    .OrderByDescending(p => p.DateToSend)
                    //    .Select(p => new BaseMessage()
                    //{
                    //    Id = p.Id,
                    //    Sender = p.Sender,
                    //    Subject = p.Subject,
                    //    Message = p.Message,
                    //    DateCreated = p.DateToSend,     //User doesn't actually have to know the date the message was created - only sent.
                    //    DateToSend = p.DateToSend,
                    //    DateExpires = p.DateExpires,
                    //}).ToList();

                    //return result;

                    ListMessageResult returnValue = new ListMessageResult();
                    returnValue.Messages = new List <ListMessageResult.ListMessage>();
                    messages.ForEach(p => returnValue.Messages.Add(new ListMessageResult.ListMessage()
                    {
                        DateCreated = p.DateCreated,
                        DateExpires = p.DateExpires,
                        DateToSend  = p.DateToSend,
                        Id          = p.Id,
                        Sender      = p.Sender,
                        Subject     = p.Subject,
                        Message     = p.Message
                    }));


                    return(returnValue);
                }
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
예제 #25
0
        public static void MergeLogin(CSSDataContext db, Login principalLogin, Login loginToMerge)
        {
            foreach (var item in loginToMerge.Aliases)
            {
                item.LoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.Bans)
            {
                item.LoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.IssuedBans)
            {
                item.BannedByLoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.Login_UnlinkedLogins.Where(p => p.LoginId1 == loginToMerge.Id))
            {
                item.LoginId1 = principalLogin.Id;
            }

            foreach (var item in loginToMerge.Login_UnlinkedLogins.Where(p => p.LoginId2 == loginToMerge.Id))
            {
                item.LoginId2 = principalLogin.Id;
            }

            foreach (var item in loginToMerge.MachineRecords)
            {
                item.LoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.PersonalMessages)
            {
                item.LoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.PollVotes)
            {
                item.LoginId = principalLogin.Id;
            }

            foreach (var item in loginToMerge.Sessions)
            {
                item.LoginId = principalLogin.Id;
            }

            Log.Write(LogType.ManagementWeb, "User " + loginToMerge.Username + " was merged to login " + principalLogin.Username);

            db.Login_Roles.DeleteAllOnSubmit(loginToMerge.Login_Roles);
            db.UsedKeys.DeleteAllOnSubmit(loginToMerge.UsedKeys);
            db.Lobby_Logins.DeleteAllOnSubmit(loginToMerge.Lobby_Logins);
            db.Logins.DeleteOnSubmit(loginToMerge);

            db.SubmitChanges();
        }
예제 #26
0
 public static void RemoveExpiredCaptchas()
 {
     using (CSSDataContext db = new CSSDataContext())
     {
         var timeout     = DateTime.Now.AddSeconds(-CaptchaExpirationTimeInSeconds);
         var oldCaptchas = db.Captchas.Where(p => p.DateCreated < timeout);
         db.Captchas.DeleteAllOnSubmit(oldCaptchas);
         db.SubmitChanges();
     }
 }
 public static List <Login> GetAllFromCache()
 {
     return(CacheManager <List <Login> > .Get("Login::GetAll()", CacheSeconds.TenSeconds, delegate()
     {
         using (CSSDataContext db = new CSSDataContext())
         {
             return db.Logins.ToList();
         }
     }));
 }
예제 #28
0
        private void DeletePollOption(int pollOptionID)
        {
            using (CSSDataContext db = new CSSDataContext())
            {
                db.PollOptions.DeleteOnSubmit(db.PollOptions.FirstOrDefault(p => p.Id == pollOptionID));
                db.SubmitChanges();
            }

            Response.Redirect("EditPoll.aspx?pollID=" + PollID);
        }
예제 #29
0
 public static void MyClassInitialize(TestContext testContext)
 {
     using (var db = new CSSDataContext())
     {
         if (db.DatabaseExists() == false)
         {
             db.CreateDatabase();
         }
     }
 }
예제 #30
0
 public static IQueryable <Lobby> FindAvailable(CSSDataContext db, Login account)
 {
     return(from l in db.Lobbies
            where l.IsEnabled &&
            (
                !l.IsRestrictive ||
                l.Lobby_Logins.Any(p => p.Login == account)
            )
            select l);
 }
 public static List<MachineRecordByIdentity> GetAllFromCache()
 {
     return CacheManager<List<MachineRecordByIdentity>>.Get("MachineRecordByIdentity::GetAll()", CacheSeconds.TenSeconds, delegate()
     {
         using(CSSDataContext db = new CSSDataContext())
         {
             return db.MachineRecords.Select(p => new MachineRecordByIdentity()
                 {
                     Identifier = p.Identifier,
                     IdentityId = p.Login.IdentityId,
                     RecordTypeId = p.RecordTypeId
                 })
                 .ToList();
         }
     });
 }
 public virtual void MarkRead(CSSDataContext db, int aliasId)
 {
 }
        public override System.Web.Security.MembershipUser GetUser(string username, bool userIsOnline)
        {
            // TODO: (Optional) if userIsOnline is true, then the user's last action timestamp may be updated.
            // the current db schema does not support this column.

            MembershipUser returnValue = MembershipUserUtility.FindUserByPredicate(p => p.Username == username);

            if (returnValue == null)
            {
                using (CSSDataContext db = new CSSDataContext())
                {
                    var login = Login.FindLoginByUsernameOrCallsign(db, username);

                    if(login != null)
                        returnValue = MembershipUserUtility.FindUserByPredicate(p => p.Username == login.Username);
                }
            }

            return returnValue;
        }