Created
December 27, 2016 08:20
-
-
Save mdmsua/5793661e1f4c5ee420f6b5c68e235369 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class oAuthTwitter : OAuthBase | |
{ | |
public enum Method { GET, POST }; | |
public const string REQUEST_TOKEN = "http://twitter.com/oauth/request_token"; | |
public const string AUTHORIZE = "http://twitter.com/oauth/authorize"; | |
public const string ACCESS_TOKEN = "http://twitter.com/oauth/access_token"; | |
public const string XAUTH_ACCESS_TOKEN = "https://api.twitter.com/oauth/access_token"; | |
private string _consumerKey = ""; | |
private string _consumerSecret = ""; | |
private string _token = ""; | |
private string _tokenSecret = ""; | |
private string _verifier = ""; | |
private string _xAuthUsername = ""; | |
private string _xAuthPassword = ""; | |
#region Properties | |
public string ConsumerKey | |
{ | |
get | |
{ | |
if (_consumerKey.Length == 0) | |
{ | |
_consumerKey = ConfigurationManager.AppSettings["consumerKey"]; | |
} | |
return _consumerKey; | |
} | |
set { _consumerKey = value; } | |
} | |
public string ConsumerSecret { | |
get { | |
if (_consumerSecret.Length == 0) | |
{ | |
_consumerSecret = ConfigurationManager.AppSettings["consumerSecret"]; | |
} | |
return _consumerSecret; | |
} | |
set { _consumerSecret = value; } | |
} | |
public string Token { get { return _token; } set { _token = value; } } | |
public string TokenSecret { get { return _tokenSecret; } set { _tokenSecret = value; } } | |
public string Verifier { get { return _verifier; } set { _verifier = value; } } | |
public string xAuthUsername { get { return _xAuthUsername; } set { _xAuthUsername = value; } } | |
public string xAuthPassword { get { return _xAuthPassword; } set { _xAuthPassword = value; } } | |
#endregion | |
/// <summary> | |
/// Get the link to Twitter's authorization page for this application. | |
/// </summary> | |
/// <returns>The url with a valid request token, or a null string.</returns> | |
public string AuthorizationLinkGet() | |
{ | |
string ret = null; | |
string response = oAuthWebRequest(Method.GET, REQUEST_TOKEN, String.Empty); | |
if (response.Length > 0) | |
{ | |
//response contains token and token secret. We only need the token. | |
NameValueCollection qs = HttpUtility.ParseQueryString(response); | |
if (qs["oauth_token"] != null) | |
{ | |
ret = AUTHORIZE + "?oauth_token=" + qs["oauth_token"]; | |
} | |
} | |
return ret; | |
} | |
/// <summary> | |
/// Exchange the request token for an access token. | |
/// </summary> | |
/// <param name="authToken">The oauth_token is supplied by Twitter's authorization page following the callback.</param> | |
public void AccessTokenGet(string authToken, string verifier) | |
{ | |
this.Token = authToken; | |
this.Verifier = verifier; | |
string response = oAuthWebRequest(Method.GET, ACCESS_TOKEN, String.Empty); | |
if (response.Length > 0) | |
{ | |
//Store the Token and Token Secret | |
NameValueCollection qs = HttpUtility.ParseQueryString(response); | |
if (qs["oauth_token"] != null) | |
{ | |
this.Token = qs["oauth_token"]; | |
} | |
if (qs["oauth_token_secret"] != null) | |
{ | |
this.TokenSecret = qs["oauth_token_secret"]; | |
} | |
} | |
} | |
/// <summary> | |
/// Exchange the username and password for an access token. | |
/// </summary> | |
/// <param name="username">Twitter Username.</param> | |
/// <param name="username">Twitter Password.</param> | |
public void xAuthAccessTokenGet(string username, string password) | |
{ | |
this.xAuthUsername = username; | |
this.xAuthPassword = password; | |
string response = oAuthWebRequest(Method.GET, XAUTH_ACCESS_TOKEN, String.Empty); | |
if (response.Length > 0) | |
{ | |
//Store the Token and Token Secret | |
NameValueCollection qs = HttpUtility.ParseQueryString(response); | |
if (qs["oauth_token"] != null) | |
{ | |
this.Token = qs["oauth_token"]; | |
} | |
if (qs["oauth_token_secret"] != null) | |
{ | |
this.TokenSecret = qs["oauth_token_secret"]; | |
} | |
} | |
} | |
/// <summary> | |
/// Submit a web request using oAuth. | |
/// </summary> | |
/// <param name="method">GET or POST</param> | |
/// <param name="url">The full url, including the querystring.</param> | |
/// <param name="postData">Data to post (querystring format)</param> | |
/// <returns>The web server response.</returns> | |
public string oAuthWebRequest(Method method, string url, string postData) | |
{ | |
string outUrl = ""; | |
string querystring = ""; | |
string ret = ""; | |
//Setup postData for signing. | |
//Add the postData to the querystring. | |
if (method == Method.POST) | |
{ | |
if (postData.Length > 0) | |
{ | |
//Decode the parameters and re-encode using the oAuth UrlEncode method. | |
NameValueCollection qs = HttpUtility.ParseQueryString(postData); | |
postData = ""; | |
foreach (string key in qs.AllKeys) | |
{ | |
if (postData.Length > 0) | |
{ | |
postData += "&"; | |
} | |
qs[key] = HttpUtility.UrlDecode(qs[key]); | |
qs[key] = this.UrlEncode(qs[key]); | |
postData += key + "=" + qs[key]; | |
} | |
if (url.IndexOf("?") > 0) | |
{ | |
url += "&"; | |
} | |
else | |
{ | |
url += "?"; | |
} | |
url += postData; | |
} | |
} | |
Uri uri = new Uri(url); | |
string nonce = this.GenerateNonce(); | |
string timeStamp = this.GenerateTimeStamp(); | |
//Generate Signature | |
string sig = this.GenerateSignature(uri, | |
this.ConsumerKey, | |
this.ConsumerSecret, | |
this.Token, | |
this.TokenSecret, | |
this.Verifier, | |
this.xAuthUsername, | |
this.xAuthPassword, | |
method.ToString(), | |
timeStamp, | |
nonce, | |
out outUrl, | |
out querystring); | |
querystring += "&oauth_signature=" + HttpUtility.UrlEncode(sig); | |
//Convert the querystring to postData | |
if (method == Method.POST) | |
{ | |
postData = querystring; | |
querystring = ""; | |
} | |
if (querystring.Length > 0) | |
{ | |
outUrl += "?"; | |
} | |
ret = WebRequest(method, outUrl + querystring, postData); | |
return ret; | |
} | |
/// <summary> | |
/// Web Request Wrapper | |
/// </summary> | |
/// <param name="method">Http Method</param> | |
/// <param name="url">Full url to the web resource</param> | |
/// <param name="postData">Data to post in querystring format</param> | |
/// <returns>The web server response.</returns> | |
public string WebRequest(Method method, string url, string postData) | |
{ | |
HttpWebRequest webRequest = null; | |
StreamWriter requestWriter = null; | |
string responseData = ""; | |
webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest; | |
webRequest.Method = method.ToString(); | |
webRequest.ServicePoint.Expect100Continue = false; | |
//webRequest.UserAgent = "Identify your application please."; | |
//webRequest.Timeout = 20000; | |
if (method == Method.POST) | |
{ | |
webRequest.ContentType = "application/x-www-form-urlencoded"; | |
//POST the data. | |
requestWriter = new StreamWriter(webRequest.GetRequestStream()); | |
try | |
{ | |
requestWriter.Write(postData); | |
} | |
catch | |
{ | |
throw; | |
} | |
finally | |
{ | |
requestWriter.Close(); | |
requestWriter = null; | |
} | |
} | |
responseData = WebResponseGet(webRequest); | |
webRequest = null; | |
return responseData; | |
} | |
/// <summary> | |
/// Process the web response. | |
/// </summary> | |
/// <param name="webRequest">The request object.</param> | |
/// <returns>The response data.</returns> | |
public string WebResponseGet(HttpWebRequest webRequest) | |
{ | |
//StreamReader responseReader = null; | |
//string responseData = ""; | |
StreamReader responseReader; | |
string responseData = string.Empty; | |
try | |
{ | |
var response = webRequest.GetResponse(); | |
if (!response.IsFromCache) | |
{ | |
using (var stream = response.GetResponseStream()) | |
{ | |
using (responseReader = new StreamReader(stream)) | |
{ | |
responseData = responseReader.ReadToEnd(); | |
} | |
} | |
} | |
//responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream()); | |
//responseData = responseReader.ReadToEnd(); | |
} | |
catch | |
{ | |
throw; | |
} | |
finally | |
{ | |
//webRequest.GetResponse().GetResponseStream().Close(); | |
//responseReader.Close(); | |
//responseReader = null; | |
} | |
return responseData; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment