/// <summary> /// 获取文章标签统计 /// </summary> /// <param name="FirtCache"></param> /// <returns></returns> public static Dictionary <string, int> UserWritingByTagCountQuery(bool FirtCache = true) { if (!(CacheTo.Get("Table_WritingTags_GroupBy") is Dictionary <string, int> rt) || !FirtCache) { using var db = new ContextBase(); var query = from a in db.UserWritingTags group a by a.TagName into m orderby m.Count() descending select new { m.Key, total = m.Count() }; var qs = query.Take(20).OrderByDescending(x => x.total).ToList(); var dic = new Dictionary <string, int>(); foreach (var item in qs) { dic.Add(item.Key, item.total); } rt = dic; CacheTo.Set("Table_WritingTags_GroupBy", rt, 300, false); } return(rt); }
public ActionResultVM GetToken(string AppId, string AppKey) { var vm = new ActionResultVM(); try { if (string.IsNullOrWhiteSpace(AppId) || string.IsNullOrWhiteSpace(AppKey)) { vm.Set(ARTag.lack); vm.msg = "参数缺失"; } else { if (!(CacheTo.Get(AppKey) is ActionResultVM cvm)) { vm = SQLiteBase.GetToken(AppId, AppKey); if (vm.code == 200) { //Token缓存 CacheTo.Set(AppKey, vm, GlobalTo.GetValue <int>("Safe:TokenCache"), false); } } else { vm = cvm; } }
public SharedResultVM AboutServerStatus() { var vm = new SharedResultVM(); try { var ckss = "Global_SystemStatus"; if (CacheTo.Get(ckss) is not SystemStatusTo ss) { ss = new SystemStatusTo(); CacheTo.Set(ckss, ss, 10, false); } vm.Log.Add(ss); vm.Data = ss.ToView(); vm.Set(SharedEnum.RTag.success); } catch (Exception ex) { vm.Set(ex); ConsoleTo.Log(ex); } return(vm); }
private ConcurrentDictionary <string, CachedEntryBase> BaseDictionaryGet() { var curname = Name + "_DataDictionary_Base_" + GetInstanceId(); return(CacheTo.GetItem(curname, () => { return new ConcurrentDictionary <string, CachedEntryBase>(); }, LifeSpanInSeconds)); }
/// <summary> /// 获取所有标签 /// </summary> /// <param name="FirtCache">默认取缓存</param> /// <returns></returns> public static List <Tags> TagsQuery(bool FirtCache = true) { if (!(CacheTo.Get("Table_Tags_List") is List <Tags> lt) || !FirtCache) { using var db = new ContextBase(); lt = db.Tags.Where(x => x.TagStatus == 1).OrderByDescending(x => x.TagHot).ToList(); CacheTo.Set("Table_Tags_List", lt, 300, false); } return(lt); }
/// <summary> /// 查询按钮 /// </summary> /// <param name="predicate"></param> /// <param name="cache"></param> /// <returns></returns> public static List <SysButton> QuerySysButtonList(Func <SysButton, bool> predicate, bool cache = true) { if (!cache || CacheTo.Get(GlobalCacheKey.SysButton) is not List <SysButton> list) { using var db = ContextBaseFactory.CreateDbContext(); list = db.SysButton.OrderBy(x => x.SbBtnOrder).ToList(); CacheTo.Set(GlobalCacheKey.SysButton, list, 300, false); } list = list.Where(predicate).ToList(); return(list); }
/// <summary> /// 查询角色信息 /// </summary> /// <param name="predicate"></param> /// <param name="cache"></param> /// <returns></returns> public static SysRole QuerySysRoleEntity(Func <SysRole, bool> predicate, bool cache = true) { if (!cache || CacheTo.Get(GlobalCacheKey.SysRole) is not List <SysRole> list) { using var db = ContextBaseFactory.CreateDbContext(); list = db.SysRole.ToList(); CacheTo.Set(GlobalCacheKey.SysRole, list, 300, false); } var mo = list.FirstOrDefault(predicate); return(mo); }
/// <summary> /// 首页 /// </summary> /// <param name="k">搜索</param> /// <param name="page">页码</param> /// <returns></returns> public IActionResult Index(string k, int page = 1) { var ckey = $"Writing-{page}"; if (!string.IsNullOrWhiteSpace(k) || CacheTo.Get(ckey) is not SharedPageVM vm) { vm = Application.CommonService.UserWritingQuery(k, page); vm.Route = Request.Path; if (string.IsNullOrWhiteSpace(k)) { CacheTo.Set(ckey, vm, 30, false); } } return(View("_PartialViewWriting", vm)); }
/// <summary> /// 有新消息数量查询 /// </summary> /// <param name="UserId">用户ID</param> /// <returns></returns> public static int NewMessageQuery(int UserId) { if (SharedFast.GlobalTo.GetValue <bool>("ReadOnly")) { return(0); } var ck = $"mq_{UserId}"; var num = CacheTo.Get(ck) as int?; if (num == null) { using var db = ContextBaseFactory.CreateDbContext(); num = db.UserMessage.Where(x => x.Uid == UserId && x.UmStatus == 1).Count(); CacheTo.Set(ck, num, 10, false); } return(num.Value); }
/// <summary> /// 获取最新登录标记,用于对比本地,踢出下线 /// </summary> /// <param name="UserId">登录的UserId</param> /// <param name="Cache">优先取缓存</param> /// <returns></returns> public static string GetLogonSign(int UserId, bool Cache = true) { string result = string.Empty; var usk = "UserSign_" + UserId; var us = CacheTo.Get(usk) as string; if (Cache && !string.IsNullOrEmpty(us)) { result = us; } else { using var db = new ContextBase(); var uiMo = db.UserInfo.Find(UserId); if (uiMo != null) { result = uiMo.UserSign; CacheTo.Set(usk, result, 5 * 60, false); } } return(result); }
/// <summary> /// 新增(间隔分批写入) /// </summary> /// <param name="mo"></param> public static void Insert(LogsVM mo) { try { //日志记录 var cacheLogsKey = "Global_Logs"; //上次写入的时间 var cacheLogWriteKey = "Global_Logs_Write"; if (!(CacheTo.Get(cacheLogsKey) is List <LogsVM> cacheLogs)) { cacheLogs = new List <LogsVM>(); } cacheLogs.Add(mo); var cacheLogWrite = CacheTo.Get(cacheLogWriteKey) as DateTime?; if (!cacheLogWrite.HasValue) { cacheLogWrite = DateTime.Now; } if (cacheLogs?.Count > cacheLogCount || DateTime.Now.ToTimestamp() - cacheLogWrite.Value.ToTimestamp() > cacheLogTime) { InsertNow(cacheLogs); cacheLogs = null; cacheLogWrite = DateTime.Now; } CacheTo.Set(cacheLogsKey, cacheLogs, 3600 * 24 * 30); CacheTo.Set(cacheLogWriteKey, cacheLogWrite, 3600 * 24 * 30); } catch (Exception) { } }
/// <summary> /// 验证 /// </summary> /// <returns></returns> public IActionResult Verify() { var vm = new ActionResultVM(); var id = RouteData.Values["id"]?.ToString().ToUpper(); if (!string.IsNullOrWhiteSpace(id)) { var uinfo = new UserAuthAid(HttpContext).Get(); switch (id.ToLower()) { //发送验证邮箱 case "send": { if (User.Identity.IsAuthenticated) { using var db = new ContextBase(); var usermo = db.UserInfo.Find(uinfo.UserId); if (usermo.UserMailValid == 1) { vm.msg = "邮箱已经完成验证"; } else if (string.IsNullOrWhiteSpace(usermo.UserMail)) { vm.msg = "邮箱不能为空"; } else { var cacheKey = "Global_VerifyMail_" + usermo.UserMail; var issend = CacheTo.Get(cacheKey) as bool?; if (issend == true) { vm.msg = "1分钟内只能发送一次验证信息"; } else { var tml = FileTo.ReadText(GlobalTo.WebRootPath + "/lib/mailchecker/", "list.txt"); if (tml.Contains(usermo.UserMail.Split('@').LastOrDefault())) { vm.msg = "该邮箱已被屏蔽"; } else { //发送验证 var ToMail = usermo.UserMail; var vjson = new { mail = ToMail, ts = DateTime.Now.ToTimestamp() }.ToJson(); var vcode = CalcTo.EnDES(vjson, GlobalTo.GetValue("VerifyCode:Key")).ToLower(); var VerifyLink = string.Format(GlobalTo.GetValue("VerifyCode:Url"), vcode); var txt = FileTo.ReadText(GlobalTo.WebRootPath + "/template/", "sendmailverify.html"); txt = txt.Replace("@ToMail@", ToMail).Replace("@VerifyLink@", VerifyLink); vm = MailAid.Send(ToMail, "验证你的邮箱", txt); if (vm.code == 200) { vm.msg = "已发送成功"; CacheTo.Set(cacheKey, true, 60, false); } } } } } else { vm.msg = "请登录"; } } break; //验证邮箱 default: try { var vjson = CalcTo.DeDES(id, GlobalTo.GetValue("VerifyCode:Key")).ToJObject(); if (DateTime.Now.ToTimestamp() - Convert.ToInt32(vjson["ts"]) < 60 * 5) { var mail = vjson["mail"].ToString(); if (string.IsNullOrWhiteSpace(mail)) { vm.msg = "邮件地址有误"; } else { using var db = new ContextBase(); var usermo = db.UserInfo.FirstOrDefault(x => x.UserMail == mail); if (usermo != null) { if (usermo.UserMailValid == 1) { vm.msg = "已验证,勿重复验证"; } else { usermo.UserMailValid = 1; db.UserInfo.Update(usermo); int num = db.SaveChanges(); vm.Set(num > 0); if (vm.code == 200) { vm.msg = "恭喜你,验证成功"; } } } else { vm.msg = "邮件地址无效"; } } } else { vm.msg = "链接已过期(5分钟内有效)"; } } catch (Exception) { vm.msg = "链接已失效"; } break; } } else { vm.msg = "缺失验证码信息"; } return(View(vm)); }
/// <summary> /// 公共登录验证 /// </summary> /// <param name="vt">登录类型</param> /// <param name="mo">用户信息</param> /// <param name="isremember">记住账号</param> /// <returns></returns> private ActionResultVM ValidateLogin(ValidateloginType vt, UserInfo mo, bool isremember = true) { var vm = new ActionResultVM(); string sql = string.Empty; using var db = new ContextBase(); var uiR = db.UserInfo; UserInfo outMo = new UserInfo(); switch (vt) { case ValidateloginType.local: if (string.IsNullOrWhiteSpace(mo.UserName) || string.IsNullOrWhiteSpace(mo.UserPwd)) { vm.msg = "用户名或密码不能为空"; return(vm); } else { mo.UserPwd = CalcTo.MD5(mo.UserPwd); //邮箱登录 if (ParsingTo.IsMail(mo.UserName)) { outMo = uiR.FirstOrDefault(x => x.UserMail == mo.UserName && x.UserPwd == mo.UserPwd); } else { outMo = uiR.FirstOrDefault(x => x.UserName == mo.UserName && x.UserPwd == mo.UserPwd); } } break; case ValidateloginType.qq: outMo = uiR.FirstOrDefault(x => x.OpenId1.Equals(mo.OpenId1)); break; case ValidateloginType.weibo: outMo = uiR.FirstOrDefault(x => x.OpenId2.Equals(mo.OpenId2)); break; case ValidateloginType.github: outMo = uiR.FirstOrDefault(x => x.OpenId3.Equals(mo.OpenId3)); break; case ValidateloginType.taobao: outMo = uiR.FirstOrDefault(x => x.OpenId4.Equals(mo.OpenId4)); break; case ValidateloginType.microsoft: outMo = uiR.FirstOrDefault(x => x.OpenId5.Equals(mo.OpenId5)); break; case ValidateloginType.dingtalk: outMo = uiR.FirstOrDefault(x => x.OpenId6.Equals(mo.OpenId6)); break; } if (outMo == null || outMo.UserId == 0) { vm.msg = "用户名或密码错误"; return(vm); } if (outMo.LoginLimit == 1) { vm.msg = "用户已被禁止登录"; return(vm); } //刷新登录标记 outMo.UserLoginTime = DateTime.Now; outMo.UserSign = outMo.UserLoginTime.Value.ToTimestamp().ToString(); uiR.Update(outMo); var num = db.SaveChanges(); if (num < 1) { vm.msg = "请求登录被拒绝"; return(vm); } try { //登录标记 缓存5分钟,绝对过期 var usk = "UserSign_" + outMo.UserId; CacheTo.Set(usk, outMo.UserSign, 5 * 60, false); //写入授权 SetAuth(HttpContext, outMo, isremember); //生成Token vm.data = UserAuthAid.TokenMake(outMo); vm.Set(ARTag.success); } catch (Exception ex) { vm.Set(ex); } return(vm); }
private async Task <ConcurrentDictionary <string, CachedEntryBase> > BaseDictionaryGetAsync() { var curname = Name + "_DataDictionary_Base_" + GetInstanceId(); return(await CacheTo.GetItemAsync(curname, async() => new ConcurrentDictionary <string, CachedEntryBase>(), LifeSpanInSeconds)); }
private async Task BaseDictionarySetAsync(ConcurrentDictionary <string, CachedEntryBase> value) { var curname = Name + "_DataDictionary_Base_" + GetInstanceId(); await CacheTo.SetItemAsync <ConcurrentDictionary <string, CachedEntryBase> >(curname, value, LifeSpanInSeconds); }
private void BaseDictionarySet(ConcurrentDictionary <string, CachedEntryBase> value) { var curname = Name + "_DataDictionary_Base_" + GetInstanceId(); CacheTo.SetItem <ConcurrentDictionary <string, CachedEntryBase> >(curname, value, LifeSpanInSeconds); }
/// <summary> /// 清空全局缓存 /// </summary> public static void GlobalCacheRmove() { CacheTo.Remove(GlobalCacheKey.SysMenu); CacheTo.Remove(GlobalCacheKey.SysRole); CacheTo.Remove(GlobalCacheKey.SysButton); }
/// <summary> /// 公共登录验证 /// </summary> /// <param name="vt">登录类型</param> /// <param name="mo">用户信息</param> /// <param name="isremember">记住账号</param> /// <returns></returns> private SharedResultVM ValidateLogin(LoginBase.LoginType?vt, Domain.UserInfo mo, bool isremember = true) { var vm = new SharedResultVM(); string sql = string.Empty; var uiR = db.UserInfo; Domain.UserInfo outMo = new(); switch (vt) { case LoginBase.LoginType.QQ: outMo = uiR.FirstOrDefault(x => x.OpenId1.Equals(mo.OpenId1)); break; case LoginBase.LoginType.WeiBo: outMo = uiR.FirstOrDefault(x => x.OpenId2.Equals(mo.OpenId2)); break; case LoginBase.LoginType.GitHub: outMo = uiR.FirstOrDefault(x => x.OpenId3.Equals(mo.OpenId3)); break; case LoginBase.LoginType.TaoBao: outMo = uiR.FirstOrDefault(x => x.OpenId4.Equals(mo.OpenId4)); break; case LoginBase.LoginType.MicroSoft: outMo = uiR.FirstOrDefault(x => x.OpenId5.Equals(mo.OpenId5)); break; case LoginBase.LoginType.DingTalk: outMo = uiR.FirstOrDefault(x => x.OpenId6.Equals(mo.OpenId6)); break; default: if (string.IsNullOrWhiteSpace(mo.UserName) || string.IsNullOrWhiteSpace(mo.UserPwd)) { vm.Msg = "用户名或密码不能为空"; return(vm); } else { mo.UserPwd = CalcTo.MD5(mo.UserPwd); //邮箱登录 if (ParsingTo.IsMail(mo.UserName)) { outMo = uiR.FirstOrDefault(x => x.UserMail == mo.UserName && x.UserPwd == mo.UserPwd); } else { outMo = uiR.FirstOrDefault(x => x.UserName == mo.UserName && x.UserPwd == mo.UserPwd); } } break; } if (outMo == null || outMo.UserId == 0) { vm.Msg = "用户名或密码错误"; return(vm); } if (outMo.LoginLimit == 1) { vm.Msg = "用户已被禁止登录"; return(vm); } try { //刷新登录标记 outMo.UserLoginTime = DateTime.Now; outMo.UserSign = outMo.UserLoginTime.Value.ToTimestamp().ToString(); uiR.Update(outMo); db.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine(ex); } try { //登录标记 缓存5分钟,绝对过期 if (GlobalTo.GetValue <bool>("Common:SingleSignOn")) { var usk = "UserSign_" + outMo.UserId; CacheTo.Set(usk, outMo.UserSign, 5 * 60, false); } //写入授权 SetAuth(HttpContext, outMo, isremember); //生成Token vm.Data = Apps.LoginService.TokenMake(outMo); vm.Set(SharedEnum.RTag.success); } catch (Exception ex) { vm.Set(ex); } return(vm); }