PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/Code/Channels/Twitter/TwitterWebRequest.cs

http://github.com/waseems/inbox2_desktop
C# | 158 lines | 119 code | 34 blank | 5 comment | 2 complexity | 56dfd21fda626b051de3047afbad5007 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Web;
  8. using System.Xml.Linq;
  9. using Inbox2.Platform.Channels.Extensions;
  10. using Inbox2.Platform.Channels.Text;
  11. using Inbox2.Platform.Framework.OAuth;
  12. namespace Inbox2.Channels.Twitter
  13. {
  14. public class TwitterWebRequest
  15. {
  16. public static string Put(Uri sourceUri, string data, string consumerKey, string consumerSecret, string token, string tokenSecret)
  17. {
  18. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sourceUri);
  19. request.Method = "PUT";
  20. //request.ContentType = "application/x-www-form-urlencoded";
  21. request.UserAgent = "inbox2";
  22. string authParams = BuildOAuthParams(sourceUri, consumerKey, consumerSecret, token, tokenSecret, null, "PUT");
  23. request.Headers.Add("Authorization", authParams);
  24. byte[] bytes = Encoding.UTF8.GetBytes(data);
  25. request.ContentLength = bytes.Length;
  26. // Write post data to request stream
  27. using (Stream requestStream = request.GetRequestStream())
  28. requestStream.Write(bytes, 0, bytes.Length);
  29. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  30. using (var responseStream = response.GetResponseStream())
  31. return responseStream.ReadString();
  32. }
  33. public static string PerformRequest(Uri sourceUri, string consumerKey, string consumerSecret)
  34. {
  35. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sourceUri);
  36. request.Method = "POST";
  37. request.ContentType = "application/x-www-form-urlencoded";
  38. request.UserAgent = "inbox2";
  39. string authParams = BuildOAuthParams(sourceUri, consumerKey, consumerSecret, null, null, null);
  40. request.Headers.Add("Authorization", authParams);
  41. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  42. using (var responseStream = response.GetResponseStream())
  43. return responseStream.ReadString();
  44. }
  45. public static string PerformRequest(Uri sourceUri, string consumerKey, string consumerSecret, string token, string tokenSecret, string verifier)
  46. {
  47. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sourceUri);
  48. request.Method = "POST";
  49. request.ContentType = "application/x-www-form-urlencoded";
  50. request.UserAgent = "inbox2";
  51. string authParams = BuildOAuthParams(sourceUri, consumerKey, consumerSecret, token, tokenSecret, verifier);
  52. request.Headers.Add("Authorization", authParams);
  53. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  54. using (var responseStream = response.GetResponseStream())
  55. return responseStream.ReadString();
  56. }
  57. public static XDocument PerformRequest(Uri sourceUri, string consumerKey, string consumerSecret, string token, string tokenSecret, byte[] bytes)
  58. {
  59. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sourceUri);
  60. request.Method = "POST";
  61. request.ContentType = "application/x-www-form-urlencoded";
  62. request.UserAgent = "inbox2";
  63. request.Headers.Add("Authorization", BuildOAuthParams(sourceUri, consumerKey, consumerSecret, token, tokenSecret, null));
  64. request.ServicePoint.Expect100Continue = false;
  65. request.ContentLength = bytes.Length;
  66. // Write post data to request stream
  67. using (Stream requestStream = request.GetRequestStream())
  68. requestStream.Write(bytes, 0, bytes.Length);
  69. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  70. using (var responseStream = response.GetResponseStream())
  71. return XDocument.Parse(responseStream.ReadString());
  72. }
  73. public static XDocument PerformRequest(Uri sourceUri, string consumerKey, string consumerSecret, string token, string tokenSecret)
  74. {
  75. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sourceUri);
  76. request.Method = "GET";
  77. request.UserAgent = "inbox2";
  78. string authParams = BuildOAuthParams(sourceUri, consumerKey, consumerSecret, token, tokenSecret, null, "GET");
  79. request.Headers.Add("Authorization", authParams);
  80. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  81. string responseString;
  82. using (var responseStream = response.GetResponseStream())
  83. responseString = responseStream.ReadString();
  84. return XDocument.Parse(responseString);
  85. }
  86. static string BuildOAuthParams(Uri source, string consumerKey, string consumerSecret, string token, string tokenSecret, string verifier)
  87. {
  88. return BuildOAuthParams(source, consumerKey, consumerSecret, token, tokenSecret, verifier, "POST");
  89. }
  90. static string BuildOAuthParams(Uri source, string consumerKey, string consumerSecret, string token, string tokenSecret, string verifier, string httpMethod)
  91. {
  92. OAuthBase oauth = new OAuthBase();
  93. string timeStamp = OAuthBase.GenerateTimeStamp();
  94. string nonce = OAuthBase.GenerateNonce();
  95. // Calling source.Query returns an urlencoded string, but we don't want that since we will use
  96. // oauth.UrlEncode ourselves
  97. var query = HttpUtility.UrlDecode(source.Query.Contains("?") ? source.Query.Remove(0, 1) : source.Query);
  98. var parameters = NameValueParser.GetCollection(query, "&");
  99. parameters.Add("oauth_nonce", nonce);
  100. parameters.Add("oauth_signature_method", "HMAC-SHA1");
  101. parameters.Add("oauth_timestamp", timeStamp);
  102. parameters.Add("oauth_consumer_key", consumerKey);
  103. if (!String.IsNullOrEmpty(token))
  104. parameters.Add("oauth_token", token);
  105. if (!String.IsNullOrEmpty(verifier))
  106. parameters.Add("oauth_verifier", verifier);
  107. parameters.Add("oauth_version", "1.0");
  108. StringBuilder requestBuilder = new StringBuilder();
  109. string signature = oauth.GenerateSignature(source, parameters, consumerKey, consumerSecret, token, tokenSecret, httpMethod, timeStamp, nonce, OAuthBase.SignatureTypes.HMACSHA1);
  110. parameters.Add("oauth_signature", signature);
  111. requestBuilder.Append("OAuth ");
  112. foreach (string key in parameters)
  113. {
  114. requestBuilder.Append(key);
  115. requestBuilder.Append("=");
  116. requestBuilder.Append(@"""" + OAuthBase.UrlEncode(parameters[key]) + @"""");
  117. requestBuilder.Append(", ");
  118. }
  119. return requestBuilder.ToString();
  120. }
  121. }
  122. }