示例#1
0
        public void DataKey_Equality_DifferentValues()
        {
            DataKey key  = new DataKeyBuilder().Add(1, "abc", 123).Build();
            DataKey key2 = new DataKeyBuilder().Add(1, "abc", 12).Build();

            Assert.IsFalse(key.Equals(key2));
        }
        public void Init()
        {
            _blockedHttpHeaders = new List <string>()
            {
            };
            _includedQueryStringParameters = new List <string>();
            _aspSessionCookieName          = Engines.Constants.DEFAULT_ASP_COOKIE_NAME;

            _interval          = new TimeSpan(0, 0, 0, 0, 50);
            _evidenceKeyFilter = new EvidenceKeyFilterShareUsage(
                _blockedHttpHeaders, _includedQueryStringParameters, true, _aspSessionCookieName);
            _shareUsageTracker = new ShareUsageTracker(new CacheConfiguration()
            {
                Builder = new LruPutCacheBuilder(),
                Size    = 1000
            },
                                                       _interval,
                                                       _evidenceKeyFilter);

            _evidenceData = new Dictionary <string, object>()
            {
                { Core.Constants.EVIDENCE_HTTPHEADER_PREFIX + Core.Constants.EVIDENCE_SEPERATOR + "user-agent", "iPhone" }
            };

            var dataKeyBuilder = new DataKeyBuilder();

            foreach (var evidence in _evidenceData)
            {
                dataKeyBuilder.Add(100, evidence.Key, evidence.Value);
            }

            _data = MockFlowData.CreateFromEvidence(_evidenceData, false);
            _data.Setup(d => d.GenerateKey(It.IsAny <IEvidenceKeyFilter>())).Returns(dataKeyBuilder.Build());
        }
示例#3
0
 /// <summary>
 ///     缓存这些对象
 /// </summary>
 /// <returns>数据</returns>
 public void RemoveCache <TData>(long id)
 {
     if (id > 0)
     {
         Client.Del(DataKeyBuilder.DataKey <TData>(id));
     }
 }
示例#4
0
        public void DataKey_NullValue_Inequality()
        {
            DataKey key1 = new DataKeyBuilder().Add(1, "abc", null).Build();
            DataKey key2 = new DataKeyBuilder().Add(1, "abc", "value").Build();

            Assert.IsFalse(key1.Equals(key2));
        }
示例#5
0
        /// <summary>
        /// Helper method used to create an IFlowData from the given evidence.
        /// </summary>
        /// <param name="evidenceData">
        /// A Dictionary containing the evidence that needs to be in the
        /// <see cref="IFlowData"/>.
        /// </param>
        /// <returns>
        /// A <see cref="Mock{IFlowData}"/> instance that will return the
        /// supplied evidence data when GetEvidence() is called.
        /// </returns>
        public static Mock <IFlowData> CreateFromEvidence(
            Dictionary <string, object> evidenceData,
            bool dataKeyFromAllEvidence)
        {
            LoggerFactory factory  = new LoggerFactory();
            Evidence      evidence = new Evidence(factory.CreateLogger <Evidence>());

            evidence.PopulateFromDictionary(evidenceData);

            Mock <IFlowData> data = new Mock <IFlowData>();

            data.Setup(d => d.GetEvidence()).Returns(evidence);

            if (dataKeyFromAllEvidence)
            {
                var keyBuilder = new DataKeyBuilder();
                foreach (var entry in evidenceData)
                {
                    keyBuilder.Add(0, entry.Key, entry.Value);
                }
                DataKey key = keyBuilder.Build();
                data.Setup(d => d.GenerateKey(It.IsAny <IEvidenceKeyFilter>()))
                .Returns(key);
            }

            return(data);
        }
示例#6
0
 /// <summary>
 /// 取用户的名字
 /// </summary>
 /// <param name="uid"></param>
 static int GetDepartmentId(int uid)
 {
     using (var proxy = new RedisProxy(RedisProxy.DbSystem))
     {
         return(proxy.GetValue <int>(DataKeyBuilder.ToKey("user", "depid", uid)));
     }
 }
