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
///