Exemple #1
0
 protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
 {
     // only authenticated requests write json, everything uses GET and url params
     if (CanMakeAuthenticatedRequest(payload))
     {
         request.AddHeader("Authorization", CryptoUtility.BasicAuthenticationString(PublicApiKey.ToUnsecureString(), PrivateApiKey.ToUnsecureString()));
         if (request.Method == "POST")
         {
             await CryptoUtility.WritePayloadJsonToRequestAsync(request, payload);
         }
     }
 }
        protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            if (PrivateApiKey != null && PublicApiKey != null)
            {
                request.AddHeader("Authorization",
                                  CryptoUtility.BasicAuthenticationString(PublicApiKey.ToUnsecureString(),
                                                                          PrivateApiKey.ToUnsecureString()));
            }

            if (CanMakeAuthenticatedRequest(payload))
            {
                request.AddHeader("apToken", authenticationDetails.Token);
                payload.Add("OMSId", authenticationDetails.OMSId);
                payload.Add("AccountId", authenticationDetails.AccountId);
            }

            if (request.Method == "POST")
            {
                await request.WritePayloadJsonToRequestAsync(payload);
            }
        }
Exemple #3
0
        protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            if (!CanMakeAuthenticatedRequest(payload))
            {
                return;
            }
            // We don't need nonce in the request. Using it only to not break CanMakeAuthenticatedRequest.
            payload.Remove("nonce");

            var method     = request.Method;
            var now        = DateTime.Now;
            var timeStamp  = TimeZoneInfo.ConvertTimeToUtc(now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
            var requestUrl = request.RequestUri.PathAndQuery;
            var body       = payload.Any() ? JsonConvert.SerializeObject(payload) : string.Empty;

            var sign = string.IsNullOrEmpty(body)
                                ? CryptoUtility.SHA256SignBase64($"{timeStamp}{method}{requestUrl}",
                                                                 PrivateApiKey !.ToUnsecureString().ToBytesUTF8())
                                : CryptoUtility.SHA256SignBase64($"{timeStamp}{method}{requestUrl}{body}",
                                                                 PrivateApiKey !.ToUnsecureString().ToBytesUTF8());

            request.AddHeader("OK-ACCESS-KEY", PublicApiKey !.ToUnsecureString());
            request.AddHeader("OK-ACCESS-SIGN", sign);
            request.AddHeader("OK-ACCESS-TIMESTAMP", timeStamp);
            request.AddHeader("OK-ACCESS-PASSPHRASE", Passphrase !.ToUnsecureString());
            request.AddHeader("x-simulated-trading", "0");
            request.AddHeader("content-type", "application/json");

            if (request.Method == "POST")
            {
                await request.WritePayloadJsonToRequestAsync(payload);
            }
        }
Exemple #4
0
 protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
 {
     if (CanMakeAuthenticatedRequest(payload))
     {
         if (request.Method == "POST")
         {
             request.AddHeader("content-type", "application/json");
             payload.Remove("nonce");
             var msg = CryptoUtility.GetJsonForPayload(payload);
             await CryptoUtility.WriteToRequestAsync(request, msg);
         }
     }
 }
 protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
 {
     if (CanMakeAuthenticatedRequest(payload))
     {
         // Coinbase is funny and wants a seconds double for the nonce, weird... we convert it to double and back to string invariantly to ensure decimal dot is used and not comma
         string timestamp = payload["nonce"].ToStringInvariant();
         payload.Remove("nonce");
         string form   = CryptoUtility.GetJsonForPayload(payload);
         byte[] secret = CryptoUtility.ToBytesBase64Decode(PrivateApiKey);
         string toHash = timestamp + request.Method.ToUpperInvariant() + request.RequestUri.PathAndQuery + form;
         string signatureBase64String = CryptoUtility.SHA256SignBase64(toHash, secret);
         secret = null;
         toHash = null;
         request.AddHeader("CB-ACCESS-KEY", PublicApiKey.ToUnsecureString());
         request.AddHeader("CB-ACCESS-SIGN", signatureBase64String);
         request.AddHeader("CB-ACCESS-TIMESTAMP", timestamp);
         request.AddHeader("CB-ACCESS-PASSPHRASE", CryptoUtility.ToUnsecureString(Passphrase));
         if (request.Method == "POST")
         {
             await CryptoUtility.WriteToRequestAsync(request, form);
         }
     }
 }
Exemple #6
0
        protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            if (CanMakeAuthenticatedRequest(payload))
            {
                if (payload.TryGetValue("body", out var body))
                {
                    payload.Remove("body");
                }

                var nonce = payload["nonce"].ToString();
                payload.Remove("nonce");


                var json = JsonConvert.SerializeObject(body ?? payload);
                if (json == "{}")
                {
                    json = "";
                }

                var passphrase = Passphrase?.ToUnsecureString();
                if (string.IsNullOrEmpty(passphrase))
                {
                    passphrase = PrivateApiKey?.ToUnsecureString();
                }

                var hexSha384 = CryptoUtility.SHA384Sign(
                    $"{request.RequestUri.PathAndQuery.Replace("/spot", string.Empty)}{nonce}{json}",
                    passphrase);
                request.AddHeader("btse-sign", hexSha384);
                request.AddHeader("btse-nonce", nonce);
                request.AddHeader("btse-api", PublicApiKey.ToUnsecureString());
                await request.WriteToRequestAsync(json);
            }

            await base.ProcessRequestAsync(request, payload);
        }
        protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            // Only Private APIs are POST and need Authorization
            if (CanMakeAuthenticatedRequest(payload) && request.Method == "POST")
            {
                var signature = string.Empty;
                payload.Add("key", PublicApiKey.ToUnsecureString());

                var jsonContent = payload.GetJsonForPayload();

                if (!string.IsNullOrEmpty(jsonContent))
                {
                    signature = CryptoUtility.SHA512Sign(jsonContent, PrivateApiKey.ToUnsecureBytesUTF8()).ToLowerInvariant();
                }
                request.AddHeader("Hash", signature);
                var content = jsonContent.ToBytesUTF8();
                await request.WriteAllAsync(content, 0, content.Length);
            }
        }
Exemple #8
0
        protected override Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            if (CanMakeAuthenticatedRequest(payload))
            {
                payload.Remove("nonce");
                var bodyPayload   = payload.Where(_ => _.Key.StartsWith("body.")).ToDictionary(_ => _.Key.Substring(5), _ => _.Value);
                var headerPayload = payload.Where(_ => !_.Key.StartsWith("body.")).ToDictionary(_ => _.Key, _ => _.Value);
                foreach (var item in headerPayload)
                {
                    request.AddHeader(item.Key, item.Value.ToString());
                }

                if (request.Method == "POST" && bodyPayload.Count() > 0)
                {
                    //var query = CryptoUtility.GetFormForPayload(bodyPayload);
                    var form = request.WritePayloadFormToRequestAsync(bodyPayload).Result;
                }
            }
            return(base.ProcessRequestAsync(request, payload));
        }