diff --git a/GreenshotImgurPlugin/ImgurUtils.cs b/GreenshotImgurPlugin/ImgurUtils.cs index 3f9bcfc97..ca3d7ed6b 100644 --- a/GreenshotImgurPlugin/ImgurUtils.cs +++ b/GreenshotImgurPlugin/ImgurUtils.cs @@ -137,23 +137,19 @@ namespace GreenshotImgurPlugin { } } else { - OAuthSession oAuth = new OAuthSession(); - oAuth.BrowserWidth = 650; - oAuth.BrowserHeight = 500; + OAuthSession oAuth = new OAuthSession(ImgurCredentials.CONSUMER_KEY, ImgurCredentials.CONSUMER_SECRET); + oAuth.BrowserSize = new Size(650, 500); oAuth.CallbackUrl = "http://getgreenshot.org"; oAuth.AccessTokenUrl = "http://api.imgur.com/oauth/access_token"; oAuth.AuthorizeUrl = "http://api.imgur.com/oauth/authorize"; oAuth.RequestTokenUrl = "http://api.imgur.com/oauth/request_token"; - oAuth.ConsumerKey = ImgurCredentials.CONSUMER_KEY; - oAuth.ConsumerSecret = ImgurCredentials.CONSUMER_SECRET; - oAuth.UserAgent = "Greenshot"; oAuth.LoginTitle = "Imgur authorization"; //oAuth.UseHTTPHeadersForAuthorization = false; oAuth.Token = config.ImgurToken; oAuth.TokenSecret = config.ImgurTokenSecret; try { - LOG.DebugFormat("Test: {0}", oAuth.oAuthWebRequest(HTTPMethod.GET, "http://api.imgur.com/2/account", null)); - responseString = oAuth.oAuthWebRequest(HTTPMethod.POST, "http://api.imgur.com/2/account/images.xml", uploadParameters); + LOG.DebugFormat("Test: {0}", oAuth.MakeOAuthRequest(HTTPMethod.GET, "http://api.imgur.com/2/account", null)); + responseString = oAuth.MakeOAuthRequest(HTTPMethod.POST, "http://api.imgur.com/2/account/images.xml", uploadParameters); } catch (Exception ex) { LOG.Error("Upload to imgur gave an exeption: ", ex); throw ex; diff --git a/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs b/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs index fb5920a3a..7a327bc30 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs +++ b/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs @@ -40,10 +40,12 @@ namespace GreenshotPhotobucketPlugin { public bool UploadReduceColors; [IniProperty("UsePageLink", Description = "Use pagelink instead of direct link on the clipboard", DefaultValue = "False")] public bool UsePageLink; - [IniProperty("PhotobucketToken", Description = "The Photobucket token", Encrypted=true, ExcludeIfNull=true)] - public string PhotobucketToken; - [IniProperty("PhotobucketTokenSecret", Description = "The Photobucket token secret", Encrypted=true, ExcludeIfNull=true)] - public string PhotobucketTokenSecret; + [IniProperty("Token", Description = "The Photobucket token", Encrypted=true, ExcludeIfNull=true)] + public string Token; + [IniProperty("TokenSecret", Description = "The Photobucket token secret", Encrypted=true, ExcludeIfNull=true)] + public string TokenSecret; + [IniProperty("SubDomain", Description = "The Photobucket api subdomain", Encrypted = true, ExcludeIfNull = true)] + public string SubDomain; public int Credits { get; diff --git a/GreenshotPhotobucketPlugin/PhotobucketUtils.cs b/GreenshotPhotobucketPlugin/PhotobucketUtils.cs index 306d630cd..5d58fe118 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketUtils.cs +++ b/GreenshotPhotobucketPlugin/PhotobucketUtils.cs @@ -50,48 +50,62 @@ namespace GreenshotPhotobucketPlugin { public static PhotobucketInfo UploadToPhotobucket(byte[] imageData, int dataLength, string title, string filename) { string responseString; - OAuthSession oAuth = new OAuthSession(); + OAuthSession oAuth = new OAuthSession("149833145", "ebd828180b11103c010c7e71c66f6bcb"); + oAuth.CheckVerifier = false; // This url is configured in the Photobucket API settings in the Photobucket site!! oAuth.CallbackUrl = "http://getgreenshot.org"; oAuth.AccessTokenUrl = "http://api.photobucket.com/login/access"; oAuth.AuthorizeUrl = "http://photobucket.com/apilogin/login"; oAuth.RequestTokenUrl = "http://api.photobucket.com/login/request"; - oAuth.ConsumerKey = "149833145"; - oAuth.ConsumerSecret = "ebd828180b11103c010c7e71c66f6bcb"; - oAuth.UserAgent = "Greenshot"; - oAuth.BrowserWidth = 1010; - oAuth.BrowserHeight = 400; - oAuth.CheckVerifier = false; + oAuth.BrowserSize = new Size(1010, 400); oAuth.LoginTitle = "Photobucket authorization"; - oAuth.Token = config.PhotobucketToken; - oAuth.TokenSecret = config.PhotobucketTokenSecret; + if (string.IsNullOrEmpty(config.SubDomain) || string.IsNullOrEmpty(config.Token)) { + if (!oAuth.Authorize()) { + return null; + } + if (!string.IsNullOrEmpty(oAuth.Token)) { + config.Token = oAuth.Token; + } + if (!string.IsNullOrEmpty(oAuth.TokenSecret)) { + config.TokenSecret = oAuth.TokenSecret; + } + if (oAuth.AccessTokenResponseParameters != null && oAuth.AccessTokenResponseParameters["subdomain"] != null) { + config.SubDomain = oAuth.AccessTokenResponseParameters["subdomain"]; + } + IniConfig.Save(); + } + oAuth.Token = config.Token; + oAuth.TokenSecret = config.TokenSecret; + Dictionary parameters = new Dictionary(); // add album - parameters.Add("id", "Apex75"); + parameters.Add("id", "Apex75/greenshot"); // add type parameters.Add("type", "base64"); - // Add image - parameters.Add("uploadfile", System.Convert.ToBase64String(imageData, 0, dataLength)); // add title if (title != null) { - //parameters.Add("title", title); + parameters.Add("title", title); } // add filename if (filename != null) { parameters.Add("filename", filename); } try { - LOG.DebugFormat("Album info", oAuth.oAuthWebRequest(HTTPMethod.GET, "http://api.photobucket.com/album/Apex75", null, null, null)); - responseString = oAuth.oAuthWebRequest(HTTPMethod.POST, "http://api.photobucket.com/album/!/upload", parameters, null, null); + string apiUrl = "http://api.photobucket.com/album/!/upload"; + oAuth.Sign(HTTPMethod.POST, apiUrl, parameters); + apiUrl = apiUrl.Replace("api.photobucket.com", config.SubDomain); + // Add image + parameters.Add("uploadfile", System.Convert.ToBase64String(imageData, 0, dataLength)); + responseString = oAuth.MakeRequest(HTTPMethod.POST, apiUrl, parameters, null, null); } catch (Exception ex) { LOG.Error("Error uploading to Photobucket.", ex); throw ex; } finally { if (!string.IsNullOrEmpty(oAuth.Token)) { - config.PhotobucketToken = oAuth.Token; + config.Token = oAuth.Token; } if (!string.IsNullOrEmpty(oAuth.TokenSecret)) { - config.PhotobucketTokenSecret = oAuth.TokenSecret; + config.TokenSecret = oAuth.TokenSecret; } } LOG.Info(responseString); diff --git a/GreenshotPlugin/Controls/OAuthLoginForm.cs b/GreenshotPlugin/Controls/OAuthLoginForm.cs index f1b2d786d..20d4a57c7 100644 --- a/GreenshotPlugin/Controls/OAuthLoginForm.cs +++ b/GreenshotPlugin/Controls/OAuthLoginForm.cs @@ -34,7 +34,7 @@ namespace GreenshotPlugin.Controls { /// public partial class OAuthLoginForm : Form { private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(OAuthLoginForm)); - private OAuthSession _oauthSession; + private string callbackUrl = null; private String _token; private String _verifier; private String _tokenSecret; @@ -57,18 +57,16 @@ namespace GreenshotPlugin.Controls { } } - public OAuthLoginForm(OAuthSession o, string browserTitle, int width, int height) { - _oauthSession = o; + public OAuthLoginForm(OAuthSession o, string browserTitle, Size size, string authorizationLink, string callbackUrl) { + this.callbackUrl = callbackUrl; _token = null; InitializeComponent(); - this.ClientSize = new System.Drawing.Size(width, height); + this.ClientSize = size; this.Icon = GreenshotPlugin.Core.GreenshotResources.getGreenshotIcon(); this.Text = browserTitle; - this.addressTextBox.Text = o.AuthorizationLink; - _token = _oauthSession.Token; - _tokenSecret = _oauthSession.TokenSecret; + this.addressTextBox.Text = authorizationLink; browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted); - browser.Navigate(new Uri(_oauthSession.AuthorizationLink)); + browser.Navigate(new Uri(authorizationLink)); WindowDetails.ToForeground(this.Handle); } @@ -88,7 +86,7 @@ namespace GreenshotPlugin.Controls { } private void checkUrl() { - if (browser.Url.ToString().StartsWith(_oauthSession.CallbackUrl)) { + if (browser.Url.ToString().StartsWith(callbackUrl)) { string queryParams = browser.Url.Query; if (queryParams.Length > 0) { //Store the Token and Token Secret diff --git a/GreenshotPlugin/Core/OAuthHelper.cs b/GreenshotPlugin/Core/OAuthHelper.cs index 3b814d869..a059dc489 100644 --- a/GreenshotPlugin/Core/OAuthHelper.cs +++ b/GreenshotPlugin/Core/OAuthHelper.cs @@ -27,6 +27,7 @@ using System.Collections.Specialized; using System.IO; using System.Text.RegularExpressions; using GreenshotPlugin.Controls; +using System.Drawing; namespace GreenshotPlugin.Core { /// @@ -72,16 +73,33 @@ namespace GreenshotPlugin.Core { private string _callbackUrl = "http://getgreenshot.org"; private bool checkVerifier = true; private bool useHTTPHeadersForAuthorization = true; - private bool useAuthorization = true; + private IDictionary accessTokenResponseParameters = null; + private IDictionary requestTokenResponseParameters = null; + + /// + /// Parameters of the last called getAccessToken + /// + public IDictionary AccessTokenResponseParameters { + get { + return accessTokenResponseParameters; + } + } + /// + /// Parameters of the last called getRequestToken + /// + public IDictionary RequestTokenResponseParameters { + get { + return requestTokenResponseParameters; + } + } + private string consumerKey; + private string consumerSecret; // default browser size - private int _browserWidth = 864; - private int _browserHeight = 587; + private Size _browserSize = new Size(864, 587); private string loginTitle = "Authorize Greenshot access"; #region PublicPropertiies - public string ConsumerKey { get; set; } - public string ConsumerSecret { get; set; } public string UserAgent { get { return _userAgent; } set { _userAgent = value; } } public string RequestTokenUrl { get; set; } public string AuthorizeUrl { get; set; } @@ -96,27 +114,21 @@ namespace GreenshotPlugin.Core { } } - public int BrowserWidth { + public Size BrowserSize { get { - return _browserWidth; + return _browserSize; } set { - _browserWidth = value; - } - } - public int BrowserHeight { - get { - return _browserHeight; - } - set { - _browserHeight = value; + _browserSize = value; } } + public string Token { get; set; } public string TokenSecret { get; set; } + public string LoginTitle { get { return loginTitle; @@ -137,17 +149,14 @@ namespace GreenshotPlugin.Core { useHTTPHeadersForAuthorization = value; } } - public bool UseAuthorization { - get { - return useAuthorization; - } - set { - useAuthorization = value; - } - } #endregion + public OAuthSession(string consumerKey, string consumerSecret) { + this.consumerKey = consumerKey; + this.consumerSecret = consumerSecret; + } + /// /// Helper function to compute a hash value /// @@ -229,18 +238,22 @@ namespace GreenshotPlugin.Core { // Just a simple implementation of a random number between 123400 and 9999999 return random.Next(123400, 9999999).ToString(); } + /// /// Get the request token using the consumer key and secret. Also initializes tokensecret /// /// The request token. private String getRequestToken() { string ret = null; - string response = oAuthWebRequestNoCheck(HTTPMethod.POST, RequestTokenUrl, null); + IDictionary parameters = new Dictionary(); + Sign(HTTPMethod.POST, RequestTokenUrl, parameters); + string response = MakeRequest(HTTPMethod.POST, RequestTokenUrl, parameters, null, null); + LOG.DebugFormat("Request token response: {0}", response); if (response.Length > 0) { - IDictionary qs = NetworkHelper.ParseQueryString(response); - if (qs.ContainsKey(OAUTH_TOKEN_KEY)) { - this.Token = qs[OAUTH_TOKEN_KEY]; - this.TokenSecret = qs[OAUTH_TOKEN_SECRET_KEY]; + requestTokenResponseParameters = NetworkHelper.ParseQueryString(response); + if (requestTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY)) { + this.Token = requestTokenResponseParameters[OAUTH_TOKEN_KEY]; + this.TokenSecret = requestTokenResponseParameters[OAUTH_TOKEN_SECRET_KEY]; ret = this.Token; } } @@ -251,17 +264,17 @@ namespace GreenshotPlugin.Core { /// Authorize the token by showing the dialog /// /// The request token. - private String authorizeToken() { + private String getAuthorizeToken() { if (string.IsNullOrEmpty(Token)) { Exception e = new Exception("The request token is not set"); throw e; } - LOG.DebugFormat("Opening AuthorizationLink: {0}", AuthorizationLink); - OAuthLoginForm oAuthLoginForm = new OAuthLoginForm(this, LoginTitle, BrowserWidth, BrowserHeight); + LOG.DebugFormat("Opening AuthorizationLink: {0}", authorizationLink); + OAuthLoginForm oAuthLoginForm = new OAuthLoginForm(this, LoginTitle, BrowserSize, authorizationLink, CallbackUrl); oAuthLoginForm.ShowDialog(); Token = oAuthLoginForm.Token; + Verifier = oAuthLoginForm.Verifier; if (CheckVerifier) { - Verifier = oAuthLoginForm.Verifier; if (!string.IsNullOrEmpty(Verifier)) { return Token; } else { @@ -282,15 +295,17 @@ namespace GreenshotPlugin.Core { throw e; } - string response = oAuthWebRequestNoCheck(HTTPMethod.POST, AccessTokenUrl, null); - + IDictionary parameters = new Dictionary(); + Sign(HTTPMethod.POST, AccessTokenUrl, parameters); + string response = MakeRequest(HTTPMethod.POST, AccessTokenUrl, parameters, null, null); + LOG.DebugFormat("Access token response: {0}", response); if (response.Length > 0) { - IDictionary qs = NetworkHelper.ParseQueryString(response); - if (qs.ContainsKey(OAUTH_TOKEN_KEY) && qs[OAUTH_TOKEN_KEY] != null) { - this.Token = qs[OAUTH_TOKEN_KEY]; + accessTokenResponseParameters = NetworkHelper.ParseQueryString(response); + if (accessTokenResponseParameters.ContainsKey(OAUTH_TOKEN_KEY) && accessTokenResponseParameters[OAUTH_TOKEN_KEY] != null) { + this.Token = accessTokenResponseParameters[OAUTH_TOKEN_KEY]; } - if (qs.ContainsKey(OAUTH_TOKEN_SECRET_KEY) && qs[OAUTH_TOKEN_SECRET_KEY] != null) { - this.TokenSecret = qs[OAUTH_TOKEN_SECRET_KEY]; + if (accessTokenResponseParameters.ContainsKey(OAUTH_TOKEN_SECRET_KEY) && accessTokenResponseParameters[OAUTH_TOKEN_SECRET_KEY] != null) { + this.TokenSecret = accessTokenResponseParameters[OAUTH_TOKEN_SECRET_KEY]; } } @@ -301,7 +316,10 @@ namespace GreenshotPlugin.Core { /// This method goes through the whole authorize process, including a Authorization window. /// /// true if the process is completed - private bool authorize() { + public bool Authorize() { + this.Token = null; + this.TokenSecret = null; + this.Verifier = null; LOG.Debug("Creating Token"); try { getRequestToken(); @@ -309,7 +327,7 @@ namespace GreenshotPlugin.Core { LOG.Error(ex); throw new NotSupportedException("Service is not available: " + ex.Message); } - if (UseAuthorization && string.IsNullOrEmpty(authorizeToken())) { + if (string.IsNullOrEmpty(getAuthorizeToken())) { LOG.Debug("User didn't authenticate!"); return false; } @@ -320,7 +338,7 @@ namespace GreenshotPlugin.Core { /// Get the link to the authorization page for this application. /// /// The url with a valid request token, or a null string. - public string AuthorizationLink { + private string authorizationLink { get { return AuthorizeUrl + "?" + OAUTH_TOKEN_KEY + "=" + this.Token + "&" + OAUTH_CALLBACK_KEY + "=" + UrlEncode3986(CallbackUrl); } @@ -333,9 +351,10 @@ namespace GreenshotPlugin.Core { /// /// /// - public string oAuthWebRequest(HTTPMethod method, string requestURL, IDictionary parameters) { - return oAuthWebRequest(method, requestURL, parameters, null, null); + public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary parameters) { + return MakeOAuthRequest(method, requestURL, parameters, null, null); } + /// /// Submit a web request using oAuth. /// @@ -345,21 +364,61 @@ namespace GreenshotPlugin.Core { /// contenttype for the postdata /// Data to post (MemoryStream) /// The web server response. - public string oAuthWebRequest(HTTPMethod method, string requestURL, IDictionary parameters, string contentType, MemoryStream postData) { - // If we are not trying to get a Authorization or Accestoken, and we don't have a token, create one - if (string.IsNullOrEmpty(Token)) { - if (!authorize()) { - throw new Exception("Not authorized"); + public string MakeOAuthRequest(HTTPMethod method, string requestURL, IDictionary parameters, string contentType, MemoryStream postData) { + if (parameters == null) { + parameters = new Dictionary(); + } + int retries = 2; + Exception lastException = null; + while (retries-- > 0) { + // If we are not trying to get a Authorization or Accestoken, and we don't have a token, create one + if (string.IsNullOrEmpty(Token)) { + if (!Authorize()) { + throw new Exception("Not authorized"); + } + } + try { + Sign(method, requestURL, parameters); + return MakeRequest(method, requestURL, parameters, contentType, postData); + } catch (WebException wEx) { + lastException = wEx; + if (wEx.Response != null) { + HttpWebResponse response = wEx.Response as HttpWebResponse; + if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { + Token = null; + TokenSecret = null; + + // Remove oauth keys, so they aren't added double + IDictionary newParameters = new Dictionary(); + foreach (string parameterKey in parameters.Keys) { + if (!parameterKey.StartsWith(OAUTH_PARAMETER_PREFIX)) { + newParameters.Add(parameterKey, parameters[parameterKey]); + } + } + parameters = newParameters; + continue; + } + } + throw wEx; } } - return oAuthWebRequestNoCheck(method, requestURL, parameters, contentType, postData); + if (lastException != null) { + throw lastException; + } + throw new Exception("Not authorized"); } - public string oAuthWebRequestNoCheck(HTTPMethod method, string requestURL, IDictionary parameters) { - return oAuthWebRequestNoCheck(method, requestURL, parameters, null, null); - } - - private string oAuthWebRequestNoCheck(HTTPMethod method, string requestURL, IDictionary parameters, string contentType, MemoryStream postData) { + /// + /// OAuth sign the parameters, meaning all oauth parameters are added to the supplied dictionary. + /// And additionally a signature is added. + /// + /// Method (POST,PUT,GET) + /// Url to call + /// IDictionary + public void Sign(HTTPMethod method, string requestURL, IDictionary parameters) { + if (parameters == null) { + throw new ArgumentNullException("parameters"); + } // Build the signature base StringBuilder signatureBase = new StringBuilder(); @@ -376,42 +435,52 @@ namespace GreenshotPlugin.Core { signatureBase.Append(UrlEncode3986(normalizedUrl)).Append("&"); // Add normalized parameters - if (parameters == null) { - parameters = new Dictionary(); - } - parameters.Add(OAUTH_VERSION_KEY, OAUTH_VERSION); parameters.Add(OAUTH_NONCE_KEY, GenerateNonce()); parameters.Add(OAUTH_TIMESTAMP_KEY, GenerateTimeStamp()); parameters.Add(OAUTH_SIGNATURE_METHOD_KEY, HMACSHA1SignatureType); - parameters.Add(OAUTH_CONSUMER_KEY_KEY, ConsumerKey); + parameters.Add(OAUTH_CONSUMER_KEY_KEY, consumerKey); if (CallbackUrl != null && RequestTokenUrl != null && requestURL.ToString().StartsWith(RequestTokenUrl)) { parameters.Add(OAUTH_CALLBACK_KEY, CallbackUrl); } - + if (!string.IsNullOrEmpty(Verifier)) { + parameters.Add(OAUTH_VERIFIER_KEY, Verifier); + } if (!string.IsNullOrEmpty(Token)) { parameters.Add(OAUTH_TOKEN_KEY, Token); } signatureBase.Append(UrlEncode3986(GenerateNormalizedParametersString(parameters))); - LOG.DebugFormat("Signature base: {0}", signatureBase); // Generate Signature and add it to the parameters HMACSHA1 hmacsha1 = new HMACSHA1(); - hmacsha1.Key = Encoding.UTF8.GetBytes(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}&{1}", UrlEncode3986(ConsumerSecret), string.IsNullOrEmpty(TokenSecret) ? string.Empty : UrlEncode3986(TokenSecret))); + hmacsha1.Key = Encoding.UTF8.GetBytes(string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}&{1}", UrlEncode3986(consumerSecret), string.IsNullOrEmpty(TokenSecret) ? string.Empty : UrlEncode3986(TokenSecret))); string signature = ComputeHash(hmacsha1, signatureBase.ToString()); parameters.Add(OAUTH_SIGNATURE_KEY, signature); - LOG.DebugFormat("Signature: {0}", signature); + } + /// + /// Make the actual OAuth request, all oauth parameters are passed as header (default) and the others are placed in the url or post data. + /// Any additional parameters added after the Sign call are not in the signature, this could be by design! + /// + /// + /// + /// + /// + /// + /// Response from server + public string MakeRequest(HTTPMethod method, string requestURL, IDictionary parameters, string contentType, MemoryStream postData) { + if (parameters == null) { + throw new ArgumentNullException("parameters"); + } IDictionary requestParameters = null; // Add oAuth values as HTTP headers, if this is allowed StringBuilder authHeader = null; - if ((HTTPMethod.POST == method || HTTPMethod.PUT == method) && UseHTTPHeadersForAuthorization) { + if (HTTPMethod.POST == method && UseHTTPHeadersForAuthorization) { authHeader = new StringBuilder(); requestParameters = new Dictionary(); foreach (string parameterKey in parameters.Keys) { if (parameterKey.StartsWith(OAUTH_PARAMETER_PREFIX)) { authHeader.AppendFormat(System.Globalization.CultureInfo.InvariantCulture, "{0}=\"{1}\", ", parameterKey, UrlEncode3986(parameters[parameterKey])); } else if (!requestParameters.ContainsKey(parameterKey)) { - LOG.DebugFormat("Request parameter: {0}={1}", parameterKey, parameters[parameterKey]); requestParameters.Add(parameterKey, parameters[parameterKey]); } } @@ -427,7 +496,6 @@ namespace GreenshotPlugin.Core { } else { requestParameters = parameters; } - // Create webrequest HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreateWebRequest(requestURL); webRequest.Method = method.ToString(); @@ -440,7 +508,7 @@ namespace GreenshotPlugin.Core { webRequest.Headers.Add("Authorization: OAuth " + authHeader.ToString()); } - if ( (HTTPMethod.POST == method || HTTPMethod.PUT == method) && postData == null && requestParameters != null && requestParameters.Count > 0) { + if (HTTPMethod.POST == method && postData == null && requestParameters != null && requestParameters.Count > 0) { StringBuilder form = new StringBuilder(); foreach (string parameterKey in requestParameters.Keys) { form.AppendFormat(System.Globalization.CultureInfo.InvariantCulture, "{0}={1}&", UrlEncode3986(parameterKey), UrlEncode3986(parameters[parameterKey])); @@ -449,7 +517,6 @@ namespace GreenshotPlugin.Core { if (form.Length > 0) { form.Remove(form.Length - 1, 1); } - LOG.DebugFormat("Form data: {0}", form.ToString()); webRequest.ContentType = "application/x-www-form-urlencoded"; byte[] data = Encoding.UTF8.GetBytes(form.ToString()); using (var requestStream = webRequest.GetRequestStream()) { @@ -472,38 +539,6 @@ namespace GreenshotPlugin.Core { return responseData; } - /// - /// Web Request Wrapper - /// - /// Http Method - /// Full url to the web resource - /// Data to post - /// The web server response. - protected string WebRequest(HTTPMethod method, string url, string contentType, 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; - if (method == HTTPMethod.POST) { - webRequest.ContentType = contentType; - } - - using (var requestStream = webRequest.GetRequestStream()) { - requestStream.Write(postData.GetBuffer(), 0, (int)postData.Length); - } - - responseData = WebResponseGet(webRequest); - - webRequest = null; - - return responseData; - } - /// /// Process the web response. ///