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()); }
/// <summary> /// 缓存这些对象 /// </summary> /// <returns>数据</returns> public void RemoveCache <TData>(long id) { if (id > 0) { Client.Del(DataKeyBuilder.DataKey <TData>(id)); } }
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)); }
/// <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); }
/// <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))); } }
/// <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) // }); //} }
/// <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); }
/// <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)); } }
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)); }
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)); }
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()); }
/// <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); }
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)); }
/// <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); }
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)); }
/// <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); }
/// <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)); } }
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); } }
/// <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); }
/// <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)); }
/// <summary> /// 缓存这些对象 /// </summary> /// <returns>数据</returns> public void ClearCache <TData>() { FindAndRemoveKey(DataKeyBuilder.DataKey <TData>("*")); }
public void DataKey_NullValue_GetHashCode() { DataKey key = new DataKeyBuilder().Add(1, "abc", null).Build(); key.GetHashCode(); }
/// <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()); }
/// <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); }
/// <summary> /// 生成用户相关的数据键 /// </summary> /// <param name="args"></param> /// <returns></returns> public static string BuildDataKey(params object[] args) { return(DataKeyBuilder.ToKey("user", args)); }
/// <summary> /// 缓存这些对象 /// </summary> /// <returns>数据</returns> public Task RemoveCache <TData>(long id) { return(id > 0 ? Client.DelAsync(DataKeyBuilder.DataKey <TData>(id)) : Task.CompletedTask); }