public void EncodeCityHmacSignatureTest() { HmacEncoder target = new HmacEncoder(); // TODO: Initialize to an appropriate value string input = "1000000GEThttps://api.onthecity.org/groups/index"; // TODO: Initialize to an appropriate value string key = "1111111111111111111111111111111111111111"; // TODO: Initialize to an appropriate value string expected = "IT4oCvIuEF%2FdfJis%2FORNA5eig920vGp9zEo6k5MqRGU%3D"; // TODO: Initialize to an appropriate value string unicodeResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.Unicode); string asciiResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.ASCII); string bigEndianUnicodeResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.BigEndianUnicode); string defaultResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.Default); string utf32Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF32); string utf7Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF7); string utf8Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF8); //string sbcsCodePageResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.GetEncodings().); Dictionary<string, string> encodingResults = new Dictionary<string, string>(); List<string> workingEncodings = new List<string>(); List<string> nonWorkingEncodings = new List<string>(); foreach (var enc in System.Text.Encoding.GetEncodings()) { string result = target.EncodeCityHmacSignature(input, key, enc.GetEncoding()); encodingResults[enc.Name + " - " + enc.DisplayName] = result; if (result == expected) { workingEncodings.Add(enc.Name + " - " + enc.DisplayName); } else { nonWorkingEncodings.Add(enc.Name + " - " + enc.DisplayName); } } Assert.Inconclusive("Verify the correctness of this test method."); }
internal string ExecuteGetRequest(CityAPISession session, string relativeUrl) { int timeSecs = GetUnixEpochTimeSecs(); if (!relativeUrl.StartsWith("/")) { relativeUrl = "/" + relativeUrl; } string cityApiHost = "api.onthecity.org"; string absoluteUrl = string.Format("https://{0}{1}", cityApiHost, relativeUrl); // city API requests require query string params to be in alphabetical order Uri absoluteUri = new Uri(absoluteUrl); string queryString = absoluteUri.Query; if (!string.IsNullOrEmpty(queryString)) { var queryParams = System.Web.HttpUtility.ParseQueryString(queryString); List<string> sortedSegments = new List<string>(); queryString = string.Join("&", queryParams.AllKeys.OrderBy(k => k).ToList().Select(key => key + "=" + queryParams[key]).ToArray()); relativeUrl = absoluteUri.AbsolutePath + "?" + queryString; absoluteUrl = string.Format("https://{0}{1}", cityApiHost, relativeUrl); } string httpVerb = "GET"; string constructedSignatureUrl = ConstructHmacUrl(timeSecs, httpVerb, absoluteUrl); string hmacSignature = new HmacEncoder().EncodeCityHmacSignature(constructedSignatureUrl, session.SecretKey); System.Net.HttpWebRequest wc = (HttpWebRequest)WebRequest.Create(absoluteUrl); wc.KeepAlive = false; wc.Headers.Clear(); wc.Headers.Add("X-City-Sig", hmacSignature); wc.Headers.Add("X-City-User-Token", session.UserToken); wc.Headers.Add("X-City-Time", timeSecs.ToString()); wc.Accept = "application/vnd.thecity.admin.v1+json"; wc.ContentType = "application/json"; wc.ContentLength = 0; wc.UserAgent = "TheCity .NET API, Brandon Potter"; // uncomment to use Fiddler //wc.Proxy = new WebProxy("127.0.0.1", 8888); try { HttpWebResponse resp = (HttpWebResponse)wc.GetResponse(); string stringResponse = null; using (Stream s = resp.GetResponseStream()) { using (StreamReader reader = new StreamReader(s)) { var responseText = reader.ReadToEnd(); stringResponse = responseText; } } ProcessAPILimitResponseHeaders(resp.Headers, session); return stringResponse; } catch (WebException ex) { HttpWebResponse resp = (HttpWebResponse)ex.Response; using (Stream s = resp.GetResponseStream()) { using (StreamReader reader = new StreamReader(s)) { var responseText = reader.ReadToEnd(); Util.JsonParser jp = new Util.JsonParser(); var result = jp.Parse(responseText); string errorMsg = result.error_message; //if (errorMsg.Contains("signature")) //{ if (System.Diagnostics.Debugger.IsAttached) { throw new Exception(ex.Message + System.Environment.NewLine + errorMsg + System.Environment.NewLine + System.Environment.NewLine + BuildSignatureDebugInfo(constructedSignatureUrl, timeSecs.ToString(), session.UserToken, session.SecretKey, hmacSignature)); } else { if (string.IsNullOrEmpty(errorMsg)) { throw new Exception(ex.Message); } else { throw new Exception(errorMsg); } } //} // throw new Exception(errorMsg ?? responseText); } } } }
public void EncodeCityHmacSignatureTestWithQueryString() { HmacEncoder target = new HmacEncoder(); // TODO: Initialize to an appropriate value string input = "1000000GEThttps://api.onthecity.org/groups?search=Adventure"; // TODO: Initialize to an appropriate value string key = "1111111111111111111111111111111111111111"; // TODO: Initialize to an appropriate value string expected = "mIGAq0V1OARP16E8wj2US5tU4xgOflQwYKIhK8zVhlQ%3D"; // TODO: Initialize to an appropriate value string unicodeResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.Unicode); string asciiResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.ASCII); string bigEndianUnicodeResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.BigEndianUnicode); string defaultResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.Default); string utf32Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF32); string utf7Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF7); string utf8Result = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.UTF8); //string sbcsCodePageResult = target.EncodeCityHmacSignature(input, key, System.Text.Encoding.GetEncodings().); Dictionary<string, string> encodingResults = new Dictionary<string, string>(); List<string> workingEncodings = new List<string>(); List<string> nonWorkingEncodings = new List<string>(); foreach (var enc in System.Text.Encoding.GetEncodings()) { string result = target.EncodeCityHmacSignature(input, key, enc.GetEncoding()); encodingResults[enc.Name + " - " + enc.DisplayName] = result; if (result == expected) { workingEncodings.Add(enc.Name + " - " + enc.DisplayName); } else { nonWorkingEncodings.Add(enc.Name + " - " + enc.DisplayName); } } Assert.Inconclusive("Verify the correctness of this test method."); }