示例#7
0
 /// <summary>
 /// 取用户的名字
 /// </summary>
 /// <param name="id"></param>
 internal static string GetUserName(int id)
 {
     using (var proxy = new RedisProxy(RedisProxy.DbSystem))
     {
         return(proxy.Get(DataKeyBuilder.ToKey("user", "name", id))?.Trim('"'));
     }
 }
 /// <summary>
 ///     保存用户的查询历史
 /// </summary>
 /// <param name="userId">用户</param>
 /// <param name="pageId">关联页面</param>
 /// <param name="args">查询参数</param>
 public static void SaveQueryHistory(long userId, long pageId, Dictionary <string, string> args)
 {
     if (userId == 0 || pageId == 0)
     {
         return;
     }
     using (var proxy = new RedisProxy(RedisProxy.DbSystem))
     {
         var key = DataKeyBuilder.ToKey("qh", pageId, userId);
         proxy.Set(key, JsonConvert.SerializeObject(args));
     }
     //PageDataDataAccess pdAccess = new PageDataDataAccess();
     //if (pdAccess.Any(p => p.UserId == loginUser.Id && p.PageId == page.Id))
     //{
     //    pdAccess.SetValue(p => p.PageData, JsonConvert.SerializeObject(args),
     //        p => p.UserId == loginUser.Id && p.PageId == page.Id);
     //}
     //else
     //{
     //    pdAccess.Insert(new PageDataData
     //    {
     //        PageId = page.Id,
     //        UserId = loginUser.Id,
     //        PageData = JsonConvert.SerializeObject(args)
     //    });
     //}
 }
示例#9
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="userHostAddress"></param>
        /// <param name="userName">用户名</param>
        /// <param name="pwd">密码</param>
        /// <returns></returns>
        public static Guid WebLogin(string userHostAddress, string userName, string pwd)
        {
            Guid token;

            using (var proxy = new RedisProxy(RedisProxy.DbAuthority))
            {
                var tk = DataKeyBuilder.ToKey("login", userName, "token");
                token = proxy.GetValue <Guid>(tk);
                if (token == Guid.Empty)
                {
                    token = Guid.NewGuid();
                    proxy.SetValue(tk, token);
                }
                proxy.Set(DataKeyBuilder.ToKey("login", token), new LoginToken
                {
                    UserId        = 1,
                    Address       = userHostAddress == "::1" ? "127.0.0.1" : userHostAddress,
                    Token         = token,
                    LoginDateTime = DateTime.Now,
                    LastDateTime  = DateTime.Now,
                    TimeOut       = DateTime.Now.AddMinutes(30)
                });
            }
            BusinessContext.Current.Tooken = token;
            BusinessContext.Current.PowerChecker.ReloadLoginUserInfo(token);
            return(token);
        }
示例#10
0
 /// <summary>
 ///     载入角色菜单
 /// </summary>
 public static List <EasyUiTreeNode> LoadRoleMenu()
 {
     using (var proxy = new RedisProxy(RedisProxy.DbSystem))
     {
         return(proxy.Get <List <EasyUiTreeNode> >(DataKeyBuilder.ToKey("auth", "menu", 0)) ?? CreateMenu(proxy));
     }
 }
示例#11
0
        public void DataKey_Equality_Integers()
        {
            DataKey key  = new DataKeyBuilder().Add(1, "abc", 123).Build();
            DataKey key2 = new DataKeyBuilder().Add(1, "abc", 123).Build();

            Assert.AreEqual(key.GetHashCode(), key2.GetHashCode());
            Assert.IsTrue(key.Equals(key2));
        }
