private string ParseSignatureEnum(SIGNATURE_TYPE signatureType) { if (signatureType == SIGNATURE_TYPE.HMACSHA1) { return(HMACSHA1SignatureType); } else if (signatureType == SIGNATURE_TYPE.PLAINTEXT) { return(PlainTextSignatureType); } return(""); }
/// <summary> /// Generate Signature /// </summary> /// <param name="requestURL"></param> /// <param name="oauthParameters"></param> /// <param name="consumerKey"></param> /// <param name="consumerSecret"></param> /// <param name="signatureType"></param> /// <param name="httpMethod"></param> /// <param name="tokenSecret"></param> /// <returns></returns> public string GenerateSignature(Uri requestURL, QueryParameters oauthParameters, string consumerKey, string consumerSecret, SIGNATURE_TYPE signatureType, TRANSPORT_METHOD httpMethod, string tokenSecret) { QueryParameters tmpOauthParameters = new QueryParameters(); foreach (var param in oauthParameters) { if (param.Value != null && (param.Value.ToLower().Contains("http://") || param.Value.ToLower().Contains("https://"))) { tmpOauthParameters.Add(new QueryParameter(param.Key, Utility.UrlEncode(param.Value))); } else if (param.Value != null) { tmpOauthParameters.Add(new QueryParameter(param.Key, param.Value)); } } tmpOauthParameters[OAuthSignatureMethodKey] = ParseSignatureEnum(signatureType); string signature = ""; StringBuilder signatureBase = new StringBuilder(); //1. URL encode and process Request URL string normalizedRequestUrl; normalizedRequestUrl = string.Format("{0}://{1}", requestURL.Scheme, requestURL.Host); if (!((requestURL.Scheme == "http" && requestURL.Port == 80) || (requestURL.Scheme == "https" && requestURL.Port == 443))) { normalizedRequestUrl += ":" + requestURL.Port; } normalizedRequestUrl += requestURL.AbsolutePath; normalizedRequestUrl = Utility.UrlEncode(normalizedRequestUrl); //2. URL Encode callbackUrl (if present) //if (tmpOauthParameters.HasName(OAuthCallbackKey)) // tmpOauthParameters[OAuthCallbackKey] = Utility.UrlEncode(tmpOauthParameters[OAuthCallbackKey]); //tmpOauthParameters["scope"] = Utility.UrlEncode(tmpOauthParameters["scope"]); foreach (var p in Utility.GetQuerystringParameters(requestURL.ToString())) { tmpOauthParameters.Add(p.Key, UrlEncode(HttpUtility.UrlDecode(p.Value))); } //following works for Twitter with spaces //tmpOauthParameters.Add(p.Key, UrlEncode(HttpUtility.UrlDecode(p.Value))); //3. Perform Lexographic Sorting tmpOauthParameters.Sort(); //4. Generate Signature Base signatureBase.AppendFormat("{0}&", httpMethod.ToString().ToUpper()); signatureBase.AppendFormat("{0}&", normalizedRequestUrl); signatureBase.AppendFormat("{0}", Utility.UrlEncode(tmpOauthParameters.ToString())); string sbase = signatureBase.ToString(); logger.Debug("signature base:" + sbase); //5. Generate Signature switch (signatureType) { case SIGNATURE_TYPE.PLAINTEXT: { signature = Utility.UrlEncode(string.Format("{0}&{1}", consumerSecret, tokenSecret)); break; } case SIGNATURE_TYPE.HMACSHA1: { HMACSHA1 hmacsha1 = new HMACSHA1(); hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : tokenSecret)); signature = GenerateSignatureUsingHash(sbase, hmacsha1); logger.Debug("HMACSHA1 signature:" + signature); break; } default: throw new ArgumentException("Unknown signature type", "signatureType"); } return(signature); }
/// <summary> /// Generate Signature /// </summary> /// <param name="requestURL"></param> /// <param name="oauthParameters"></param> /// <param name="consumerKey"></param> /// <param name="consumerSecret"></param> /// <param name="signatureType"></param> /// <param name="httpMethod"></param> /// <param name="tokenSecret"></param> /// <returns></returns> public string GenerateSignature(Uri requestURL, QueryParameters oauthParameters, string consumerKey, string consumerSecret, SIGNATURE_TYPE signatureType, TRANSPORT_METHOD httpMethod, string tokenSecret) { QueryParameters tmpOauthParameters = new QueryParameters(); foreach (var param in oauthParameters) { if (param.Value.ToLower().Contains("http://") || param.Value.ToLower().Contains("https://")) tmpOauthParameters.Add(new QueryParameter(param.Key, Utility.UrlEncode(param.Value))); else tmpOauthParameters.Add(new QueryParameter(param.Key, param.Value)); } tmpOauthParameters[OAuthSignatureMethodKey] = ParseSignatureEnum(signatureType); string signature = ""; StringBuilder signatureBase = new StringBuilder(); //1. URL encode and process Request URL string normalizedRequestUrl; normalizedRequestUrl = string.Format("{0}://{1}", requestURL.Scheme, requestURL.Host); if (!((requestURL.Scheme == "http" && requestURL.Port == 80) || (requestURL.Scheme == "https" && requestURL.Port == 443))) { normalizedRequestUrl += ":" + requestURL.Port; } normalizedRequestUrl += requestURL.AbsolutePath; normalizedRequestUrl = Utility.UrlEncode(normalizedRequestUrl); //2. URL Encode callbackUrl (if present) //if (tmpOauthParameters.HasName(OAuthCallbackKey)) // tmpOauthParameters[OAuthCallbackKey] = Utility.UrlEncode(tmpOauthParameters[OAuthCallbackKey]); //tmpOauthParameters["scope"] = Utility.UrlEncode(tmpOauthParameters["scope"]); foreach (var p in Utility.GetQuerystringParameters(requestURL.ToString())) tmpOauthParameters.Add(p.Key, UrlEncode(HttpUtility.UrlDecode(p.Value))); //following works for Twitter with spaces //tmpOauthParameters.Add(p.Key, UrlEncode(HttpUtility.UrlDecode(p.Value))); //3. Perform Lexographic Sorting tmpOauthParameters.Sort(); //4. Generate Signature Base signatureBase.AppendFormat("{0}&", httpMethod.ToString().ToUpper()); signatureBase.AppendFormat("{0}&", normalizedRequestUrl); signatureBase.AppendFormat("{0}", Utility.UrlEncode(tmpOauthParameters.ToString())); string sbase = signatureBase.ToString(); logger.Debug("signature base:" + sbase); //5. Generate Signature switch (signatureType) { case SIGNATURE_TYPE.PLAINTEXT: { signature = Utility.UrlEncode(string.Format("{0}&{1}", consumerSecret, tokenSecret)); break; } case SIGNATURE_TYPE.HMACSHA1: { HMACSHA1 hmacsha1 = new HMACSHA1(); hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : tokenSecret)); signature = GenerateSignatureUsingHash(sbase, hmacsha1); logger.Debug("HMACSHA1 signature:" + signature); break; } default: throw new ArgumentException("Unknown signature type", "signatureType"); } return signature; }
private string ParseSignatureEnum(SIGNATURE_TYPE signatureType) { if (signatureType == SIGNATURE_TYPE.HMACSHA1) return HMACSHA1SignatureType; else if (signatureType == SIGNATURE_TYPE.PLAINTEXT) return PlainTextSignatureType; return ""; }