예제 #1
0
        public ActionResult DetailIndex(long userId, long authorId, string key)
        {
            //TODO: проверить валидность ключа на md5, проверить что у пользователя есть репозиторий
            if (IdValidator.IsInvalid(authorId) || string.IsNullOrEmpty(key) ||
                WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks))
            {
                return(RedirectToAction("Index"));
            }

            RemoveTaskCookie();
            RepositoryFactory   repositoryFactory   = WebSettingsConfig.Instance.GetRepositoryFactory();
            UserTasksRepository userTasksRepository = repositoryFactory.CreateUserRepository(authorId);
            UserTask            userTask            = userTasksRepository.GetTask(key, true);

            if (userTask == null)
            {
                return(RedirectToAction("Index"));
            }

            BanRepository banRepository = repositoryFactory.GetBanRepository();
            var           banHelper     = new BanHelper(Request);
            bool          isBanned      = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository);

            userTask.SetIsBanned(isBanned);
            userTask.SetAllRights(userId == authorId);
            return(View("Detail", userTask));
        }
예제 #2
0
        public ActionResult Index(long userId)
        {
            if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks))
            {
                return(RedirectToAction("Index", RouteConfig.MAIN_CONTROLLER_NAME));
            }

            RepositoryFactory   repositoryFactory   = WebSettingsConfig.Instance.GetRepositoryFactory();
            UserTasksRepository userTasksRepository = repositoryFactory.CreateUserRepository(userId);
            List <UserTask>     tasks = userTasksRepository.GetTasks();

            HttpCookie newTaskCookie = HttpContext.Request.Cookies[TASK_COOKIE_NAME];
            string     taskId        = null;

            if (newTaskCookie != null)
            {
                taskId = newTaskCookie.Value;
                RemoveTaskCookie();
            }

            BanRepository banRepository = repositoryFactory.GetBanRepository();
            var           banHelper     = new BanHelper(Request);
            bool          isBanned      = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository);

            var model = new UserTasksModel(taskId, tasks, isBanned);

            return(View(model));
        }
예제 #3
0
        private async Task <IEnumerable <BanView> > GetAvailibleBans()
        {
            if (_data == null)
            {
                return(new List <BanView>());
            }

            using (var dc = new BanRepository())
            {
                var dbBans = await dc.GetActivePermBansAsync();

                var data = _data.ToList();

                var res =
                    dbBans.Where(x => data.All(y => y.GuidIp != x.GuidIp)).GroupBy(x => x.GuidIp)
                    .Select(x => x.OrderByDescending(y => y.Reason).First())
                    .Select(x => new BanView
                {
                    GuidIp        = x.GuidIp,
                    Minutesleft   = x.MinutesLeft,
                    Num           = 0,
                    PlayerComment = x.Player == null ? string.Empty : x.Player.Comment,
                    Reason        = x.Reason,
                    PlayerName    = x.Player == null ? string.Empty : x.Player.Name
                })
                    .ToList();

                return(res);
            }
        }
예제 #4
0
        public JsonResult AddComment(long userId, long authorId, string key, string comment, int lastShowedComment)
        {
            if (IdValidator.IsInvalid(authorId) || string.IsNullOrWhiteSpace(comment) ||
                WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks))
            {
                return(JsonResultHelper.Error());
            }

            if (comment.Length > UserTasksSettings.COMMENT_MAX_LENGTH)
            {
                return(JsonResultHelper.Error());
            }

            RepositoryFactory repositoryFactory = WebSettingsConfig.Instance.GetRepositoryFactory();
            BanRepository     banRepository     = repositoryFactory.GetBanRepository();
            var  banHelper = new BanHelper(Request);
            bool isBanned  = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository);

            if (isBanned)
            {
                return(JsonResultHelper.Error());
            }

            banHelper.RegisterEvent(SectionId.UserTasks, "AddComment", userId, banRepository);

            UserTasksRepository userTasksRepository = repositoryFactory.CreateUserRepository(authorId);

            //TODO: получить пользователя и если у него указано имя, то заполнить Author

            comment = OurHtmlHelper.PrepareStringFromUser(comment);
            //TODO: дописывать (автор) к имени пользователя
            var taskComment = new TaskComment {
                Author       = null,
                AuthorId     = userId,
                CreationDate = DateTime.Now.Ticks,
                Text         = comment
            };

            bool isAddedComment         = userTasksRepository.AddComment(key, taskComment);
            List <TaskComment> comments = userTasksRepository.GetComments(key, lastShowedComment);

            SendMail(string.Format("Пользователь {0} оставил комментарий к таску {1} автора {2}:\r\n{3}", userId, key, authorId, comment));

            var htmlItems = new StringBuilder();

            foreach (TaskComment newComment in comments)
            {
                string item = OurHtmlHelper.RenderRazorViewToString(ControllerContext, "PartialTaskComment", newComment);
                htmlItems.Insert(0, item);
            }

            return
                (JsonResultHelper.GetUnlimitedJsonResult(
                     new {
                success = isAddedComment,
                newComments = htmlItems.ToString(),
                countNewComments = comments.Count
            }));
        }
