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");
     }
 }
Beispiel #2
0
        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));
     }
 }
Beispiel #4
0
        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));
     }
 }
Beispiel #6
0
 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");
     }
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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));
     }
 }
Beispiel #11
0
        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)));
            }
        }
Beispiel #14
0
        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);
        }
Beispiel #16
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();
            }
        }
Beispiel #19
0
        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));
 }
Beispiel #27
0
 private void SetHostHeader(RestSharp.IRestRequest request, RestSharp.IRestClient client)
 {
     request.AddHeader("Host", client.BaseUrl.Host + (client.BaseUrl.Port != 80 ? ":" + client.BaseUrl.Port : string.Empty));
 }
Beispiel #28
0
 private void SetDateHeader(RestSharp.IRestRequest request, DateTime signingDate)
 {
     request.AddHeader("x-amz-date", signingDate.ToString("yyyyMMddTHHmmssZ"));
 }
Beispiel #29
0
 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
 }
Beispiel #30
0
 protected async override Task <Implementation.PreparedTrackingRequest> PrepareRequestAsync(RestSharp.IRestRequest request, IEnumerable <Implementation.ITrackingFinalize> finalizationQueue)
 {
     return(new PreparedTrackingRequest(this, request, finalizationQueue));
 }