/// <summary>
        /// Gets the request token.
        /// </summary>
        /// <returns></returns>
        public static OAuthTokenResponse GetRequestToken()
        {
            string callbackAddress = Config.EasyTwitterConfigHelper.GetCallBackUrl;
            WebRequestBuilder builder = new WebRequestBuilder(
                new Uri("https://api.twitter.com/oauth/request_token"),
                HTTPVerb.POST,
                new OAuthTokens());

            if (!string.IsNullOrEmpty(callbackAddress))
            {
                builder.Parameters.Add("oauth_callback", callbackAddress);
            }

            string responseBody = null;

            try
            {
                HttpWebResponse webResponse = builder.ExecuteRequest();
                Stream responseStream = webResponse.GetResponseStream();
                if (responseStream != null) responseBody = new StreamReader(responseStream).ReadToEnd();
            }
            catch (WebException wex)
            {
                throw new ApplicationException(wex.Message, wex);
            }

            return new OAuthTokenResponse
            {
                Token = ParseQuerystringParameter("oauth_token", responseBody),
                TokenSecret = ParseQuerystringParameter("oauth_token_secret", responseBody),
                VerificationString = ParseQuerystringParameter("oauth_verifier", responseBody)
            };
        }
        /// <summary>
        /// Gets the access token.
        /// </summary>
        /// <param name="requestToken">The request token.</param>
        /// <param name="verifier">The pin number or verifier string.</param>
        /// <returns></returns>
        public static OAuthTokenResponse GetAccessToken(string requestToken, string verifier)
        {
            string denied = String.Empty;
            if (String.IsNullOrEmpty(requestToken) && String.IsNullOrEmpty(verifier))
            {
                //this is only for web...
                requestToken = System.Web.HttpContext.Current.Request.QueryString["oauth_token"] as string;
                verifier = System.Web.HttpContext.Current.Request.QueryString["oauth_verifier"] as string;
                denied = System.Web.HttpContext.Current.Request.QueryString["denied"] as string ?? String.Empty;
            }

            if (String.IsNullOrEmpty(requestToken) || String.IsNullOrEmpty(verifier))
                throw new ArgumentNullException("You need to prove the request token and the verifier code");

            WebRequestBuilder builder = new WebRequestBuilder(
                new Uri("https://api.twitter.com/oauth/access_token"),
                HTTPVerb.GET,
                new OAuthTokens());

            if (!string.IsNullOrEmpty(verifier))
            {
                builder.Parameters.Add("oauth_verifier", verifier);
            }

            builder.Parameters.Add("oauth_token", requestToken);

            string responseBody;

            try
            {
                if (!String.IsNullOrEmpty(denied))
                    throw new ApplicationException("User didn't log in ");

                HttpWebResponse webResponse = builder.ExecuteRequest();

                responseBody = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
            }
            catch (ApplicationException aex)
            {
                return null;
            }
            catch (WebException wex)
            {
                throw new ApplicationException(wex.Message, wex);
            }

            OAuthTokenResponse response = new OAuthTokenResponse();
            response.Token = Regex.Match(responseBody, @"oauth_token=([^&]+)").Groups[1].Value;
            response.TokenSecret = Regex.Match(responseBody, @"oauth_token_secret=([^&]+)").Groups[1].Value;
            response.UserId = long.Parse(Regex.Match(responseBody, @"user_id=([^&]+)").Groups[1].Value, CultureInfo.CurrentCulture);
            response.ScreenName = Regex.Match(responseBody, @"screen_name=([^&]+)").Groups[1].Value;
            return response;
        }