예제 #5
0
        public AkickModule(Client client, AKickModuleConfig config, BanRepository banRepository)
        {
            var channels = new List <AkickModuleChannel>();

            foreach (var channelConfig in config.Channels)
            {
                channels.Add(new AkickModuleChannel(client, config, channelConfig, banRepository));
            }

            this.Channels = channels;
        }
예제 #6
0
        public void RegisterEvent(SectionId sectionId, string @event, long userId, BanRepository banRepository)
        {
            bool result = banRepository.RegisterEvent(sectionId, @event, userId, _userIp, _browserName);

            if (!result)
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "BanHelper.RegisterEvent НЕ УДАЛОСЬ зарегистрировать событие {0} для секции {1} для пользователя {2}, {3}, {4}!",
                    sectionId, @event, userId, _userIp, _browserName);
            }
        }
예제 #7
0
        public List <KeyValuePair <Guid, String> > GetAllBans(String userEmail)
        {
            Guid userID  = UserRepository.GetUserID(userEmail);
            var  banList = BanRepository.GetUserBans(userID);

            return(banList
                   .Select(s => new KeyValuePair <Guid, String>(
                               s.ID,
                               (String.Join("-", s.FromDate.ToString(Constants._dateFormat), s.ToDate.ToString(Constants._dateFormat))))
                           )
                   .ToList());
        }
예제 #8
0
        public JsonResult AddTask(long userId, string task)
        {
            if (IdValidator.IsInvalid(userId) || string.IsNullOrWhiteSpace(task) ||
                WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks))
            {
                return(JsonResultHelper.Error());
            }

            if (task.Length > UserTasksSettings.TASK_MAX_LENGTH)
            {
                return(JsonResultHelper.Error());
            }

            RepositoryFactory repositoryFactory = WebSettingsConfig.Instance.GetRepositoryFactory();
            BanRepository     banRepository     = repositoryFactory.GetBanRepository();
            var  banHelper = new BanHelper(Request);
            bool isBanned  = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository);

            if (isBanned)
            {
                return(JsonResultHelper.Error());
            }

            banHelper.RegisterEvent(SectionId.UserTasks, "AddTask", userId, banRepository);

            UserTasksRepository userTasksRepository = repositoryFactory.CreateUserRepository(userId);

            task = OurHtmlHelper.PrepareStringFromUser(task);

            //TODO: дописывать (автор) к имени пользователя
            var userTask = new UserTask {
                Author       = null,
                AuthorId     = userId,
                Text         = task,
                CreationDate = DateTime.Now.Ticks,
                DeletedDate  = 0
            };

            UserTask addedTask = userTasksRepository.AddTask(userTask);

            if (addedTask == null)
            {
                return(JsonResultHelper.Error());
            }

            SendMail(string.Format("Пользователь {0} добавил таск {1}:\r\n{2}", userId, addedTask.Id, task));

            HttpContext.Response.Cookies.Add(new HttpCookie(TASK_COOKIE_NAME, addedTask.Id));
            string urlToRedirect = Url.Action("Index", RouteConfig.USER_TASKS_CONTROLLER, null, Request.Url.Scheme);

            return(JsonResultHelper.GetUnlimitedJsonResult(new { success = true, urlToRedirect }));
        }
예제 #9
0
        internal AkickModuleChannel(Client client, AKickModuleConfig moduleConfig, AkickModuleChannelConfig config, BanRepository banRepository)
        {
            this.client        = client ?? throw new ArgumentNullException(nameof(client));
            this.opChannel     = config.OpChannel ?? throw new ArgumentNullException(nameof(opChannel));
            this.adminChannels = config.AdminChannels ?? throw new ArgumentNullException(nameof(adminChannels));
            this.banRepository = banRepository ?? throw new ArgumentNullException(nameof(banRepository));
            this.moduleConfig  = moduleConfig ?? throw new ArgumentNullException(nameof(moduleConfig));

            this.client.AddPrivateMessageHandler(this.banCommand);
            foreach (var adminChannel in this.adminChannels)
            {
                adminChannel.AddPrivateMessageHandler(this.banCommand);
            }
        }
