PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Code/Channels/LinkedIn/LinkedInWebRequest.cs

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