示例#12
0
        public void DataKey_Equality_DespiteSameOrderValueAndOrderOfAdding()
        {
            DataKey key = new DataKeyBuilder()
                          .Add(1, "abc", 123).Add(1, "xyz", 789).Build();
            DataKey key2 = new DataKeyBuilder()
                           .Add(1, "xyz", 789).Add(1, "abc", 123).Build();

            Assert.IsTrue(key.Equals(key2));
        }
示例#13
0
        public void DataKey_Equality_DespiteDifferentKeyNames()
        {
            DataKey key = new DataKeyBuilder()
                          .Add(1, "abc", 123).Build();
            DataKey key2 = new DataKeyBuilder()
                           .Add(1, "ab", 123).Build();

            Assert.IsTrue(key.Equals(key2));
        }
        public DataKey GenerateKey(IEvidenceKeyFilter filter, Dictionary <string, object> evidence)
        {
            DataKeyBuilder result = new DataKeyBuilder();

            foreach (var entry in evidence)
            {
                if (filter.Include(entry.Key))
                {
                    result.Add(100, entry.Key, entry.Value);
                }
            }
            return(result.Build());
        }
示例#15
0
        /// <summary>
        ///     如果没有缓存过这些对象,就缓存它
        /// </summary>
        /// <param name="lambda">查询表达式</param>
        /// <param name="keyFunc">设置键的方法,可为空</param>
        /// <returns>数据</returns>
        public void TryCacheData <TData, TDataAccess, TDatabase>(Expression <Func <TData, bool> > lambda, Func <TData, string> keyFunc = null)
            where TDataAccess : MySqlTable <TData, TDatabase>, new()
            where TData : EditDataObject, IIdentityData, new()
            where TDatabase : MySqlDataBase
        {
            var key  = DataKeyBuilder.DataKey <TData>(0);
            var date = GetValue <DateTime>(key);

            if (date == DateTime.MinValue)
            {
                CacheData <TData, TDataAccess, TDatabase>(lambda, keyFunc);
            }
        }
 /// <summary>
 ///     读取用户的查询历史
 /// </summary>
 /// <param name="userId">用户</param>
 /// <param name="pageId">关联页面</param>
 /// <returns>返回的是参数字典的JSON格式的文本</returns>
 public static string LoadQueryHistory(long userId, long pageId)
 {
     if (userId == 0 || pageId == 0)
     {
         return("{'page': 0,'order':'asc','size':20}");
     }
     using (var proxy = new RedisProxy(RedisProxy.DbSystem))
     {
         var key = DataKeyBuilder.ToKey("qh", pageId, userId);
         return(proxy.Get(key) ?? "{'page': 0,'order':'asc','size':20}");
     }
     //PageDataDataAccess pdAccess = new PageDataDataAccess();
     //return pdAccess.LoadValue(p => p.PageData, p => p.PageId == page.ID && p.UserId == loginUser.Id);
 }
示例#17
0
        public void DataKey_Equality_ReferenceTypeNoMatch()
        {
            DataKey key = new DataKeyBuilder()
                          .Add(1, "abc", new EqualityTest()
            {
                Value = "123"
            }).Build();
            DataKey key2 = new DataKeyBuilder()
                           .Add(1, "abc", new EqualityTest()
            {
                Value = "12"
            }).Build();

            Assert.IsFalse(key.Equals(key2));
        }
