public Task <T> InvokePost <T>(string factoryId, string endpoint, QueryParamList param)
        {
            ValidateFactoryId(factoryId);
            var request = _requestFactory.Post(endpoint, param, factoryId);

            return(_client.Invoke <T>(request));
        }
        private string GetUrl(RestRequest request, QueryParamList authParameters)
        {
            //if (request.HasData)
            //{
            //	return request.ApiHostWithEndpoint.ToString();
            //}

            return(string.Concat(request.ApiHostWithEndpoint, "?", authParameters.Concat()));
        }
        public QueryParamList GenerateAuthParameters(RestRequest request)
        {
            var parameters = new QueryParamList();

            parameters.Add("access_key", request.AccessKey);
            if (!string.IsNullOrEmpty(request.FactoryId))
            {
                parameters.Add("cloud_id", request.FactoryId);
            }
            parameters.Add("timestamp", Uri.EscapeDataString(GetTimestamp(request.TimeStamp)));

            return(parameters);
        }
        private HttpContent CreateContent(RestRequest request, QueryParamList authParameters)
        {
            if (request.Data == null)
            {
                var dataToSend = authParameters.Concat();

                var content = new ByteArrayContent(Encoding.UTF8.GetBytes(dataToSend));
                content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
                return(content);
            }
            else
            {
                var json    = _serializer.Serialize(request.Data);
                var content = new ByteArrayContent(Encoding.UTF8.GetBytes(json));
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                return(content);
            }
        }
        public string GenerateSignature(RestRequest request, QueryParamList parameters)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            var sb = new StringBuilder();

            sb.Append(Enum.GetName(typeof(RestMethod), request.Method).ToUpperInvariant());
            sb.Append("\n");
            sb.Append(request.ApiHost);
            sb.Append("\n");
            sb.Append("/" + request.EndpointName);
            sb.Append("\n");
            sb.Append(parameters.Concat());
            var toSign = sb.ToString();

            return(GetHmacSha256(toSign, request.SecretKey));
        }
        private RestRequest CreateRequest(RestMethod method, string endpoint, object data = null, QueryParamList parameters = null, string factoryId = null)
        {
            var access = _apiAccess;

            var request = new RestRequest();

            request.Method     = method;
            request.Endpoint   = endpoint;
            request.TimeStamp  = DateTime.Now;
            request.FactoryId  = factoryId;
            request.Data       = data;
            request.Params     = parameters;
            request.ApiHost    = access.Host;
            request.ApiVersion = access.Version;
            request.ApiPort    = access.Port;
            request.AccessKey  = access.AccessKey;
            request.SecretKey  = access.SecretKey;

            return(request);
        }
        public RestRequest Get(string endpoint, QueryParamList parameters = null, string factoryId = null)
        {
            var request = CreateRequest(RestMethod.Get, endpoint, parameters: parameters, factoryId: factoryId);

            return(request);
        }
        public RestRequest Put(string endpoint, QueryParamList parameters)
        {
            var request = CreateRequest(RestMethod.Put, endpoint, parameters: parameters);

            return(request);
        }