private string GenerateSignature( Uri uri, HttpMethod httpMethod, IEnumerable <IOAuthQueryParameter> queryParameters, Dictionary <string, string> urlParameters) { var oAuthQueryParameters = queryParameters.ToArray(); var signatureParameters = GetSignatureParameters(oAuthQueryParameters, urlParameters); var formattedUrlParameters = CreateFormattedUrlParameters(signatureParameters); var oAuthRequest = CreateOAuthRequest(uri, httpMethod, formattedUrlParameters); var oAuthSecretKey = CreateOAuthSecretKey(oAuthQueryParameters); var hmacsha1Generator = new HMACSHA1Generator(); return(StringFormater.UrlEncode(Convert.ToBase64String(hmacsha1Generator.ComputeHash(oAuthRequest, oAuthSecretKey, Encoding.UTF8)))); }
private string GenerateSignature( Uri uri, HttpMethod httpMethod, IEnumerable <IOAuthQueryParameter> queryParameters, Dictionary <string, string> urlParameters) { List <KeyValuePair <String, String> > signatureParameters = urlParameters.OrderBy(x => x.Key).ToList(); #region Store the paramaters that will be used // Add all the parameters that are required to generate a signature var oAuthQueryParameters = queryParameters as IList <IOAuthQueryParameter> ?? queryParameters.ToList(); foreach (var header in (from h in oAuthQueryParameters where h.RequiredForSignature orderby h.Key select h)) { signatureParameters.Add(new KeyValuePair <string, string>(header.Key, header.Value)); } #endregion #region Generate OAuthRequest Parameters StringBuilder urlParametersFormatted = new StringBuilder(); foreach (KeyValuePair <string, string> param in (from p in signatureParameters orderby p.Key select p)) { if (urlParametersFormatted.Length > 0) { urlParametersFormatted.Append("&"); } urlParametersFormatted.Append(string.Format("{0}={1}", param.Key, param.Value)); } #endregion #region Generate OAuthRequest string url = uri.Query == "" ? uri.AbsoluteUri : uri.AbsoluteUri.Replace(uri.Query, ""); string oAuthRequest = string.Format("{0}&{1}&{2}", httpMethod, StringFormater.UrlEncode(url), StringFormater.UrlEncode(urlParametersFormatted.ToString())); #endregion #region Generate OAuthSecretKey // Generate OAuthSecret that is required to generate a signature IEnumerable <IOAuthQueryParameter> oAuthSecretKeyHeaders = from h in oAuthQueryParameters where h.IsPartOfOAuthSecretKey orderby h.Key select h; string oAuthSecretkey = ""; for (int i = 0; i < oAuthSecretKeyHeaders.Count(); ++i) { oAuthSecretkey += String.Format("{0}{1}", StringFormater.UrlEncode(oAuthSecretKeyHeaders.ElementAt(i).Value), (i == oAuthSecretKeyHeaders.Count() - 1) ? "" : "&"); } #endregion // Create and return signature HMACSHA1Generator hmacsha1Generator = new HMACSHA1Generator(); return(StringFormater.UrlEncode(Convert.ToBase64String(hmacsha1Generator.ComputeHash(oAuthRequest, oAuthSecretkey, Encoding.UTF8)))); }
private string GenerateSignature( Uri uri, HttpMethod httpMethod, IEnumerable<IOAuthQueryParameter> queryParameters, Dictionary<string, string> urlParameters) { List<KeyValuePair<String, String>> signatureParameters = urlParameters.OrderBy(x => x.Key).ToList(); #region Store the paramaters that will be used // Add all the parameters that are required to generate a signature var oAuthQueryParameters = queryParameters as IList<IOAuthQueryParameter> ?? queryParameters.ToList(); foreach (var header in (from h in oAuthQueryParameters where h.RequiredForSignature orderby h.Key select h)) { signatureParameters.Add(new KeyValuePair<string, string>(header.Key, header.Value)); } #endregion #region Generate OAuthRequest Parameters StringBuilder urlParametersFormatted = new StringBuilder(); foreach (KeyValuePair<string, string> param in (from p in signatureParameters orderby p.Key select p)) { if (urlParametersFormatted.Length > 0) { urlParametersFormatted.Append("&"); } urlParametersFormatted.Append(string.Format("{0}={1}", param.Key, param.Value)); } #endregion #region Generate OAuthRequest string url = uri.Query == "" ? uri.AbsoluteUri : uri.AbsoluteUri.Replace(uri.Query, ""); string oAuthRequest = string.Format("{0}&{1}&{2}", httpMethod, StringFormater.UrlEncode(url), StringFormater.UrlEncode(urlParametersFormatted.ToString())); #endregion #region Generate OAuthSecretKey // Generate OAuthSecret that is required to generate a signature IEnumerable<IOAuthQueryParameter> oAuthSecretKeyHeaders = from h in oAuthQueryParameters where h.IsPartOfOAuthSecretKey orderby h.Key select h; string oAuthSecretkey = ""; for (int i = 0; i < oAuthSecretKeyHeaders.Count(); ++i) { oAuthSecretkey += String.Format("{0}{1}", StringFormater.UrlEncode(oAuthSecretKeyHeaders.ElementAt(i).Value), (i == oAuthSecretKeyHeaders.Count() - 1) ? "" : "&"); } #endregion // Create and return signature HMACSHA1Generator hmacsha1Generator = new HMACSHA1Generator(); return StringFormater.UrlEncode(Convert.ToBase64String(hmacsha1Generator.ComputeHash(oAuthRequest, oAuthSecretkey, Encoding.UTF8))); }