示例#18
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="userHostAddress"></param>
        /// <param name="userName">用户名</param>
        /// <param name="pwd">密码</param>
        /// <returns></returns>
        public static Guid WebLogin(string userHostAddress, string userName, string pwd)
        {
            if (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(pwd))
            {
                LogRecorder.RecordLoginLog($@"用户名({userName})或密码{pwd}为空,来自{userHostAddress}");
                return(Guid.Empty);
            }
            Guid token;
            int  uid;

            using (var proxy = new RedisProxy(RedisProxy.DbSystem))
            {
                var pwd2 = proxy.Get(DataKeyBuilder.ToKey("user", userName, "pwd"));
                if (pwd2 == null || !string.Equals(pwd, pwd2))
                {
                    LogRecorder.RecordLoginLog($@"{userName}密码不对{pwd2}-[测试]{pwd},来自{userHostAddress}");
                    return(Guid.Empty);
                }
                uid = proxy.GetValue <int>(DataKeyBuilder.ToKey("user", userName, "id"));
                if (uid == 0)
                {
                    LogRecorder.RecordLoginLog($@"{userName}用户不存在,来自{userHostAddress}");
                    return(Guid.Empty);
                }
            }
            using (var proxy = new RedisProxy(RedisProxy.DbAuthority))
            {
                var tk = DataKeyBuilder.ToKey("login", userName, "token");
                token = proxy.GetValue <Guid>(tk);
                if (token == Guid.Empty)
                {
                    token = Guid.NewGuid();
                    proxy.SetValue(tk, token);
                }
                proxy.Set(DataKeyBuilder.ToKey("login", token), new LoginToken
                {
                    UserId        = uid,
                    Address       = userHostAddress == "::1" ? "127.0.0.1" : userHostAddress,
                    Token         = token,
                    LoginDateTime = DateTime.Now,
                    LastDateTime  = DateTime.Now,
                    TimeOut       = DateTime.Now.AddMinutes(30)
                });
            }
            BusinessContext.Current.Tooken = token;
            BusinessContext.Current.PowerChecker.ReloadLoginUserInfo(token);
            return(token);
        }
示例#19
0
        public void DataKey_Equality_ReferenceType()
        {
            DataKey key = new DataKeyBuilder()
                          .Add(1, "abc", new EqualityTest()
            {
                Value = "123"
            }).Build();
            DataKey key2 = new DataKeyBuilder()
                           .Add(1, "abc", new EqualityTest()
            {
                Value = "123"
            }).Build();

            Assert.AreEqual(key.GetHashCode(), key2.GetHashCode());
            Assert.IsTrue(key.Equals(key2));
        }
示例#20
0
 /// <summary>
 ///     载入用户
 /// </summary>
 /// <returns></returns>
 public static bool Logout(string userHostAddress, Guid token)
 {
     using (var proxy = new RedisProxy(RedisProxy.DbAuthority))
     {
         var ik   = DataKeyBuilder.ToKey("login", token);
         var info = proxy.Get(ik);
         if (info == null)
         {
             return(true);
         }
         var strs = info.Split(',');
         var ip   = strs[1];
         if (ip != userHostAddress)
         {
             return(false);
         }
         proxy.Client.Remove(ik);
     }
     return(true);
 }
示例#21
0
        /// <summary>
        ///     缓存这些对象
        /// </summary>
        /// <returns>数据</returns>
        public void RefreshCache <TData, TDataAccess>(long id, Func <TData, bool> lambda = null)
            where TDataAccess : MySqlTable <TData, MySqlDataBase>, new()
            where TData : EditDataObject, IIdentityData, new()
        {
            if (id <= 0)
            {
                return;
            }
            var access = new TDataAccess();
            var data   = access.LoadByPrimaryKey(id);

            if (data != null && (lambda == null || lambda(data)))
            {
                Set(DataKeyBuilder.DataKey(data), data);
            }
            else
            {
                Redis.RemoveKey(DataKeyBuilder.DataKey <TData>(id));
            }
        }
示例#22
0
 private static int CheckToken(string userHostAddress, Guid token)
 {
     using (var proxy = new RedisProxy(RedisProxy.DbAuthority))
     {
         var ik   = DataKeyBuilder.ToKey("login", token);
         var info = proxy.TryGet <LoginToken>(ik);
         if (info == null || info.TimeOut <= DateTime.Now)
         {
             LogRecorder.RecordLoginLog("令牌{0}过期", token);
             return(0);
         }
         if (info.Address != userHostAddress)
         {
             LogRecorder.RecordLoginLog("IP【{0}】-【{1}】不相同", userHostAddress, info.Address);
         }
         info.TimeOut      = DateTime.Now.AddMinutes(30);
         info.LastDateTime = DateTime.Now;
         proxy.Set(ik, info);
         return(info.UserId);
     }
 }
