private string WriteAuthorizationHeader(WebParameterCollection parameters) { StringBuilder stringBuilder = new StringBuilder("OAuth "); if (!OAuthRequest.IsNullOrBlank(this.Realm)) { stringBuilder.AppendFormat("realm=\"{0}\",", (object)OAuthTools.UrlEncodeRelaxed(this.Realm)); } parameters.Sort((Comparison <WebParameter>)((l, r) => l.Name.CompareTo(r.Name))); int num = 0; foreach (WebParameter webParameter in parameters.Where <WebParameter>((Func <WebParameter, bool>)(parameter => { if (!OAuthRequest.IsNullOrBlank(parameter.Name) && !OAuthRequest.IsNullOrBlank(parameter.Value)) { return(parameter.Name.StartsWith("oauth_")); } return(false); }))) { ++num; string format = num < parameters.Count ? "{0}=\"{1}\"," : "{0}=\"{1}\""; stringBuilder.AppendFormat(format, (object)webParameter.Name, (object)webParameter.Value); } return(stringBuilder.ToString()); }
private string WriteAuthorizationHeader(WebParameterCollection parameters) { var sb = new StringBuilder("OAuth "); if (!IsNullOrBlank(Realm)) { sb.AppendFormat("realm=\"{0}\",", OAuthTools.UrlEncodeRelaxed(Realm)); } parameters.Sort((l, r) => l.Name.CompareTo(r.Name)); var count = 0; foreach (var parameter in parameters.Where(parameter => !IsNullOrBlank(parameter.Name) && !IsNullOrBlank(parameter.Value) && parameter.Name.StartsWith("oauth_"))) { count++; var format = count < parameters.Count ? "{0}=\"{1}\"," : "{0}=\"{1}\""; sb.AppendFormat(format, parameter.Name, parameter.Value); } var authorization = sb.ToString(); return(authorization); }
/// <summary> /// Creates a signature value given a signature base and the consumer secret and a known token secret. /// </summary> /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" /> /// <param name="signatureMethod">The hashing method</param> /// <param name="signatureTreatment">The treatment to use on a signature value</param> /// <param name="signatureBase">The signature base</param> /// <param name="consumerSecret">The consumer secret</param> /// <param name="tokenSecret">The token secret</param> /// <returns></returns> public static string GetSignature( OAuthSignatureMethod signatureMethod, OAuthSignatureTreatment signatureTreatment, string signatureBase, string consumerSecret, string tokenSecret) { if (OAuthTools.IsNullOrBlank(tokenSecret)) { tokenSecret = string.Empty; } consumerSecret = OAuthTools.UrlEncodeRelaxed(consumerSecret); tokenSecret = OAuthTools.UrlEncodeRelaxed(tokenSecret); if (signatureMethod != OAuthSignatureMethod.HmacSha1) { throw new NotImplementedException("Only HMAC-SHA1 is currently supported."); } HMACSHA1 hmacshA1 = new HMACSHA1(); string s = consumerSecret + "&" + tokenSecret; hmacshA1.Key = OAuthTools._encoding.GetBytes(s); string str = OAuthTools.HashWith(signatureBase, (HashAlgorithm)hmacshA1); return(signatureTreatment == OAuthSignatureTreatment.Escaped ? OAuthTools.UrlEncodeRelaxed(str) : str); }
/// <summary> /// Creates a signature value given a signature base and the consumer secret. /// This method is used when the token secret is currently unknown. /// </summary> /// <seealso href="http://oauth.net/core/1.0#rfc.section.9.2" /> /// <param name="signatureMethod">The hashing method</param> /// <param name="signatureBase">The signature base</param> /// <param name="consumerSecret">The consumer key</param> /// <returns></returns> public static string GetSignature( OAuthSignatureMethod signatureMethod, string signatureBase, string consumerSecret) { return(OAuthTools.GetSignature(signatureMethod, OAuthSignatureTreatment.Escaped, signatureBase, consumerSecret, (string)null)); }
private string WriteAuthorizationHeader(WebParameterCollection parameters) { var sb = new StringBuilder("OAuth "); if (!IsNullOrBlank(Realm)) { sb.AppendFormat("realm=\"{0}\",", OAuthTools.UrlEncodeRelaxed(Realm)); } parameters.Sort((l, r) => l.Name.CompareTo(r.Name)); foreach (var parameter in parameters.Where(parameter => !IsNullOrBlank(parameter.Name) && !IsNullOrBlank(parameter.Value) && (parameter.Name.StartsWith("oauth_") || parameter.Name.StartsWith("x_auth_")))) { sb.AppendFormat("{0}=\"{1}\",", parameter.Name, parameter.Value); } sb.Remove(sb.Length - 1, 1); var authorization = sb.ToString(); return(authorization); }
private string GetNewSignatureXAuth(WebParameterCollection parameters) { string timestamp = OAuthTools.GetTimestamp(); string nonce = OAuthTools.GetNonce(); this.AddXAuthParameters((ICollection <WebParameter>)parameters, timestamp, nonce); return(OAuthTools.GetSignature(this.SignatureMethod, this.SignatureTreatment, OAuthTools.ConcatenateRequestElements(this.Method.ToUpperInvariant(), this.RequestUrl, parameters), this.ConsumerSecret, this.TokenSecret)); }
public static string ConcatenateRequestElements(string method, string url, WebParameterCollection parameters) { StringBuilder stringBuilder = new StringBuilder(); string value = method.ToUpper() + "&"; string value2 = OAuthTools.UrlEncodeRelaxed(OAuthTools.ConstructRequestUrl(new Uri(url))) + "&"; string value3 = OAuthTools.UrlEncodeRelaxed(OAuthTools.NormalizeRequestParameters(parameters)); stringBuilder.Append(value); stringBuilder.Append(value2); stringBuilder.Append(value3); return(stringBuilder.ToString()); }
public static WebParameterCollection SortParametersExcludingSignature(WebParameterCollection parameters) { WebParameterCollection webParameterCollection = new WebParameterCollection(parameters); IEnumerable <WebParameter> parameters2 = webParameterCollection.Where((WebParameter n) => OAuthTools.EqualsIgnoreCase(n.Name, "oauth_signature")); webParameterCollection.RemoveAll(parameters2); foreach (WebParameter webParameter in webParameterCollection) { webParameter.Value = OAuthTools.UrlEncodeStrict(webParameter.Value); } webParameterCollection.Sort((WebParameter x, WebParameter y) => (!x.Name.Equals(y.Name)) ? x.Name.CompareTo(y.Name) : x.Value.CompareTo(y.Value)); return(webParameterCollection); }
private string GetNewSignature(WebParameterCollection parameters) { var timestamp = OAuthTools.GetTimestamp(); var nonce = OAuthTools.GetNonce(); AddAuthParameters(parameters, timestamp, nonce); var signatureBase = OAuthTools.ConcatenateRequestElements(Method.ToUpperInvariant(), RequestUrl, parameters); var signature = OAuthTools.GetSignature(SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret, TokenSecret); return(signature); }
private string WriteAuthorizationHeader(WebParameterCollection parameters) { StringBuilder stringBuilder = new StringBuilder("OAuth "); if (!OAuthRequest.IsNullOrBlank(this.Realm)) { stringBuilder.AppendFormat("realm=\"{0}\",", OAuthTools.UrlEncodeRelaxed(this.Realm)); } parameters.Sort((WebParameter l, WebParameter r) => l.Name.CompareTo(r.Name)); int num = 0; foreach (WebParameter webParameter in parameters.Where((WebParameter parameter) => !OAuthRequest.IsNullOrBlank(parameter.Name) && !OAuthRequest.IsNullOrBlank(parameter.Value) && (parameter.Name.StartsWith("oauth_") || parameter.Name.StartsWith("x_auth_")))) { num++; string format = (num >= parameters.Count) ? "{0}=\"{1}\"" : "{0}=\"{1}\","; stringBuilder.AppendFormat(format, webParameter.Name, webParameter.Value); } return(stringBuilder.ToString()); }
/// <summary> /// Sorts a <see cref="T:OAuth.WebParameterCollection" /> by name, and then value if equal. /// </summary> /// <param name="parameters">A collection of parameters to sort</param> /// <returns>A sorted parameter collection</returns> public static WebParameterCollection SortParametersExcludingSignature( WebParameterCollection parameters) { WebParameterCollection source = new WebParameterCollection((IEnumerable <WebParameter>)parameters); IEnumerable <WebParameter> parameters1 = source.Where <WebParameter>((Func <WebParameter, bool>)(n => OAuthTools.EqualsIgnoreCase(n.Name, "oauth_signature"))); source.RemoveAll(parameters1); foreach (WebParameter webParameter in source) { webParameter.Value = OAuthTools.UrlEncodeStrict(webParameter.Value); } source.Sort((Comparison <WebParameter>)((x, y) => { if (!x.Name.Equals(y.Name)) { return(x.Name.CompareTo(y.Name)); } return(x.Value.CompareTo(y.Value)); })); return(source); }
public static string NormalizeRequestParameters(WebParameterCollection parameters) { WebParameterCollection collection = OAuthTools.SortParametersExcludingSignature(parameters); return(OAuthTools.Concatenate(collection, "=", "&")); }
public static string UrlEncodeStrict(string value) { string text = value.Where((char c) => !"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-._~".Contains(c) && c != '%').Aggregate(value, (string current, char c) => current.Replace(c.ToString(), OAuthTools.PercentEncode(c.ToString()))); return(text.Replace("%%", "%25%")); }
public static string UrlEncodeRelaxed(string value) { string text = Uri.EscapeDataString(value); return(text.Replace("(", OAuthTools.PercentEncode("(")).Replace(")", OAuthTools.PercentEncode(")"))); }
public static string GetTimestamp(DateTime dateTime) { return(OAuthTools.ToUnixTime(dateTime).ToString()); }
public static string GetTimestamp() { return(OAuthTools.GetTimestamp(DateTime.UtcNow)); }
/// <summary> /// URL encodes a string based on section 5.1 of the OAuth spec. /// Namely, percent encoding with [RFC3986], avoiding unreserved characters, /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. /// </summary> /// <param name="value"></param> /// <seealso href="http://oauth.net/core/1.0#encoding_parameters" /> public static string UrlEncodeStrict(string value) { return(value.Where <char>((Func <char, bool>)(c => { if (!"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-._~".Contains <char>(c)) { return c != '%'; } return false; })).Aggregate <char, string>(value, (Func <string, char, string>)((current, c) => current.Replace(c.ToString(), OAuthTools.PercentEncode(c.ToString())))).Replace("%%", "%25%")); }