/// <summary> /// 获取站内消息 /// </summary> /// <returns></returns> public ActionResult GetMessages() { var post = PostService.GetQuery(p => p.Status == Status.Pending).Select(p => new { p.Id, p.Title, p.PostDate, p.Author }).Cacheable(); var msgs = LeaveMessageService.GetQuery(m => m.Status == Status.Pending).Select(p => new { p.Id, p.PostDate, p.NickName }).Cacheable(); var comments = CommentService.GetQuery(c => c.Status == Status.Pending).Select(p => new { p.Id, p.CommentDate, p.PostId, p.NickName }).Cacheable(); return(ResultData(new { post, msgs, comments })); }
public async Task <ActionResult> Pass(int id) { var msg = await LeaveMessageService.GetByIdAsync(id); msg.Status = Status.Published; bool b = await LeaveMessageService.SaveChangesAsync() > 0; if (b) { var content = new Template(await new FileInfo(Path.Combine(HostEnvironment.WebRootPath, "template", "notify.html")).ShareReadWrite().ReadAllTextAsync(Encoding.UTF8)).Set("time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Set("nickname", msg.NickName).Set("content", msg.Content); using var emails = LeaveMessageService.GetQuery(m => m.GroupTag == msg.GroupTag).Select(m => m.Email).Distinct().ToPooledList().Except(new List <string> { msg.Email, CurrentUser.Email }).ToPooledSet(); var link = Url.Action("Index", "Msg", new { cid = id }, Request.Scheme); foreach (var s in emails) { BackgroundJob.Enqueue(() => CommonHelper.SendMail($"{Request.Host}{CommonHelper.SystemSettings["Title"]} 留言回复:", content.Set("link", link).Render(false), s, ClientIP)); } } return(ResultData(null, b, b ? "审核通过!" : "审核失败!")); }
public async Task <ActionResult> Submit([FromServices] IMailSender mailSender, LeaveMessageCommand cmd) { var match = Regex.Match(cmd.NickName + cmd.Content.RemoveHtmlTag(), CommonHelper.BanRegex); if (match.Success) { LogManager.Info($"提交内容:{cmd.NickName}/{cmd.Content},敏感词:{match.Value}"); return(ResultData(null, false, "您提交的内容包含敏感词,被禁止发表,请检查您的内容后尝试重新提交!")); } var error = await ValidateEmailCode(mailSender, cmd.Email, cmd.Code); if (!string.IsNullOrEmpty(error)) { return(ResultData(null, false, error)); } if (cmd.ParentId > 0 && DateTime.Now - LeaveMessageService[cmd.ParentId.Value, m => m.PostDate] > TimeSpan.FromDays(180)) { return(ResultData(null, false, "当前留言过于久远,不再允许回复!")); } cmd.Content = cmd.Content.Trim().Replace("<p><br></p>", string.Empty); if (MsgFeq.GetOrAdd("Comments:" + ClientIP, 1) > 2) { MsgFeq.Expire("Comments:" + ClientIP, TimeSpan.FromMinutes(1)); return(ResultData(null, false, "您的发言频率过快,请稍后再发表吧!")); } var msg = cmd.Mapper <LeaveMessage>(); if (cmd.ParentId > 0) { msg.GroupTag = LeaveMessageService.GetQuery(c => c.Id == cmd.ParentId).Select(c => c.GroupTag).FirstOrDefault(); msg.Path = (LeaveMessageService.GetQuery(c => c.Id == cmd.ParentId).Select(c => c.Path).FirstOrDefault() + "," + cmd.ParentId).Trim(','); } else { msg.GroupTag = SnowFlake.NewId; msg.Path = SnowFlake.NewId; } if (Regex.Match(cmd.NickName + cmd.Content, CommonHelper.ModRegex).Length <= 0) { msg.Status = Status.Published; } msg.PostDate = DateTime.Now; var user = HttpContext.Session.Get <UserInfoDto>(SessionKey.UserInfo); if (user != null) { msg.NickName = user.NickName; msg.Email = user.Email; if (user.IsAdmin) { msg.Status = Status.Published; msg.IsMaster = true; } } msg.Content = await cmd.Content.HtmlSantinizerStandard().ClearImgAttributes(); msg.Browser = cmd.Browser ?? Request.Headers[HeaderNames.UserAgent]; msg.IP = ClientIP; msg.Location = Request.Location(); msg = LeaveMessageService.AddEntitySaved(msg); if (msg == null) { return(ResultData(null, false, "留言发表失败!")); } Response.Cookies.Append("NickName", msg.NickName, new CookieOptions() { Expires = DateTimeOffset.Now.AddYears(1), SameSite = SameSiteMode.Lax }); WriteEmailKeyCookie(cmd.Email); MsgFeq.AddOrUpdate("Comments:" + ClientIP, 1, i => i + 1, 5); MsgFeq.Expire("Comments:" + ClientIP, TimeSpan.FromMinutes(1)); var email = CommonHelper.SystemSettings["ReceiveEmail"]; var content = new Template(await new FileInfo(HostEnvironment.WebRootPath + "/template/notify.html").ShareReadWrite().ReadAllTextAsync(Encoding.UTF8)).Set("title", "网站留言板").Set("time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Set("nickname", msg.NickName).Set("content", msg.Content); if (msg.Status == Status.Published) { if (!msg.IsMaster) { await MessageService.AddEntitySavedAsync(new InternalMessage() { Title = $"来自【{msg.NickName}】的新留言", Content = msg.Content, Link = Url.Action("Index", "Msg", new { cid = msg.Id }) }); } if (msg.ParentId == null) { //新评论,只通知博主 BackgroundJob.Enqueue(() => CommonHelper.SendMail(Request.Host + "|博客新留言:", content.Set("link", Url.Action("Index", "Msg", new { cid = msg.Id }, Request.Scheme)).Render(false), email, ClientIP)); } else { //通知博主和上层所有关联的评论访客 using var emails = LeaveMessageService.GetQuery(e => e.GroupTag == msg.GroupTag).Select(c => c.Email).Distinct().AsEnumerable().Append(email).Except(new[] { msg.Email }).ToPooledSet(); string link = Url.Action("Index", "Msg", new { cid = msg.Id }, Request.Scheme); foreach (var s in emails) { BackgroundJob.Enqueue(() => CommonHelper.SendMail($"{Request.Host}{CommonHelper.SystemSettings["Title"]} 留言回复:", content.Set("link", link).Render(false), s, ClientIP)); } } return(ResultData(null, true, "留言发表成功,服务器正在后台处理中,这会有一定的延迟,稍后将会显示到列表中!")); } BackgroundJob.Enqueue(() => CommonHelper.SendMail(Request.Host + "|博客新留言(待审核):", content.Set("link", Url.Action("Index", "Msg", new { cid = msg.Id }, Request.Scheme)).Render(false) + "<p style='color:red;'>(待审核)</p>", email, ClientIP)); return(ResultData(null, true, "留言发表成功,待站长审核通过以后将显示到列表中!")); }