示例#23
0
        /// <summary>
        ///     生成角色菜单
        /// </summary>
        static List <EasyUiTreeNode> CreateMenu(RedisProxy proxy)
        {
            var root = new EasyUiTreeNode
            {
                ID       = 0,
                IsOpen   = true,
                Text     = ConfigurationManager.AppSettings["ProjectName"],
                IsFolder = true
            };
            var access = new PageItemDataAccess();
            var pages  = access.All(p => p.ItemType <= PageItemType.Page);

            foreach (var folder in pages.Where(p => p.ItemType == PageItemType.Root).OrderBy(p => p.Index))
            {
                var node = new EasyUiTreeNode
                {
                    IsOpen     = true,
                    Text       = folder.Caption,
                    Icon       = "icon-item",
                    Attributes = "home.aspx",
                    Tag        = folder.ExtendValue,
                    IsFolder   = true
                };
                foreach (var page in pages.Where(p => p.ParentId == folder.Id && p.ItemType <= PageItemType.Page).OrderBy(p => p.Index))
                {
                    CreateRoleMenu(node, pages, page);
                }
                if (node.HaseChildren)
                {
                    root.Children.Add(node);
                }
            }
            var result = root.Children.OrderByDescending(p => p.ID).ToList( );

            proxy.Set(DataKeyBuilder.ToKey("auth", "menu", 0), result);
            return(result);
        }
示例#24
0
 /// <summary>
 /// 缓存数据
 /// </summary>
 /// <typeparam name="TData"></typeparam>
 /// <param name="data">键的组合</param>
 /// <returns></returns>
 public Task SetEntity <TData>(TData data) where TData : class, IIdentityData
 {
     return(Set(DataKeyBuilder.DataKey(data), data));
 }
示例#25
0
 /// <summary>
 ///     缓存这些对象
 /// </summary>
 /// <returns>数据</returns>
 public void ClearCache <TData>()
 {
     FindAndRemoveKey(DataKeyBuilder.DataKey <TData>("*"));
 }
示例#26
0
        public void DataKey_NullValue_GetHashCode()
        {
            DataKey key = new DataKeyBuilder().Add(1, "abc", null).Build();

            key.GetHashCode();
        }
示例#27
0
 /// <summary>
 /// 读缓存
 /// </summary>
 /// <typeparam name="TData"></typeparam>
 /// <param name="id">键的组合</param>
 /// <param name="def">默认值</param>
 /// <returns></returns>
 public TData GetEntity <TData>(long id, TData def = null) where TData : class, new()
 {
     return(id == 0 ? def ?? new TData() : Get <TData>(DataKeyBuilder.DataKey <TData>(id)) ?? def ?? new TData());
 }
示例#28
0
 /// <summary>
 /// 缓存数据
 /// </summary>
 /// <typeparam name="TData"></typeparam>
 /// <param name="data">键的组合</param>
 /// <returns></returns>
 public void SetEntity <TData>(TData data) where TData : class, IIdentityData
 {
     Set(DataKeyBuilder.DataKey(data), data);
 }
示例#29
0
 /// <summary>
 /// 生成用户相关的数据键
 /// </summary>
 /// <param name="args"></param>
 /// <returns></returns>
 public static string BuildDataKey(params object[] args)
 {
     return(DataKeyBuilder.ToKey("user", args));
 }
示例#30
0
 /// <summary>
 ///     缓存这些对象
 /// </summary>
 /// <returns>数据</returns>
 public Task RemoveCache <TData>(long id)
 {
     return(id > 0 ? Client.DelAsync(DataKeyBuilder.DataKey <TData>(id)) : Task.CompletedTask);
 }