예제 #10
0
        /// <summary>
        /// Банит пользователя
        /// </summary>
        /// <example>localhost/StudyLanguages/Service/BanUser?userId=59&browser=Firefox&userIp=::1&sectionId=UserTasks&banType=Today</example>
        /// <returns></returns>
        public EmptyResult BanUser()
        {
            string dirtyUserId    = Request.Params["userId"];
            string dirtySectionId = Request.Params["sectionId"];
            string dirtyBanType   = Request.Params["banType"];
            string userIp         = Request.Params["userIp"];
            string browser        = Request.Params["browser"];

            string remoteClientIp = RemoteClientHelper.GetClientIpAddress(Request);

            if (string.IsNullOrEmpty(remoteClientIp) || !remoteClientIp.Equals("176.214.39.34"))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "ServiceController.BanUser кто-то попытался забанить пользователя!!! Настройки: userId={0}, sectionId={1}, banType={2}, userIp={3}, browser={4}",
                    dirtyUserId, dirtySectionId, dirtyBanType, userIp, browser);
                return(new EmptyResult());
            }

            RepositoryFactory repositoryFactory = WebSettingsConfig.Instance.GetRepositoryFactory();
            BanRepository     banRepository     = repositoryFactory.GetBanRepository();

            SectionId sectionId;
            BanType   banType;
            long      userId;

            if (!Enum.TryParse(dirtySectionId, true, out sectionId) || EnumValidator.IsInvalid(sectionId) ||
                !Enum.TryParse(dirtyBanType, true, out banType) || EnumValidator.IsInvalid(banType) ||
                !long.TryParse(dirtyUserId, out userId) || string.IsNullOrEmpty(userIp) ||
                string.IsNullOrEmpty(browser))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "ServiceController.BanUser НЕ УДАЛОСЬ распрасить данные!!! Настройки: userId={0}, sectionId={1}, banType={2}, userIp={3}, browser={4}",
                    dirtyUserId, dirtySectionId, dirtyBanType, userIp, browser);
                return(new EmptyResult());
            }

            if (!banRepository.AddBan(sectionId, banType, userId, userIp, browser))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "ServiceController.BanUser НЕ УДАЛОСЬ забанить пользователя!!! Настройки: userId={0}, sectionId={1}, banType={2}, userIp={3}, browser={4}",
                    userId, sectionId, banType, userIp, browser);
            }

            return(new EmptyResult());
        }
예제 #11
0
        public ActionResult NewTaskIndex(long userId)
        {
            if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks))
            {
                return(RedirectToAction("Index"));
            }

            RepositoryFactory repositoryFactory = WebSettingsConfig.Instance.GetRepositoryFactory();
            BanRepository     banRepository     = repositoryFactory.GetBanRepository();
            var  banHelper = new BanHelper(Request);
            bool isBanned  = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository);

            if (isBanned)
            {
                return(RedirectToAction("Index"));
            }

            return(View("AddNew"));
        }
예제 #12
0
 public void DeleteBan(Guid banID)
 {
     BanRepository.ModifyBan(banID, false, null, null, null, null, null, true);
 }
예제 #13
0
 protected void btnBan_Click(object sender, EventArgs e)
 {
     this._userID = new Guid(Request.QueryString["id"].ToString());
     BanRepository.ModifyBan(null, true, this._userID, SessionHelper.UserID, tbxReason.Text
                             , DateTime.Parse(tbxFromDate.Text), DateTime.Parse(tbxToDate.Text), false);
 }
예제 #14
0
        static void Main(string[] args)
        {
            using (var connection = new ConnectionFactory().Create())
            {
                var databaseProvider = new SqliteDatabaseProvider(connection);
                var migrator         = new SimpleMigrator(Assembly.GetEntryAssembly(), databaseProvider, new ConsoleLogger());
                migrator.Load();
                if (args.ElementAtOrDefault(0) == "migrate")
                {
                    var runner = new ConsoleRunner(migrator);
                    runner.Run(args.Skip(1).ToArray());
                    return;
                }
                else
                {
                    migrator.MigrateToLatest();
                }
            }

            var clientConfig = new ClientConfig()
            {
                Server        = "ircd.antonymale.co.uk",
                Port          = 6667,
                IsSecure      = false,
                Nickname      = "guarddog",
                RealName      = "guarddog",
                Username      = "******",
                PermanentlyOp = true,
                Channels      =
                {
                    new ChannelConfig()
                    {
                        Name = "#test"
                    },
                    new ChannelConfig()
                    {
                        Name = "#admin"
                    },
                },
                NickservPassword = "******",
                RequireCommandPrefixInPrivmsg = true,
            };

            using (var client = new Client(clientConfig))
            {
                var banRepository     = new BanRepository();
                var aKickModuleConfig = new AKickModuleConfig()
                {
                    Channels =
                    {
                        new AkickModuleChannelConfig()
                        {
                            OpChannel     = client.Channels["#test"],
                            AdminChannels ={ client.Channels["#admin"]                     },
                        },
                    }
                };

                var akick = new AkickModule(client, aKickModuleConfig, banRepository);
                akick.Load();

                client.Open();

                Console.ReadLine();
            }


            Console.WriteLine("Hello World!");
        }
