using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Security.Cryptography; using System.Text; namespace Prime31 { // Token: 0x0200000A RID: 10 public class OAuthManager { // Token: 0x06000023 RID: 35 RVA: 0x00003078 File Offset: 0x00001278 public OAuthManager() { this._random = new Random(); this._params = new SortedDictionary(); this._params["consumer_key"] = ""; this._params["consumer_secret"] = ""; this._params["timestamp"] = this.generateTimeStamp(); this._params["nonce"] = this.generateNonce(); this._params["signature_method"] = "HMAC-SHA1"; this._params["signature"] = ""; this._params["token"] = ""; this._params["token_secret"] = ""; this._params["version"] = "1.0"; } // Token: 0x06000024 RID: 36 RVA: 0x00003164 File Offset: 0x00001364 public OAuthManager(string consumerKey, string consumerSecret, string token, string tokenSecret) : this() { this._params["consumer_key"] = consumerKey; this._params["consumer_secret"] = consumerSecret; this._params["token"] = token; this._params["token_secret"] = tokenSecret; } // Token: 0x17000004 RID: 4 public string this[string ix] { get { if (this._params.ContainsKey(ix)) { return this._params[ix]; } throw new ArgumentException(ix); } set { if (!this._params.ContainsKey(ix)) { throw new ArgumentException(ix); } this._params[ix] = value; } } // Token: 0x06000027 RID: 39 RVA: 0x00003224 File Offset: 0x00001424 private string generateTimeStamp() { return Convert.ToInt64((DateTime.UtcNow - OAuthManager._epoch).TotalSeconds).ToString(); } // Token: 0x06000028 RID: 40 RVA: 0x00003263 File Offset: 0x00001463 private void prepareNewRequest() { this._params["nonce"] = this.generateNonce(); this._params["timestamp"] = this.generateTimeStamp(); } // Token: 0x06000029 RID: 41 RVA: 0x00003294 File Offset: 0x00001494 private string generateNonce() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 8; i++) { int num = this._random.Next(3); if (num != 0) { stringBuilder.Append((char)(this._random.Next(10) + 48), 1); } else { stringBuilder.Append((char)(this._random.Next(26) + 97), 1); } } return stringBuilder.ToString(); } // Token: 0x0600002A RID: 42 RVA: 0x00003320 File Offset: 0x00001520 private SortedDictionary extractQueryParameters(string queryString) { if (queryString.StartsWith("?")) { queryString = queryString.Remove(0, 1); } SortedDictionary sortedDictionary = new SortedDictionary(); SortedDictionary result; if (string.IsNullOrEmpty(queryString)) { result = sortedDictionary; } else { foreach (string text in queryString.Split(new char[] { '&' })) { if (!string.IsNullOrEmpty(text) && !text.StartsWith("oauth_")) { if (text.IndexOf('=') > -1) { string[] array2 = text.Split(new char[] { '=' }); sortedDictionary.Add(array2[0], array2[1]); } else { sortedDictionary.Add(text, string.Empty); } } } result = sortedDictionary; } return result; } // Token: 0x0600002B RID: 43 RVA: 0x000033FC File Offset: 0x000015FC public static string urlEncode(string value) { StringBuilder stringBuilder = new StringBuilder(); foreach (char c in value) { if (OAuthManager.unreservedChars.IndexOf(c) != -1) { stringBuilder.Append(c); } else { stringBuilder.Append('%' + string.Format("{0:X2}", (int)c)); } } return stringBuilder.ToString(); } // Token: 0x0600002C RID: 44 RVA: 0x00003484 File Offset: 0x00001684 private static SortedDictionary mergePostParamsWithOauthParams(SortedDictionary postParams, SortedDictionary oAuthParams) { SortedDictionary sortedDictionary = new SortedDictionary(); foreach (KeyValuePair keyValuePair in postParams) { sortedDictionary.Add(keyValuePair.Key, keyValuePair.Value); } foreach (KeyValuePair keyValuePair2 in oAuthParams) { if (!string.IsNullOrEmpty(keyValuePair2.Value) && !keyValuePair2.Key.EndsWith("secret")) { sortedDictionary.Add("oauth_" + keyValuePair2.Key, keyValuePair2.Value); } } return sortedDictionary; } // Token: 0x0600002D RID: 45 RVA: 0x00003584 File Offset: 0x00001784 private static string encodeRequestParameters(SortedDictionary p) { StringBuilder stringBuilder = new StringBuilder(); foreach (KeyValuePair keyValuePair in p) { if (!string.IsNullOrEmpty(keyValuePair.Value) && !keyValuePair.Key.EndsWith("secret")) { stringBuilder.AppendFormat("oauth_{0}=\"{1}\", ", keyValuePair.Key, OAuthManager.urlEncode(keyValuePair.Value)); } } return stringBuilder.ToString().TrimEnd(new char[] { ' ' }).TrimEnd(new char[] { ',' }); } // Token: 0x0600002E RID: 46 RVA: 0x00003654 File Offset: 0x00001854 public static byte[] encodePostParameters(SortedDictionary p) { StringBuilder stringBuilder = new StringBuilder(); foreach (KeyValuePair keyValuePair in p) { if (!string.IsNullOrEmpty(keyValuePair.Value)) { stringBuilder.AppendFormat("{0}={1}, ", OAuthManager.urlEncode(keyValuePair.Key), OAuthManager.urlEncode(keyValuePair.Value)); } } return Encoding.UTF8.GetBytes(stringBuilder.ToString().TrimEnd(new char[] { ' ' }).TrimEnd(new char[] { ',' })); } // Token: 0x0600002F RID: 47 RVA: 0x0000371C File Offset: 0x0000191C public OAuthResponse acquireRequestToken(string uri, string method) { this.prepareNewRequest(); string authorizationHeader = this.getAuthorizationHeader(uri, method); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.Headers.Add("Authorization", authorizationHeader); httpWebRequest.Method = method; OAuthResponse result; using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream())) { OAuthResponse oauthResponse = new OAuthResponse(streamReader.ReadToEnd()); this["token"] = oauthResponse["oauth_token"]; try { if (oauthResponse["oauth_token_secret"] != null) { this["token_secret"] = oauthResponse["oauth_token_secret"]; } } catch { } result = oauthResponse; } } return result; } // Token: 0x06000030 RID: 48 RVA: 0x00003820 File Offset: 0x00001A20 public OAuthResponse acquireAccessToken(string uri, string method, string verifier) { this.prepareNewRequest(); this._params["verifier"] = verifier; string authorizationHeader = this.getAuthorizationHeader(uri, method); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.Headers.Add("Authorization", authorizationHeader); httpWebRequest.Method = method; OAuthResponse result; using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream())) { OAuthResponse oauthResponse = new OAuthResponse(streamReader.ReadToEnd()); this["token"] = oauthResponse["oauth_token"]; this["token_secret"] = oauthResponse["oauth_token_secret"]; result = oauthResponse; } } return result; } // Token: 0x06000031 RID: 49 RVA: 0x00003908 File Offset: 0x00001B08 public string generateCredsHeader(string uri, string method, string realm) { this.prepareNewRequest(); return this.getAuthorizationHeader(uri, method, realm); } // Token: 0x06000032 RID: 50 RVA: 0x0000392C File Offset: 0x00001B2C public string generateAuthzHeader(string uri, string method) { this.prepareNewRequest(); return this.getAuthorizationHeader(uri, method, null); } // Token: 0x06000033 RID: 51 RVA: 0x00003950 File Offset: 0x00001B50 private string getAuthorizationHeader(string uri, string method) { return this.getAuthorizationHeader(uri, method, null); } // Token: 0x06000034 RID: 52 RVA: 0x00003970 File Offset: 0x00001B70 private string getAuthorizationHeader(string uri, string method, string realm) { if (string.IsNullOrEmpty(this._params["consumer_key"])) { throw new ArgumentNullException("consumer_key"); } if (string.IsNullOrEmpty(this._params["signature_method"])) { throw new ArgumentNullException("signature_method"); } this.sign(uri, method); string str = OAuthManager.encodeRequestParameters(this._params); return (!string.IsNullOrEmpty(realm)) ? (string.Format("OAuth realm=\"{0}\", ", realm) + str) : ("OAuth " + str); } // Token: 0x06000035 RID: 53 RVA: 0x00003A10 File Offset: 0x00001C10 private void sign(string uri, string method) { string signatureBase = this.getSignatureBase(uri, method); HashAlgorithm hash = this.getHash(); byte[] bytes = Encoding.ASCII.GetBytes(signatureBase); byte[] inArray = hash.ComputeHash(bytes); this["signature"] = Convert.ToBase64String(inArray); } // Token: 0x06000036 RID: 54 RVA: 0x00003A54 File Offset: 0x00001C54 private string getSignatureBase(string url, string method) { Uri uri = new Uri(url); string text = string.Format("{0}://{1}", uri.Scheme, uri.Host); if ((!(uri.Scheme == "http") || uri.Port != 80) && (!(uri.Scheme == "https") || uri.Port != 443)) { text = text + ":" + uri.Port; } text += uri.AbsolutePath; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(method).Append('&').Append(OAuthManager.urlEncode(text)).Append('&'); SortedDictionary sortedDictionary = this.extractQueryParameters(uri.Query); foreach (KeyValuePair keyValuePair in this._params) { if (!string.IsNullOrEmpty(this._params[keyValuePair.Key]) && !keyValuePair.Key.EndsWith("_secret") && !keyValuePair.Key.EndsWith("signature")) { sortedDictionary.Add("oauth_" + keyValuePair.Key, keyValuePair.Value); } } StringBuilder stringBuilder2 = new StringBuilder(); foreach (KeyValuePair keyValuePair2 in sortedDictionary) { stringBuilder2.AppendFormat("{0}={1}&", keyValuePair2.Key, keyValuePair2.Value); } stringBuilder.Append(OAuthManager.urlEncode(stringBuilder2.ToString().TrimEnd(new char[] { '&' }))); return stringBuilder.ToString(); } // Token: 0x06000037 RID: 55 RVA: 0x00003C70 File Offset: 0x00001E70 private HashAlgorithm getHash() { if (this["signature_method"] != "HMAC-SHA1") { throw new NotImplementedException(); } string s = string.Format("{0}&{1}", OAuthManager.urlEncode(this["consumer_secret"]), OAuthManager.urlEncode(this["token_secret"])); return new HMACSHA1 { Key = Encoding.ASCII.GetBytes(s) }; } // Token: 0x0400000F RID: 15 private static readonly DateTime _epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); // Token: 0x04000010 RID: 16 private SortedDictionary _params; // Token: 0x04000011 RID: 17 private Random _random; // Token: 0x04000012 RID: 18 private static string unreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"; } }