/// <summary> /// Update token by refresh token /// </summary> /// <param name="styles">Flags. See SendStyles enumeration</param> /// <returns></returns> private void UpdateToken(SendStyles styles) { var tokenResponse = GetOAuthTokenByRefreshAsync(Token.RefreshToken); if (styles.HasFlag(SendStyles.VerifyToken) && !VerifyToken(tokenResponse.AccessToken)) { throw new Exception("Token signature is invalid"); } Token = CreateToken(tokenResponse); }
/// <summary> /// Sends request to ESIA /// </summary> /// <param name="method">Http method</param> /// <param name="requestUri">Request uri</param> /// <param name="styles">Flags. See SendStyles enumeration</param> /// <param name="requestParams">Parameters</param> /// <param name="headers">Additional headers</param> /// <returns>Http response</returns> public virtual HttpResponseMessage SendAsync(HttpMethod method, string requestUri, SendStyles styles = SendStyles.Normal, IList <KeyValuePair <string, string> > requestParams = null, IList <KeyValuePair <string, string> > headers = null) { // Token must be set CheckTokenExist(); // If SendStyles.CheckTokenTime flag is set, then check life time of token. // And if SendStyles.RefreshToken flag is set - update token by refresh token DateTime currentTime = DateTime.Now; if (styles.HasFlag(SendStyles.CheckTokenTime) && Token.BeginDate.HasValue && currentTime < Token.BeginDate) { throw new Exception("Token start time has not come"); } if (styles.HasFlag(SendStyles.CheckTokenTime) && Token.EndDate.HasValue && currentTime > Token.EndDate) { if (styles.HasFlag(SendStyles.RefreshToken) && !String.IsNullOrEmpty(Token.RefreshToken)) { UpdateToken(styles); } } // Make request var response = InternalSendAsync(method, requestUri, requestParams, headers); // If SendStyles.RefreshToken flag is set and response status is unauthorized - update token by refresh token // and repeat request if (response.StatusCode == HttpStatusCode.Unauthorized && styles.HasFlag(SendStyles.RefreshToken)) { UpdateToken(styles); response = InternalSendAsync(method, requestUri, requestParams, headers); } return(response); }