Ejemplo n.º 1
0
        private async Task <bool> CheckAndRenewToken()
        {
            try
            {
                ILoginClient    loginClient    = ServiceLocator.Current.GetInstance <ILoginClient>();
                ITokenContainer tokenContainer = ServiceLocator.Current.GetInstance <ITokenContainer>();
                IConfiguration  config         = ServiceLocator.Current.GetInstance <IConfiguration>();

                if (loginClient == null || tokenContainer == null || config == null)
                {
                    return(false);
                }

                int NumberOfMinutes = 10;

                try
                {
                    IConfiguration miscconfig = config.GetSection("Misc");
                    if (miscconfig != null)
                    {
                        string strNumberOfMinutes = miscconfig.GetSection("TimeoutCheck").Value;
                        if (!int.TryParse(strNumberOfMinutes, out NumberOfMinutes))
                        {
                            NumberOfMinutes = 10;
                        }
                    }
                }
                catch
                {
                    NumberOfMinutes = 10;
                }

                JwtSecurityToken token = new JwtSecurityToken(jwtEncodedString: tokenContainer.ApiToken as string);
                if (token == null)
                {
                    return(false);
                }

                TimeSpan ts = token.ValidTo - DateTime.Now;
                if (ts.Minutes > NumberOfMinutes)
                {
                    return(true);
                }
                else if (ts.Minutes < NumberOfMinutes)
                {
                    TokenResponse response = await loginClient.RenewToken();

                    if (response.StatusIsSuccessful)
                    {
                        tokenContainer.ApiToken = response.Data;
                        return(true);
                    }
                }
            }
            catch
            {
                return(false);
            }


            return(false);
        }