/// <summary>
 /// Authenticates this <see cref="Budgie.TwitterClient"/> with an already-known OAuth access token and token_secret.
 /// </summary>
 /// <param name="accessToken">An OAuth access token.</param>
 /// <param name="accessTokenSecret">An OAuth access token_secret.</param>
 /// <returns>An instance of <see cref="Budgie.TwitterClient.TwitterAccessToken"/> with the supplied values.</returns>
 public TwitterAccessToken Authenticate(string accessToken, string accessTokenSecret)
 {
     m_accessToken = new TwitterAccessToken
     {
         Token  = accessToken,
         Secret = accessTokenSecret,
     };
     return(m_accessToken);
 }
        /// <summary>
        /// Authenticates this <see cref="Budgie.TwitterClient"/> by requesting an OAuth access token and token_secret from Twitter.
        /// </summary>
        /// <param name="requestToken">An OAuth request token.</param>
        /// <param name="verifier">A verification PIN obtained by the user from Twitter.</param>
        /// <returns>An instance of <see cref="TwitterAccessToken"/> with the tokens returned from Twitter.</returns>
        public Task <TwitterAccessToken> AuthenticateAsync(TwitterRequestToken requestToken, string verifier)
        {
            return(HttpPostAsync("/oauth/access_token", "oauth_verifier=" + verifier, requestToken).ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    return null;
                }

                var response = t.Result as HttpWebResponse;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return null;
                }

                string responseString = response.GetContentString();
                if (responseString.IsNullOrWhiteSpace())
                {
                    return null;
                }

                var result = new TwitterAccessToken();
                foreach (var i in responseString.Split('&'))
                {
                    var kv = i.Split('=');
                    if (kv.Length < 2)
                    {
                        continue;
                    }

                    if (kv[0] == "oauth_token")
                    {
                        result.Token = kv[1];
                    }
                    else if (kv[0] == "oauth_token_secret")
                    {
                        result.Secret = kv[1];
                    }
                    else if (kv[0] == "user_id")
                    {
                        result.UserId = kv[1];
                    }
                    else if (kv[0] == "screen_name")
                    {
                        result.ScreenName = kv[1];
                    }
                }

                if (!result.IsValid)
                {
                    return null;
                }

                return (m_accessToken = result);
            }));
        }