diff --git a/GreenshotPlugin/Core/OAuthHelper.cs b/GreenshotPlugin/Core/OAuthHelper.cs index baf3ba225..49c896a5d 100644 --- a/GreenshotPlugin/Core/OAuthHelper.cs +++ b/GreenshotPlugin/Core/OAuthHelper.cs @@ -475,6 +475,52 @@ namespace GreenshotPlugin.Core { } } + /// + /// Submit a web request using oAuth. + /// + /// GET or POST + /// The full url, including the querystring. + /// Data to post (MemoryStream) + /// The web server response. + public string oAuthWebRequest(Method method, string url, MemoryStream postData) { + string outUrl = ""; + string querystring = ""; + + Uri uri = new Uri(url); + + string nonce = this.GenerateNonce(); + string timeStamp = this.GenerateTimeStamp(); + + string callback = ""; + if (url.ToString().Contains(RequestTokenUrl)) { + callback = CallbackUrl; + } + + //Generate Signature + string sig = this.GenerateSignature(uri, + this.ConsumerKey, + this.ConsumerSecret, + this.Token, + this.TokenSecret, + method.ToString(), + timeStamp, + nonce, + callback, + out outUrl, + out querystring); + + if (querystring.Length > 0) { + querystring += "&"; + } + querystring += "oauth_signature=" + NetworkHelper.UrlEncode(sig); + + if (querystring.Length > 0) { + outUrl += "?"; + } + + return WebRequest(method, outUrl + querystring, postData); + } + /// /// Submit a web request using oAuth. /// @@ -535,8 +581,10 @@ namespace GreenshotPlugin.Core { out outUrl, out querystring); - - querystring += "&oauth_signature=" + NetworkHelper.UrlEncode(sig); + if (querystring.Length > 0) { + querystring += "&"; + } + querystring += "oauth_signature=" + NetworkHelper.UrlEncode(sig); //Convert the querystring to postData if (method == Method.POST) { @@ -555,6 +603,34 @@ namespace GreenshotPlugin.Core { return ret; } + /// + /// Web Request Wrapper + /// + /// Http Method + /// Full url to the web resource + /// Data to post + /// The web server response. + protected string WebRequest(Method method, string url, MemoryStream postData) { + HttpWebRequest webRequest = null; + string responseData = ""; + + webRequest = (HttpWebRequest)NetworkHelper.CreateWebRequest(url); + webRequest.Method = method.ToString(); + webRequest.ServicePoint.Expect100Continue = false; + webRequest.UserAgent = _userAgent; + webRequest.Timeout = 20000; + webRequest.ContentLength = postData.Length; + using (var requestStream = webRequest.GetRequestStream()) { + requestStream.Write(postData.GetBuffer(), 0, (int)postData.Length); + } + + responseData = WebResponseGet(webRequest); + + webRequest = null; + + return responseData; + } + /// /// Web Request Wrapper ///