예제 #1
0
        public bool Logout(HttpActionContext actionContext, CommonParam param)
        {
            bool result = false;

            try
            {
                var headers = actionContext.ControllerContext.Request.Headers;
                if (headers.Contains(HttpHeaderConstant.TOKEN_PARAM))
                {
                    string    tokenCode = headers.GetValues(HttpHeaderConstant.TOKEN_PARAM).FirstOrDefault();
                    string    address   = this.GetAddress(actionContext);
                    TokenData tokenData = this.GetTokenDataByCodeAndAddress(tokenCode, address);

                    if (tokenData == null || String.IsNullOrWhiteSpace(tokenData.TokenCode))
                    {
                        return(false);
                    }
                    result = TokenStore.RemoveTokenData(tokenData.TokenCode);
                    if (result)
                    {
                        this._DeleteAllCredentialData(tokenData.TokenCode, param);
                    }
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error(ex);
            }
            return(result);
        }
예제 #2
0
        public bool SetTokenDataAlive(string tokenCode)
        {
            bool result = false;

            try
            {
                ExtTokenData tokenData = TokenStore.GetTokenData(tokenCode);
                if (tokenData != null)
                {
                    tokenData.LastAccessTime = DateTime.Now;
                    result = true;
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error(ex);
            }
            return(result);
        }
예제 #3
0
        public TokenData GetAuthenticatedByAddress(HttpActionContext actionContext, CommonParam param)
        {
            TokenData result = null;

            try
            {
                var headers = actionContext.ControllerContext.Request.Headers;
                if (headers.Contains(HttpHeaderConstant.TOKEN_PARAM) && headers.Contains(HttpHeaderConstant.ADDRESS_PARAM))
                {
                    string tokenCode = headers.GetValues(HttpHeaderConstant.TOKEN_PARAM).FirstOrDefault();
                    string address   = headers.GetValues(HttpHeaderConstant.ADDRESS_PARAM).FirstOrDefault();

                    if (String.IsNullOrWhiteSpace(tokenCode) || String.IsNullOrWhiteSpace(address))
                    {
                        return(null);
                    }

                    ExtTokenData tokenData = this.GetTokenDataByCodeAndAddress(tokenCode, address);
                    if (tokenData != null && tokenData.User != null && !String.IsNullOrWhiteSpace(tokenData.ValidAddress))
                    {
                        List <string> validAddress = Regex.Split(tokenData.ValidAddress, Config.ADDRESS_SEPARATOR).ToList();
                        if (tokenData.ExpireTime < DateTime.Now)
                        {
                            return(null);
                        }
                        string backendAddress = this.GetAddress(actionContext);
                        if (!validAddress.Contains(backendAddress))
                        {
                            validAddress.Add(backendAddress);
                            tokenData.ValidAddress = string.Join(Config.ADDRESS_SEPARATOR, validAddress);
                            TokenStore.AddTokenData(tokenData);
                        }
                        Mapper.CreateMap <ExtTokenData, TokenData>();
                        result = Mapper.Map <TokenData>(tokenData);
                    }
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error(ex);
            }
            return(result);
        }
예제 #4
0
        private TokenData CreateTokenData(HttpActionContext actionContext, CommonParam param, UserData userData, string machineName)
        {
            ExtTokenData result = new ExtTokenData();

            result.LoginTime      = DateTime.Now;
            result.ExpireTime     = result.LoginTime.AddMinutes(Config.TOKEN_TIMEOUT);
            result.LoginAddress   = this.GetAddress(actionContext);
            result.ValidAddress   = result.LoginAddress;
            result.LastAccessTime = DateTime.Now;
            result.MachineName    = machineName;
            result.TokenCode      = this.GenerateTokenCode(userData.Loginname, result.LoginAddress);
            result.User           = userData;

            if (TokenStore.AddTokenData(result))
            {
                return(result);
            }

            return(null);
        }
예제 #5
0
        private ExtTokenData GetTokenDataByCodeAndAddress(string tokenCode, string address)
        {
            ExtTokenData result = null;

            if (!String.IsNullOrWhiteSpace(tokenCode) && !String.IsNullOrWhiteSpace(address))
            {
                ExtTokenData tokenData = TokenStore.GetTokenData(tokenCode);
                if (tokenData != null && tokenData.User != null && !String.IsNullOrWhiteSpace(tokenData.ValidAddress))
                {
                    List <string> validAddress = Regex.Split(tokenData.ValidAddress, Config.ADDRESS_SEPARATOR).ToList();
                    bool          valid        = tokenCode.Equals(tokenData.TokenCode);
                    if (Config.CHECK_ADDRESS.HasValue && Config.CHECK_ADDRESS.Value)
                    {
                        valid = valid && validAddress != null && validAddress.Contains(address);
                    }
                    if (valid)
                    {
                        result = tokenData;
                    }
                }
            }
            return(result);
        }