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;
            }
        }
        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;
            }
        }
        public List <Ban> ListBans(AuthenticatedData data, string alias)
        {
            try
            {
                if (!data.Authenticate(RoleType.Moderator, RoleType.ZoneLeader, RoleType.Administrator, RoleType.SuperAdministrator))
                {
                    throw new AuthenticationException();
                }

                return(BanData.ListBans(alias));
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
        public List <Poll> ListPolls(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate())
                {
                    return(null);
                }

                return(Poll.FindActivePolls(data.Username));
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
        public void Logout(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate())
                {
                    return;
                }

                Validation.EndSession(data.Username, data.Password);
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
        public List <BanType> ListInfractionTypes(AuthenticatedData data)
        {
            try
            {
                if (!data.Authenticate(RoleType.Administrator, RoleType.ZoneLeader, RoleType.Moderator, RoleType.SuperAdministrator))
                {
                    throw new AuthenticationException();
                }

                using (var db = new CSSDataContext())
                {
                    return(db.BanTypes.ToList());
                }
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }
        public List <Alias> ListAliases(AuthenticatedData data, string alias)
        {
            try
            {
                if (!data.Authenticate(RoleType.Administrator, RoleType.ZoneLeader, RoleType.SuperAdministrator))
                {
                    throw new AuthenticationException();
                }

                using (var db = new CSSDataContext())
                {
                    return(Alias.ListAliases(db, alias));
                }
            }
            catch (Exception error)
            {
                Error.Write(error);
                throw;
            }
        }