/// <summary> /// Allows OAuth applications to directly exchange Twitter usernames and passwords for OAuth access tokens and secrets. /// </summary> /// <param name="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="username">The username.</param> /// <param name="password">The password.</param> /// <returns>A <see cref="OAuthTokenResponse"/> instance.</returns> public static async Task <OAuthTokenResponse> AccessTokensAsync(string consumerKey, string consumerSecret, string username, string password) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(username)) { throw new ArgumentNullException("username"); } if (string.IsNullOrEmpty(password)) { throw new ArgumentNullException("password"); } OAuthTokenResponse response = new OAuthTokenResponse(); try { WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/access_token"), HttpMethod.Post, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); builder.Parameters.Add("x_auth_username", username); builder.Parameters.Add("x_auth_password", password); builder.Parameters.Add("x_auth_mode", "client_auth"); HttpResponseMessage httpresponse = await builder.ExecuteRequestAsync(); string responseBody = await httpresponse.Content.ReadAsStringAsync(); response.Token = Regex.Match(responseBody, @"oauth_token=([^&]+)").Groups[1].Value; response.TokenSecret = Regex.Match(responseBody, @"oauth_token_secret=([^&]+)").Groups[1].Value; if (responseBody.Contains("user_id=")) { response.UserId = long.Parse(Regex.Match(responseBody, @"user_id=([^&]+)").Groups[1].Value, CultureInfo.CurrentCulture); } response.ScreenName = Regex.Match(responseBody, @"screen_name=([^&]+)").Groups[1].Value; } catch (WebException wex) { throw new TwitterizerException(wex.Message, wex); } return(response); }
/// <summary> /// Gets the request token. /// </summary> /// <param name="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="callbackAddress">The callback address. For PIN-based authentication "oob" should be supplied.</param> /// <returns></returns> public static async Task <OAuthTokenResponse> RequestTokenAsync(string consumerKey, string consumerSecret, string callbackAddress) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(callbackAddress)) { throw new ArgumentNullException("callbackAddress", @"You must always provide a callback url when obtaining a request token. For PIN-based authentication, use ""oob"" as the callback url."); } WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/request_token"), HttpMethod.Post, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); if (!string.IsNullOrEmpty(callbackAddress)) { builder.Parameters.Add("oauth_callback", callbackAddress); } string responseBody = null; try { HttpResponseMessage webResponse = await builder.ExecuteRequestAsync(); Stream responseStream = await webResponse.Content.ReadAsStreamAsync(); if (responseStream != null) { responseBody = new StreamReader(responseStream).ReadToEnd(); } } catch (WebException wex) { throw new TwitterizerException(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="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="requestToken">The request token.</param> /// <param name="verifier">The pin number or verifier string.</param> /// <returns> /// An <see cref="OAuthTokenResponse"/> class containing access token information. /// </returns> public static async Task <OAuthTokenResponse> AccessTokenAsync(string consumerKey, string consumerSecret, string requestToken, string verifier) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(requestToken)) { throw new ArgumentNullException("requestToken"); } WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/access_token"), HttpMethod.Get, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); if (!string.IsNullOrEmpty(verifier)) { builder.Parameters.Add("oauth_verifier", verifier); } builder.Parameters.Add("oauth_token", requestToken); string responseBody; try { HttpResponseMessage webResponse = await builder.ExecuteRequestAsync(); responseBody = await webResponse.Content.ReadAsStringAsync(); } catch (WebException wex) { throw new TwitterizerException(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); }
/// <summary> /// Gets the access token. /// </summary> /// <param name="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="requestToken">The request token.</param> /// <param name="verifier">The pin number or verifier string.</param> /// <returns> /// An <see cref="OAuthTokenResponse"/> class containing access token information. /// </returns> public static async Task<OAuthTokenResponse> AccessTokenAsync(string consumerKey, string consumerSecret, string requestToken, string verifier) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(requestToken)) { throw new ArgumentNullException("requestToken"); } WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/access_token"), HttpMethod.Get, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); if (!string.IsNullOrEmpty(verifier)) { builder.Parameters.Add("oauth_verifier", verifier); } builder.Parameters.Add("oauth_token", requestToken); string responseBody; try { HttpResponseMessage webResponse = await builder.ExecuteRequestAsync(); responseBody = await webResponse.Content.ReadAsStringAsync(); } catch (WebException wex) { throw new TwitterizerException(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; }
/// <summary> /// Gets the request token. /// </summary> /// <param name="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="callbackAddress">The callback address. For PIN-based authentication "oob" should be supplied.</param> /// <returns></returns> public static async Task<OAuthTokenResponse> RequestTokenAsync(string consumerKey, string consumerSecret, string callbackAddress) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(callbackAddress)) { throw new ArgumentNullException("callbackAddress", @"You must always provide a callback url when obtaining a request token. For PIN-based authentication, use ""oob"" as the callback url."); } WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/request_token"), HttpMethod.Post, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); if (!string.IsNullOrEmpty(callbackAddress)) { builder.Parameters.Add("oauth_callback", callbackAddress); } string responseBody = null; try { HttpResponseMessage webResponse = await builder.ExecuteRequestAsync(); Stream responseStream = await webResponse.Content.ReadAsStreamAsync(); if (responseStream != null) responseBody = new StreamReader(responseStream).ReadToEnd(); } catch (WebException wex) { throw new TwitterizerException(wex.Message, wex); } return new OAuthTokenResponse { Token = ParseQuerystringParameter("oauth_token", responseBody), TokenSecret = ParseQuerystringParameter("oauth_token_secret", responseBody), VerificationString = ParseQuerystringParameter("oauth_verifier", responseBody) }; }
/// <summary> /// Allows OAuth applications to directly exchange Twitter usernames and passwords for OAuth access tokens and secrets. /// </summary> /// <param name="consumerKey">The consumer key.</param> /// <param name="consumerSecret">The consumer secret.</param> /// <param name="username">The username.</param> /// <param name="password">The password.</param> /// <returns>A <see cref="OAuthTokenResponse"/> instance.</returns> public static async Task<OAuthTokenResponse> AccessTokensAsync(string consumerKey, string consumerSecret, string username, string password) { if (string.IsNullOrEmpty(consumerKey)) { throw new ArgumentNullException("consumerKey"); } if (string.IsNullOrEmpty(consumerSecret)) { throw new ArgumentNullException("consumerSecret"); } if (string.IsNullOrEmpty(username)) { throw new ArgumentNullException("username"); } if (string.IsNullOrEmpty(password)) { throw new ArgumentNullException("password"); } OAuthTokenResponse response = new OAuthTokenResponse(); try { WebRequestBuilder builder = new WebRequestBuilder( new Uri("https://api.twitter.com/oauth/access_token"), HttpMethod.Post, new OAuthTokens { ConsumerKey = consumerKey, ConsumerSecret = consumerSecret }); builder.Parameters.Add("x_auth_username", username); builder.Parameters.Add("x_auth_password", password); builder.Parameters.Add("x_auth_mode", "client_auth"); HttpResponseMessage httpresponse = await builder.ExecuteRequestAsync(); string responseBody = await httpresponse.Content.ReadAsStringAsync(); response.Token = Regex.Match(responseBody, @"oauth_token=([^&]+)").Groups[1].Value; response.TokenSecret = Regex.Match(responseBody, @"oauth_token_secret=([^&]+)").Groups[1].Value; if (responseBody.Contains("user_id=")) response.UserId = long.Parse(Regex.Match(responseBody, @"user_id=([^&]+)").Groups[1].Value, CultureInfo.CurrentCulture); response.ScreenName = Regex.Match(responseBody, @"screen_name=([^&]+)").Groups[1].Value; } catch (WebException wex) { throw new TwitterizerException(wex.Message, wex); } return response; }