public void PostProcess(RestSharp.IRestRequest request) { if (!request.Parameters.Any(x => x.Name == "dp")) { throw new InvalidOperationException("GAPageView requests require the GAPath module to be used"); } }
public string PresignURL(RestSharp.IRestClient client, RestSharp.IRestRequest request, int expires) { DateTime signingDate = DateTime.UtcNow; string requestQuery = ""; string path = request.Resource; requestQuery = "X-Amz-Algorithm=AWS4-HMAC-SHA256&"; requestQuery += "X-Amz-Credential=" + this.AccessKeyId + Uri.EscapeDataString("/" + GetScope(Region, signingDate)) + "&"; requestQuery += "X-Amz-Date=" + signingDate.ToString("yyyyMMddTHHmmssZ") + "&"; requestQuery += "X-Amz-Expires=" + expires + "&"; requestQuery += "X-Amz-SignedHeaders=host"; string canonicalRequest = GetPresignCanonicalRequest(client, request, requestQuery); byte[] canonicalRequestBytes = System.Text.Encoding.UTF8.GetBytes(canonicalRequest); string canonicalRequestHash = BytesToHex(ComputeSha256(canonicalRequestBytes)); string stringToSign = GetStringToSign(Region, signingDate, canonicalRequestHash); byte[] signingKey = GenerateSigningKey(Region, signingDate); byte[] stringToSignBytes = System.Text.Encoding.UTF8.GetBytes(stringToSign); byte[] signatureBytes = SignHmac(signingKey, stringToSignBytes); string signature = BytesToHex(signatureBytes); // Return presigned url. return(client.BaseUrl + path + "?" + requestQuery + "&X-Amz-Signature=" + signature); }
public void PreProcess(RestSharp.IRestRequest request) { if (!Name.IsNullOrWhitespace()) { request.AddParameterExclusive("cn", Name.Truncate(100)); } if (!Source.IsNullOrWhitespace()) { request.AddParameterExclusive("cs", Source.Truncate(100)); } if (!Medium.IsNullOrWhitespace()) { request.AddParameterExclusive("cm", Medium.Truncate(50)); } if (!Keyword.IsNullOrWhitespace()) { request.AddParameterExclusive("ck", Keyword.Truncate(500)); } if (!Content.IsNullOrWhitespace()) { request.AddParameterExclusive("cc", Content.Truncate(500)); } if (!ID.IsNullOrWhitespace()) { request.AddParameterExclusive("ci", ID.Truncate(100)); } }
protected async override Task PreProcessAsync(RestSharp.IRestRequest request) { // Add protocol version // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters request.AddParameterExclusive("v", ProtocolVersion); // Add account tracking ID // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters request.AddParameterExclusive("tid", TrackingID); // Anonymize IP flag // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters if (AnonymizeIP) { request.AddParameterExclusive("aip", 1); } // Screen resolution // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters // TODO: Add support for gathering screen bounds in a cross-platform safe manner // var screenArea = System.Windows.Forms.Screen.PrimaryScreen.Bounds; // request.AddParameterExclusive("sr", string.Format("{0}x{1}", screenArea.Width, screenArea.Height)); // Document encoding // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters request.AddParameterExclusive("de", Encoding.Default.BodyName); // User language // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters request.AddParameterExclusive("ul", System.Threading.Thread.CurrentThread.CurrentCulture.Name); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusiveOrThrow("t", "item"); request.AddParameterExclusive("ti", TransactionID.Truncate(500)); request.AddParameterExclusive("in", Name.Truncate(500)); if (Price.HasValue) { request.AddParameterExclusive("ip", Price.Value); } if (Quantity.HasValue) { request.AddParameterExclusive("iq", Quantity.Value); } if (!Code.IsNullOrWhitespace()) { request.AddParameterExclusive("ic", Code.Truncate(500)); } if (!Category.IsNullOrWhitespace()) { request.AddParameterExclusive("iv", Category.Truncate(500)); } if (!CurrencyCode.IsNullOrWhitespace()) { request.AddParameterExclusive("cu", CurrencyCode.Truncate(10)); } }
private void SetContentSha256(RestSharp.IRestRequest request) { if (request.Method == RestSharp.Method.PUT || request.Method.Equals(RestSharp.Method.POST)) { var bodyParameter = request.Parameters.Where(p => p.Type.Equals(RestSharp.ParameterType.RequestBody)).FirstOrDefault(); if (bodyParameter == null) { request.AddHeader("x-amz-content-sha256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); return; } byte[] body = null; if (bodyParameter.Value is string) { body = System.Text.Encoding.UTF8.GetBytes(bodyParameter.Value as string); } if (bodyParameter.Value is byte[]) { body = bodyParameter.Value as byte[]; } if (body == null) { body = new byte[0]; } SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(body); string hex = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower(); request.AddHeader("x-amz-content-sha256", hex); } else { request.AddHeader("x-amz-content-sha256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); } }
public void Authenticate(RestSharp.IRestClient client, RestSharp.IRestRequest request) { DateTime signingDate = DateTime.UtcNow; SetContentMd5(request); SetContentSha256(request); SetHostHeader(request, client); SetDateHeader(request, signingDate); SortedDictionary <string, string> headersToSign = GetHeadersToSign(request); string signedHeaders = GetSignedHeaders(headersToSign); string canonicalRequest = GetCanonicalRequest(client, request, headersToSign); byte[] canonicalRequestBytes = System.Text.Encoding.UTF8.GetBytes(canonicalRequest); string canonicalRequestHash = BytesToHex(ComputeSha256(canonicalRequestBytes)); string stringToSign = GetStringToSign(Region, signingDate, canonicalRequestHash); byte[] signingKey = GenerateSigningKey(Region, signingDate); byte[] stringToSignBytes = System.Text.Encoding.UTF8.GetBytes(stringToSign); byte[] signatureBytes = SignHmac(signingKey, stringToSignBytes); string signature = BytesToHex(signatureBytes); string authorization = GetAuthorizationHeader(signedHeaders, signature, signingDate, Region); request.AddHeader("Authorization", authorization); }
private void SetContentMd5(RestSharp.IRestRequest request) { if (request.Method == RestSharp.Method.PUT || request.Method.Equals(RestSharp.Method.POST)) { var bodyParameter = request.Parameters.Where(p => p.Type.Equals(RestSharp.ParameterType.RequestBody)).FirstOrDefault(); if (bodyParameter == null) { return; } byte[] body = null; if (bodyParameter.Value is string) { body = System.Text.Encoding.UTF8.GetBytes(bodyParameter.Value as string); } if (bodyParameter.Value is byte[]) { body = bodyParameter.Value as byte[]; } if (body == null) { body = new byte[0]; } MD5 md5 = MD5.Create(); byte[] hash = md5.ComputeHash(body); string base64 = Convert.ToBase64String(hash); request.AddHeader("Content-MD5", base64); } }
public ApiResult <T> ExecutePublicRequest <T>(RestSharp.IRestRequest request, string contentPath = null) { try { var sw = Stopwatch.StartNew(); var response = client.Execute(request); sw.Stop(); if (response.IsSuccessful) { Log.DebugFormat("{0} {1} - {2}ms : {3} ({4}).", request.Method.ToString(), client.BuildUri(request), sw.ElapsedMilliseconds, response.StatusDescription, (int)response.StatusCode); #if DEBUG if (contentPath != null) { File.WriteAllText(contentPath, response.Content); } #endif var data = JsonConvert.DeserializeObject <T>(response.Content); return(new ApiResult <T>(data, null, sw.ElapsedMilliseconds)); } else { Log.WarnFormat("{0} {1} - {2}ms : {3} ({4}).", request.Method.ToString(), client.BuildUri(request), sw.ElapsedMilliseconds, response.StatusDescription, (int)response.StatusCode); return(new ApiResult <T>(default(T), new ApiError((int)response.StatusCode, response.StatusDescription), sw.ElapsedMilliseconds)); } } catch (Exception ex) { Log.Error(string.Format("{0} {1} failed.", request.Method.ToString(), client.BuildUri(request)), ex); return(new ApiResult <T>(default(T), new ApiError(-1, ex.Message))); } finally { } }
public void PreProcess(RestSharp.IRestRequest request) { if (!Value.IsNullOrWhitespace()) { request.AddParameterExclusiveOrThrow(string.Format("cd{0}", Index), Value.Truncate(150)); } }
private string GetCanonicalRequest(RestSharp.IRestClient client, RestSharp.IRestRequest request, SortedDictionary <string, string> headersToSign) { LinkedList <string> canonicalStringList = new LinkedList <string>(); canonicalStringList.AddLast(request.Method.ToString()); if (!string.IsNullOrWhiteSpace(request.Resource)) { string[] path = request.Resource.Split(new char[] { '?' }, 2); if (!path[0].StartsWith("/")) { path[0] = "/" + path[0]; } canonicalStringList.AddLast(path[0]); string query = ""; if (path.Length == 2) { var parameterString = path[1]; var parameterList = parameterString.Split('&'); SortedSet <string> sortedQueries = new SortedSet <string>(); foreach (string individualParameterString in parameterList) { if (individualParameterString.Contains('=')) { string[] splitQuery = individualParameterString.Split(new char[] { '=' }, 2); sortedQueries.Add(splitQuery[0] + "=" + splitQuery[1]); } else { sortedQueries.Add(individualParameterString + "="); } } query = string.Join("&", sortedQueries); } canonicalStringList.AddLast(query); } foreach (string header in headersToSign.Keys) { canonicalStringList.AddLast(header + ":" + headersToSign[header]); } canonicalStringList.AddLast(""); canonicalStringList.AddLast(string.Join(";", headersToSign.Keys)); if (headersToSign.Keys.Contains("x-amz-content-sha256")) { canonicalStringList.AddLast(headersToSign["x-amz-content-sha256"]); } else { canonicalStringList.AddLast("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); } return(string.Join("\n", canonicalStringList)); }
public void PreProcess(RestSharp.IRestRequest request) { if (!Category.IsNullOrEmpty()) { request.AddParameterExclusive("utc", Category.Truncate(150)); } if (!Label.IsNullOrEmpty()) { request.AddParameterExclusive("utl", Label.Truncate(500)); } request.AddParameterExclusive("utv", Variable.Truncate(500)); request.AddParameterExclusive("utt", Milliseconds); }
internal async Task <ApiResult <T> > ExecutePublicRequestAsync <T>(RestSharp.IRestRequest request) where T : new() { var result = await client.ExecuteTaskAsync <T>(request); if (result.StatusCode == System.Net.HttpStatusCode.OK) { return(new ApiResult <T>(result.Data, null)); } else { var err = JsonConvert.DeserializeObject <HitBtc.Error>(result.Content); return(new ApiResult <T>(default(T), new ApiError(err.code, err.message))); } }
private void CopyHeaders(SDK.Http.HttpHeaders httpHeaders, RestSharp.IRestRequest restRequest) { if (httpHeaders == null) { return; } foreach (var header in httpHeaders) { foreach (var value in header.Value) { restRequest.AddHeader(header.Key, value); } } }
public void PreProcess(RestSharp.IRestRequest request) { var description = ""; if (!Source.IsNullOrWhitespace()) { description = string.Format("{0}: ", Source); } if (!Message.IsNullOrWhitespace()) { description = string.Format("{0}{1}", description, Message); } request.AddParameterExclusive("t", "exception"); request.AddParameterExclusive("exd", description.Truncate(150)); request.AddParameterExclusive("exf", Fatal ? 1 : 0); }
private SortedDictionary <string, string> GetHeadersToSign(RestSharp.IRestRequest request) { var headers = request.Parameters.Where(p => p.Type.Equals(RestSharp.ParameterType.HttpHeader)).ToList(); SortedDictionary <string, string> sortedHeaders = new SortedDictionary <string, string>(); foreach (var header in headers) { string headerName = header.Name.ToLower(); string headerValue = header.Value.ToString(); if (!ignoredHeaders.Contains(headerName)) { sortedHeaders.Add(headerName, headerValue); } } return(sortedHeaders); }
public void PreProcess(RestSharp.IRestRequest request) { if (!string.IsNullOrEmpty(Category)) { request.AddParameterExclusive("ec", Category.Truncate(150)); } if (!string.IsNullOrEmpty(Action)) { request.AddParameterExclusive("ea", Action.Truncate(500)); } if (!string.IsNullOrEmpty(Label)) { request.AddParameterExclusive("el", Label.Truncate(500)); } if (Value != 0) { request.AddParameterExclusive("ev", Value); } }
private async Task <RestSharp.IRestResponse> RequestSignedApiAsync(RestSharp.IRestRequest request) { try { await slim.WaitAsync().ConfigureAwait(true); request.AddParameter("nonce", nonce); var content = new FormUrlEncodedContent(request.Parameters.Select(x => new KeyValuePair <string, string>(x.Name, x.Value.ToString()))); var body = await content.ReadAsStringAsync(); request.AddHeader("Key", ApiKey.ToManagedString()); request.AddHeader("Sign", SignRequest(body)); var response = await client.ExecuteTaskAsync(request); return(response); } finally { slim.Release(); } }
private string GetPresignCanonicalRequest(RestSharp.IRestClient client, RestSharp.IRestRequest request, string requestQuery) { LinkedList <string> canonicalStringList = new LinkedList <string>(); canonicalStringList.AddLast(request.Method.ToString()); string path = request.Resource; if (!path.StartsWith("/")) { path = "/" + path; } canonicalStringList.AddLast(path); canonicalStringList.AddLast(requestQuery); canonicalStringList.AddLast("host:" + client.BaseUrl.Host); canonicalStringList.AddLast(""); canonicalStringList.AddLast("host"); canonicalStringList.AddLast("UNSIGNED-PAYLOAD"); return(string.Join("\n", canonicalStringList)); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusiveOrThrow("t", "transaction"); request.AddParameterExclusive("ti", TransactionID.Truncate(500)); if (!Affiliation.IsNullOrWhitespace()) { request.AddParameterExclusive("ta", Affiliation.Truncate(500)); } if (Revenue.HasValue) { request.AddParameterExclusive("tr", Revenue.Value); } if (Shipping.HasValue) { request.AddParameterExclusive("ts", Shipping.Value); } if (Tax.HasValue) { request.AddParameterExclusive("tt", Tax.Value); } }
internal ApiResult <T> ExecutePublicRequest <T>(RestSharp.IRestRequest request) where T : new() { return(ExecutePublicRequestAsync <T>(request).Result); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusive("ni", 1); }
public void Authenticate(RestSharp.IRestClient client, RestSharp.IRestRequest request) { request.AddHeader("Authorization", "Bearer " + _accessToken); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusiveOrThrow(string.Format("cm{0}", Index), Value); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusive("vp", string.Format("{0}x{1}", Width, Height)); }
public void PreProcess(RestSharp.IRestRequest request) { request.AddParameterExclusive("dt", Value.Truncate(1500)); }
private void SetHostHeader(RestSharp.IRestRequest request, RestSharp.IRestClient client) { request.AddHeader("Host", client.BaseUrl.Host + (client.BaseUrl.Port != 80 ? ":" + client.BaseUrl.Port : string.Empty)); }
private void SetDateHeader(RestSharp.IRestRequest request, DateTime signingDate) { request.AddHeader("x-amz-date", signingDate.ToString("yyyyMMddTHHmmssZ")); }
protected async override Task PostProcessAsync(RestSharp.IRestRequest request) { // Hit type (default) // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters request.AddParameterExclusive("t", "appview"); //If we haven't set a type before this point }
protected async override Task <Implementation.PreparedTrackingRequest> PrepareRequestAsync(RestSharp.IRestRequest request, IEnumerable <Implementation.ITrackingFinalize> finalizationQueue) { return(new PreparedTrackingRequest(this, request, finalizationQueue)); }