Ejemplo n.º 1
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)
                if (request.Method == "POST")
                {
                    //var query = CryptoUtility.GetFormForPayload(bodyPayload);
                    payload["key"]       = PublicApiKey.ToUnsecureString();
                    payload["timestamp"] = (Int64)DateTime.UtcNow.UnixTimestampFromDateTimeMilliseconds();
                    var msg = string.Join("&",
                                          payload.Where(_ => !string.IsNullOrEmpty(payload[_.Key].ToString()))
                                          .OrderBy(_ => _.Key)
                                          .Select(_ => string.Format("{0}={1}", _.Key.UrlEncode(), _.Value.ToStringInvariant().UrlEncode()))
                                          );
                    payload["sign"] = CryptoUtility.SHA256Sign(msg, PrivateApiKey.ToUnsecureString());

                    var form = request.WritePayloadJsonToRequestAsync(payload).Result;
                }
            }
            return(base.ProcessRequestAsync(request, payload));
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
0
        protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload)
        {
            if (CanMakeAuthenticatedRequest(payload))
            {
                // convert nonce to long, trim off milliseconds
                var nonce = payload["nonce"].ConvertInvariant <long>();
                payload.Remove("nonce");
                var stringToCommit = String.Empty;
                if (request.Method == "POST")
                {
                    var msg = CryptoUtility.GetJsonForPayload(payload);
                    stringToCommit = $"{nonce}{msg}";
                    await request.WritePayloadJsonToRequestAsync(payload);
                }
                else if (request.Method == "GET")
                {
                    stringToCommit = $"{nonce}{request.RequestUri.PathAndQuery}";
                }
                else
                {
                    throw new APIException($"BitBank does not support {request.Method} as its HTTP method!");
                }
                string signature = CryptoUtility.SHA256Sign(stringToCommit, CryptoUtility.ToUnsecureBytesUTF8(PrivateApiKey));

                request.AddHeader("ACCESS-NONCE", nonce.ToStringInvariant());
                request.AddHeader("ACCESS-KEY", PublicApiKey.ToUnsecureString());
                request.AddHeader("ACCESS-SIGNATURE", signature);
            }
            return;
        }
Ejemplo n.º 4
0
        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);
            }
        }