Exemplo n.º 1
0
        public virtual async Task <IActionResult> getLoginToken(UserToken item)
        {
            ApiResult customResult = new ApiResult();

            try
            {
                if (string.IsNullOrEmpty(item.username))
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "The username is empty";
                    return(BadRequest(customResult));
                }
                if (item.timestamp == null)
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "The timestamp is empty";
                    return(BadRequest(customResult));
                }
                if (string.IsNullOrEmpty(item.sign))
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "The sign is empty";
                    return(BadRequest(customResult));
                }
                var datetime1 = DateTimeHelper.ConvertTimestampSeconds(item.timestamp.Value);
                var dateNow   = DateTime.Now;
                if (datetime1 < dateNow.AddMinutes(-5) || datetime1 > dateNow.AddMinutes(5))
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "The timestamp over time";
                    return(BadRequest(customResult));
                }

                var users = await _context.Set <SysUser>().Where(a => a.Name == item.username).ToArrayAsync();

                if (users == null || users.Length == 0)
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "username does not exist";
                    return(BadRequest(customResult));
                }
                if (users.Length > 1)
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "username repetition";
                    return(BadRequest(customResult));
                }
                var authInfo = users.First();
                if ((item.username + authInfo.Password + item.timestamp).MD5Encrypt() != item.sign)
                {
                    customResult.resultCode = ResultCodeEnum.InvalidParameter;
                    customResult.resultBody = "sign verification failed";
                    return(BadRequest(customResult));
                }
                var tokenkey = await CacheHelper.GetUserTokenkeyAsync(_cache, authInfo.Id.ToString());

                var token = await CacheHelper.GetTokenAsync(_cache, tokenkey);

                UserToken userToken = null;
                var       AESKey    = _httpOptions.TokenKey;
                if (string.IsNullOrEmpty(token))
                {
                    userToken = new UserToken()
                    {
                        userid    = authInfo.Id,
                        username  = authInfo.Name,
                        timestamp = DateTimeHelper.GetTimeStampSeconds(),
                    };
                    tokenkey = userToken.tokenkey = userToken.ToString().MD5Encrypt();

                    token = userToken.ToString().AesEncrypt(AESKey);
                }
                else
                {
                    userToken = UserToken.Parse(token.AesDecrypt(AESKey));
                }

                //缓存信息

                await CacheHelper.SetTokenAsync(_cache, tokenkey, token, _httpOptions.GetDistributedCacheEntryOptions());

                await CacheHelper.SetUserTokenkeyAsync(_cache, userToken.userid.ToString(), tokenkey, _httpOptions.GetDistributedCacheEntryOptions());

                customResult.resultCode = 0;
                customResult.resultBody = new { tokenkey = tokenkey, userid = userToken.userid, username = item.username };

                var httpContext = _httpContextAccessor.HttpContext;
                httpContext.Response.Headers[_httpOptions.TokenName] = tokenkey;
                httpContext.Request.Headers[_httpOptions.TokenName]  = tokenkey;



                return(Ok(customResult));
            }
            catch (Exception ex)
            {
                customResult.resultCode = ResultCodeEnum.Exception;
                customResult.resultBody = ex.ToString();
                return(BadRequest(customResult));
            }
        }
Exemplo n.º 2
0
        public virtual async Task <IActionResult> getEntitys()
        {
            ApiResult customResult = new ApiResult();

            try
            {
                var httpContext = _httpContextAccessor.HttpContext;
                var userToken   = httpContext.getUserToken();
                var jsonStr     = await _cache.GetStringAsync("EntityBaseChildTypePropertyInfos" + userToken?.userid);

                if (string.IsNullOrEmpty(jsonStr))
                {
                    var childTypePropertyInfos = ClassHelper.GetChildTypePropertyInfos(typeof(EntityBase));
                    var result = childTypePropertyInfos.Select(x => new EntityInfo()
                    {
                        Name = x.Key.Name
                        ,
                        PropertyInfos = x.Value?.Select(p => new EntitypPropertyInfo()
                        {
                            Name = p.Name
                            ,
                            TypeName = p.PropertyType.HasImplementedRawGeneric(typeof(Nullable <>))? p.PropertyType.GetGenericArguments()[0].Name:  p.PropertyType.Name
                        })
                    });
                    customResult.resultBody = result;
                    await _cache.SetAsync("EntityBaseChildTypePropertyInfos" + userToken?.userid, DataHelper.StringToBytes(JsonConvert.SerializeObject(result)), _httpOptions.GetDistributedCacheEntryOptions());
                }
                else
                {
                    customResult.resultBody = JsonConvert.DeserializeObject <IEnumerable <EntityInfo> >(jsonStr);
                }

                customResult.resultCode = 0;



                return(Ok(customResult));
            }
            catch (Exception ex)
            {
                customResult.resultCode = ResultCodeEnum.Exception;
                customResult.resultBody = ex.ToString();
                return(BadRequest(customResult));
            }
        }