예제 #15
0
        public bool IsBanned(SectionId sectionId, long userId, BanRepository banRepository)
        {
            bool isBanned = banRepository.IsUserBanned(sectionId, userId, _userIp, _browserName);

            return(isBanned);
        }
예제 #16
0
        public Ban GetBan(Guid banID)
        {
            Ban ban = BanRepository.GetBanInfo(banID);

            return(ban);
        }
예제 #17
0
        private bool RegisterBansInternal(IEnumerable <Ban> list, Guid currentServerId)
        {
            var bans = list.ToList();

            if (!HaveChanges(bans, x => x.Num, (x, y) => x.GuidIp == y.GuidIp && x.Reason == y.Reason && x.Num == y.Num))
            {
                return(false);
            }


            using (var banRepository = new BanRepository())
            {
                var db =
                    banRepository.GetActiveBans(currentServerId);

                var ids = bans.Select(x => x.GuidIp).ToList();

                ids.AddRange(db.Select(x => x.GuidIp).ToList());
                ids = ids.Distinct().ToList();

                var players = _playerRepository.GetPlayers(ids.ToArray());

                var bansToUpdate            = new List <Arma3BEClient.Libs.ModelCompact.Ban>();
                var bansToAdd               = new List <Arma3BEClient.Libs.ModelCompact.Ban>();
                var playersToUpdateComments = new Dictionary <Guid, string>();

                foreach (var ban in db)
                {
                    bool needUpdate = false;

                    var actual = bans.FirstOrDefault(x => x.GuidIp == ban.GuidIp);
                    if (actual == null)
                    {
                        ban.IsActive = false;
                        needUpdate   = true;
                    }
                    else
                    {
                        if (ban.MinutesLeft != actual.Minutesleft)
                        {
                            ban.MinutesLeft = actual.Minutesleft;
                            needUpdate      = true;
                        }

                        if (ban.PlayerId == null)
                        {
                            var player = players.FirstOrDefault(x => x.GUID == ban.GuidIp);
                            if (player != null && !string.IsNullOrEmpty(ban.Reason))
                            {
                                ban.PlayerId = player.Id;

                                var comm = ban.Reason;

                                var ind1 = comm.IndexOf('[');
                                var ind2 = comm.LastIndexOf(']');

                                if (ind1 > -1 && ind2 > ind1)
                                {
                                    comm = comm.Remove(ind1, ind2 - ind1 + 1).Trim();
                                }

                                if (string.IsNullOrEmpty(player.Comment) || !player.Comment.Contains(comm))
                                {
                                    player.Comment = $"{player.Comment} | {comm}";

                                    if (!playersToUpdateComments.ContainsKey(player.Id))
                                    {
                                        playersToUpdateComments.Add(player.Id, player.Comment);
                                    }
                                    else
                                    {
                                        playersToUpdateComments[player.Id] = player.Comment;
                                    }
                                }

                                needUpdate = true;
                            }
                        }
                    }

                    if (needUpdate)
                    {
                        bansToUpdate.Add(ban);
                    }
                }

                foreach (var ban in bans)
                {
                    var bdb = db.FirstOrDefault(x => x.ServerId == currentServerId && x.GuidIp == ban.GuidIp);
                    if (bdb == null)
                    {
                        var player = players.FirstOrDefault(x => x.GUID == ban.GuidIp);

                        var newBan = new Arma3BEClient.Libs.ModelCompact.Ban
                        {
                            CreateDate  = DateTime.UtcNow,
                            GuidIp      = ban.GuidIp,
                            IsActive    = true,
                            Minutes     = ban.Minutesleft,
                            MinutesLeft = ban.Minutesleft,
                            Num         = ban.Num,
                            Reason      = ban.Reason,
                            ServerId    = currentServerId,
                            PlayerId    = player?.Id
                        };

                        bansToAdd.Add(newBan);

                        var comm = replace.Replace(ban.Reason, string.Empty).Trim();
                        if (player != null &&
                            (string.IsNullOrEmpty(player.Comment) || !player.Comment.Contains(comm)))
                        {
                            player.Comment = $"{player.Comment} | {comm}";

                            if (!playersToUpdateComments.ContainsKey(player.Id))
                            {
                                playersToUpdateComments.Add(player.Id, player.Comment);
                            }
                            else
                            {
                                playersToUpdateComments[player.Id] = player.Comment;
                            }
                        }
                    }
                }

                banRepository.AddOrUpdate(bansToAdd);
                banRepository.AddOrUpdate(bansToUpdate);
                _playerRepository.UpdateCommant(playersToUpdateComments);
            }


            return(true);
        }
예제 #18
0
        public void UpdateBan(String banReason, DateTime toDate, Guid banID)
        {
            DateTime fefd = toDate;

            BanRepository.ModifyBan(banID, false, null, null, banReason, null, toDate, null);
        }