Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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;
                    }
                }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        private ConcurrentDictionary <string, CachedEntryBase> BaseDictionaryGet()
        {
            var curname = Name + "_DataDictionary_Base_" + GetInstanceId();

            return(CacheTo.GetItem(curname, () => {
                return new ConcurrentDictionary <string, CachedEntryBase>();
            }, LifeSpanInSeconds));
        }
Exemplo n.º 5
0
 /// <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);
 }
Exemplo n.º 6
0
 /// <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);
 }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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));
        }
Exemplo n.º 9
0
        /// <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);
        }
Exemplo n.º 10
0
            /// <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);
            }
Exemplo n.º 11
0
        /// <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)
            {
            }
        }
Exemplo n.º 12
0
        /// <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));
        }
Exemplo n.º 13
0
        /// <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);
        }
Exemplo n.º 14
0
        private async Task <ConcurrentDictionary <string, CachedEntryBase> > BaseDictionaryGetAsync()
        {
            var curname = Name + "_DataDictionary_Base_" + GetInstanceId();

            return(await CacheTo.GetItemAsync(curname, async() => new ConcurrentDictionary <string, CachedEntryBase>(), LifeSpanInSeconds));
        }
Exemplo n.º 15
0
 private async Task BaseDictionarySetAsync(ConcurrentDictionary <string, CachedEntryBase> value)
 {
     var curname = Name + "_DataDictionary_Base_" + GetInstanceId();
     await CacheTo.SetItemAsync <ConcurrentDictionary <string, CachedEntryBase> >(curname, value, LifeSpanInSeconds);
 }
Exemplo n.º 16
0
        private void BaseDictionarySet(ConcurrentDictionary <string, CachedEntryBase> value)
        {
            var curname = Name + "_DataDictionary_Base_" + GetInstanceId();

            CacheTo.SetItem <ConcurrentDictionary <string, CachedEntryBase> >(curname, value, LifeSpanInSeconds);
        }
Exemplo n.º 17
0
 /// <summary>
 /// 清空全局缓存
 /// </summary>
 public static void GlobalCacheRmove()
 {
     CacheTo.Remove(GlobalCacheKey.SysMenu);
     CacheTo.Remove(GlobalCacheKey.SysRole);
     CacheTo.Remove(GlobalCacheKey.SysButton);
 }
Exemplo n.º 18
0
        /// <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);
        }