protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrl = request.RequestUrl;
            var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl);

            var timestamp = (request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture);
            var body      = request.RequestBody;
            var method    = request.Method;
            var url       = absoluteUri.ToString();

            var passphrase = _authContainer.Passphrase;
            var apiKey     = _authContainer.ApiKey;

            // Caution: Use the relative URL, *NOT* the absolute one.
            var signature = _authContainer.ComputeSignature(timestamp, relativeUrl, method, body);

            using (var httpClient = new HttpClient())
            {
                HttpResponseMessage response;

                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timestamp);
                httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase);

                httpClient.DefaultRequestHeaders.Add("User-Agent", "sefbkn.github.io");

                switch (method)
                {
                case "GET":
                    response = await httpClient.GetAsync(absoluteUri);

                    break;

                case "POST":
                    var requestBody = new StringContent(body);
                    response = await httpClient.PostAsync(absoluteUri, requestBody);

                    break;

                default:
                    throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                }


                var contentBody = await response.Content.ReadAsStringAsync();

                var headers    = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess  = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return(genericExchangeResponse);
            }
        }
Esempio n. 2
0
        private async Task <HttpResponseMessage> CoreGetRequest(ExchangeRequestBase request)
        {
            using (var httpClient = new HttpClient())
            {
                var relativeUrl = request.RequestUrl;
                var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl);

                var timeStamp = DateTime.UtcNow.ToUnixTimestamp().ToString(System.Globalization.CultureInfo.InvariantCulture); //(request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture);
                var body      = request.RequestBody;
                var method    = request.Method;
                var url       = absoluteUri.ToString();

                String passphrase = "";
                String apiKey     = "";

                var signature = "";

                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0");

                if (UsePublicExchange == false)
                {
                    passphrase = _authContainer.Passphrase;
                    apiKey     = _authContainer.ApiKey;

                    signature = _authContainer.ComputeSignature(timeStamp, relativeUrl, method, body);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature);

                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timeStamp);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase);
                }

                HttpResponseMessage response = null;
                response = await httpClient.GetAsync(absoluteUri);

                return(response);
            }
        }
Esempio n. 3
0
        protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request)
        {
            var relativeUrlForURL = request.RequestUrl;
            var baseURI           = IsSandbox ? API_SANDBOX_ENDPOINT_URL : API_ENDPOINT_URL;
            var absoluteUri       = new Uri(baseURI, relativeUrlForURL);
            var uriBuilder        = new UriBuilder(absoluteUri);

            uriBuilder.Port = -1;

            // add query parameters
            var requestCasted = request as ExchangePageableRequestBase;
            var nvc           = HttpUtility.ParseQueryString(string.Empty);

            if (request is ExchangePageableRequestBase)
            {
                if (requestCasted.afterCursor != null)
                {
                    nvc["after"] = requestCasted.afterCursor;
                }
                if (requestCasted.RecordCount != null)
                {
                    nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                }
                //if (requestCasted.ZeroBasedCursor < 0)
                //{
                //	nvc["before"] = (Math.Abs(requestCasted.ZeroBasedCursor-1)).ToString(); // change to 1 based
                //	if (requestCasted.RecordCount != null)
                //		nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                //}
                //else if (requestCasted.ZeroBasedCursor > 0)
                //{
                //	nvc["after"] = (requestCasted.ZeroBasedCursor+1).ToString(); // change to 1 based
                //	if (requestCasted.RecordCount != null)
                //		nvc["limit"] = requestCasted.RecordCount.Value.ToString();
                //}
                // else it's zero so no need to put any query parameter
            }
            if (request is GetPersonalOrdersRequest)
            {
                var requestCasted2 = request as GetPersonalOrdersRequest;
                if (requestCasted2.Status != null)
                {
                    foreach (var status in requestCasted2.Status)
                    {
                        nvc.Add("status", status);
                    }
                }
            }
            if (request is CancelAllPersonalOrdersRequest)
            {
                var requestCasted3 = request as CancelAllPersonalOrdersRequest;
                if (requestCasted3.product_id != null)
                {
                    nvc["product_id"] = requestCasted3.product_id;
                }
            }
            if (nvc.Keys.Count > 0)
            {
                uriBuilder.Query = nvc.ToString();
            }

            var body   = request.RequestBody;
            var method = request.Method;
            var url    = uriBuilder.ToString();
            var relativeUrlForSignature = baseURI.MakeRelativeUri(uriBuilder.Uri).ToString();
            await rateGatePolling.WaitToProceedAsync();             // rate limit prior to TimeStamp being generated

            using (var httpClient = new HttpClient())
            {
                if (_authContainer != null)
                {                 // authenticated get, required for querying account specific data, but optional for public data
                                  // Caution: Use the relative URL, *NOT* the absolute one.
                    var signature = _authContainer.ComputeSignature("/" + relativeUrlForSignature, method, body);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", signature.ApiKey);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature.Signature);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", signature.TimeStamp);
                    httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", signature.Passphrase);
                }

                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType));
                httpClient.DefaultRequestHeaders.Add("User-Agent", "vslee fork of sefbkn.github.io");

                HttpResponseMessage response;
                switch (method)
                {
                case "GET":
                    response = await httpClient.GetAsync(url);

                    break;

                case "POST":
                    var requestBody = new StringContent(body, Encoding.UTF8, "application/json");
                    response = await httpClient.PostAsync(url, requestBody);

                    break;

                case "DELETE":
                    response = await httpClient.DeleteAsync(url);

                    break;

                case "PUT":
                    throw new NotImplementedException("PUT");

                default:
                    throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)");
                }

                var contentBody = await response.Content.ReadAsStringAsync();

                var headers    = response.Headers.AsEnumerable();
                var statusCode = response.StatusCode;
                var isSuccess  = response.IsSuccessStatusCode;

                var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody);
                return(genericExchangeResponse);
            }
        }