Example #1
0
        private async Task <JToken> HttpPostJsonAsync(string payload, Uri uri)
        {
            //var content = new StringContent(payload, Encoding.UTF8, _contentType);
            var content = !DnfClient.UseCompression ? (HttpContent) new StringContent(payload, Encoding.UTF8, _contentType) : GetGZipContent(payload);

            var responseMessage = await HttpClient.PostAsync(DnfClient.Proxy(uri), content)
                                  .ConfigureAwait(false);

            ParseApiUsage(responseMessage);


            if (responseMessage.StatusCode == HttpStatusCode.NoContent)
            {
                return(string.Empty);
            }

            var response = await responseMessage.Content.ReadAsStreamAsync()
                           .ConfigureAwait(false);

            using var reader = new StreamReader(response);
            if (responseMessage.IsSuccessStatusCode)
            {
                return(DeserializeJson(reader));
            }

            throw new BaseHttpClientException(await reader.ReadToEndAsync()
                                              .ConfigureAwait(false), responseMessage.StatusCode);
        }
Example #2
0
        public async Task <Stream> HttpGetBlobAsync(string resourceName)
        {
            var uri = Common.FormatUrl(resourceName, InstanceUrl, ApiVersion);

            var request = new HttpRequestMessage
            {
                RequestUri = DnfClient.Proxy(uri),
                Method     = HttpMethod.Get
            };

            var responseMessage = await HttpClient.SendAsync(request)
                                  .ConfigureAwait(false);

            var response = await responseMessage.Content.ReadAsStreamAsync()
                           .ConfigureAwait(false);

            return(responseMessage.IsSuccessStatusCode ? response : new MemoryStream());
        }
Example #3
0
        public async Task <T?> HttpBinaryDataPostAsync <T>(string resourceName, object?inputObject, byte[] fileContents, string headerName, string fileName) where T : class
        {
            // BRAD: I think we should probably, in time, refactor multipart and binary support to the BaseHttpClient.
            // For now though, I just left this in here.

            var uri = Common.FormatUrl(resourceName, InstanceUrl, ApiVersion);

            var json = JsonConvert.SerializeObject(inputObject,
                                                   Formatting.None,
                                                   new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            var content = new MultipartFormDataContent();

            var stringContent = new StringContent(json, Encoding.UTF8, "application/json");

            stringContent.Headers.Add("Content-Disposition", "form-data; name=\"json\"");
            content.Add(stringContent);

            var byteArrayContent = new ByteArrayContent(fileContents);

            byteArrayContent.Headers.Add("Content-Type", "application/octet-stream");
            byteArrayContent.Headers.Add("Content-Disposition", $"form-data; name=\"{headerName}\"; filename=\"{fileName}\"");
            content.Add(byteArrayContent, headerName, fileName);

            var responseMessage = await HttpClient.PostAsync(DnfClient.Proxy(uri), content)
                                  .ConfigureAwait(false);

            var response = await responseMessage.Content.ReadAsStringAsync()
                           .ConfigureAwait(false);

            if (responseMessage.IsSuccessStatusCode)
            {
                return(JsonConvert.DeserializeObject <T>(response));
            }

            throw ParseForceException(response);
        }
Example #4
0
        public async Task TokenRefreshAsync(string clientId, string?refreshToken, string clientSecret, string tokenRequestEndpointUrl)
        {
            var url = Common.FormatRefreshTokenUrl(
                tokenRequestEndpointUrl,
                clientId,
                refreshToken,
                clientSecret);

            var request = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                RequestUri = DnfClient.Proxy(new Uri(url))
            };

            request.Headers.UserAgent.ParseAdd(string.Concat(UserAgent, "/", ApiVersion));

            var responseMessage = await _httpClient.SendAsync(request)
                                  .ConfigureAwait(false);

            var response = await responseMessage.Content.ReadAsStringAsync()
                           .ConfigureAwait(false);

            if (responseMessage.IsSuccessStatusCode)
            {
                var authToken = JsonConvert.DeserializeObject <AuthToken>(response);

                AccessToken  = authToken?.AccessToken ?? string.Empty;
                RefreshToken = refreshToken;
                InstanceUrl  = authToken?.InstanceUrl ?? string.Empty;
                Id           = authToken?.Id ?? string.Empty;
            }
            else
            {
                var errorResponse = JsonConvert.DeserializeObject <AuthErrorResponse>(response);
                throw new ForceException(errorResponse?.Error ?? string.Empty, errorResponse?.ErrorDescription ?? string.Empty);
            }
        }
Example #5
0
        private async Task <JToken> HttpGetJsonAsync(Uri uri)
        {
            var responseMessage = await HttpClient.GetAsync(DnfClient.Proxy(uri))
                                  .ConfigureAwait(false);

            ParseApiUsage(responseMessage);

            if (responseMessage.StatusCode == HttpStatusCode.NoContent)
            {
                return(string.Empty);
            }

            var response = await responseMessage.Content.ReadAsStreamAsync()
                           .ConfigureAwait(false);

            using var reader = new StreamReader(response);
            if (responseMessage.IsSuccessStatusCode)
            {
                return(DeserializeJson(reader));
            }

            throw new BaseHttpClientException(await reader.ReadToEndAsync()
                                              .ConfigureAwait(false), responseMessage.StatusCode);
        }
Example #6
0
        public async Task UsernamePasswordAsync(string clientId, string clientSecret, string username, string password, string tokenRequestEndpointUrl)
        {
            if (string.IsNullOrEmpty(clientId))
            {
                throw new ArgumentNullException(nameof(clientId));
            }
            if (string.IsNullOrEmpty(clientSecret))
            {
                throw new ArgumentNullException(nameof(clientSecret));
            }
            if (string.IsNullOrEmpty(username))
            {
                throw new ArgumentNullException(nameof(username));
            }
            if (string.IsNullOrEmpty(password))
            {
                throw new ArgumentNullException(nameof(password));
            }
            if (string.IsNullOrEmpty(tokenRequestEndpointUrl))
            {
                throw new ArgumentNullException(nameof(tokenRequestEndpointUrl));
            }
            if (!Uri.IsWellFormedUriString(tokenRequestEndpointUrl, UriKind.Absolute))
            {
                throw new FormatException("tokenRequestEndpointUrl");
            }

            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("grant_type", "password"),
                new KeyValuePair <string, string>("client_id", clientId),
                new KeyValuePair <string, string>("client_secret", clientSecret),
                new KeyValuePair <string, string>("username", username),
                new KeyValuePair <string, string>("password", password)
            });

            var request = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                RequestUri = DnfClient.Proxy(new Uri(tokenRequestEndpointUrl)),
                Content    = content
            };

            request.Headers.UserAgent.ParseAdd(string.Concat(UserAgent, "/", ApiVersion));

            var responseMessage = await _httpClient.SendAsync(request)
                                  .ConfigureAwait(false);

            var response = await responseMessage.Content.ReadAsStringAsync()
                           .ConfigureAwait(false);

            if (responseMessage.IsSuccessStatusCode)
            {
                try {
                    var authToken = JsonConvert.DeserializeObject <AuthToken>(response);

                    AccessToken = authToken?.AccessToken ?? string.Empty;
                    InstanceUrl = authToken?.InstanceUrl ?? string.Empty;
                    Id          = authToken?.Id ?? string.Empty;
                }
                catch (Exception ex) {
                    throw new ForceAuthException(ex.Message, response, responseMessage.StatusCode);
                }
            }
            else
            {
                var errorResponse = JsonConvert.DeserializeObject <AuthErrorResponse>(response);
                throw new ForceAuthException(errorResponse?.Error ?? string.Empty, errorResponse?.ErrorDescription ?? string.Empty, responseMessage.StatusCode);
            }
        }
Example #7
0
        public async Task WebServerAsync(string?clientId, string?clientSecret, string?redirectUri, string?code, string?tokenRequestEndpointUrl)
        {
            if (string.IsNullOrEmpty(clientId))
            {
                throw new ArgumentNullException(nameof(clientId));
            }
            // if (string.IsNullOrEmpty(clientSecret)) throw new ArgumentNullException("clientSecret");
            if (string.IsNullOrEmpty(redirectUri))
            {
                throw new ArgumentNullException(nameof(redirectUri));
            }
            if (!Uri.IsWellFormedUriString(redirectUri, UriKind.Absolute))
            {
                throw new FormatException("redirectUri");
            }
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentNullException(nameof(code));
            }
            if (string.IsNullOrEmpty(tokenRequestEndpointUrl))
            {
                throw new ArgumentNullException(nameof(tokenRequestEndpointUrl));
            }
            if (!Uri.IsWellFormedUriString(tokenRequestEndpointUrl, UriKind.Absolute))
            {
                throw new FormatException("tokenRequestEndpointUrl");
            }

            var content = string.IsNullOrEmpty(clientSecret)
                ? new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("grant_type", "authorization_code"),
                new KeyValuePair <string, string>("client_id", clientId),
                new KeyValuePair <string, string>("redirect_uri", redirectUri),
                new KeyValuePair <string, string>("code", code)
            })
                : new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("grant_type", "authorization_code"),
                new KeyValuePair <string, string>("client_id", clientId),
                new KeyValuePair <string, string>("client_secret", clientSecret),
                new KeyValuePair <string, string>("redirect_uri", redirectUri),
                new KeyValuePair <string, string>("code", code)
            });

            var request = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                RequestUri = DnfClient.Proxy(new Uri(tokenRequestEndpointUrl)),
                Content    = content
            };

            request.Headers.UserAgent.ParseAdd(string.Concat(UserAgent, "/", ApiVersion));

            var responseMessage = await _httpClient.SendAsync(request)
                                  .ConfigureAwait(false);

            var response = await responseMessage.Content.ReadAsStringAsync()
                           .ConfigureAwait(false);

            if (responseMessage.IsSuccessStatusCode)
            {
                var authToken = JsonConvert.DeserializeObject <AuthToken>(response);

                AccessToken  = authToken?.AccessToken;
                InstanceUrl  = authToken?.InstanceUrl;
                Id           = authToken?.Id;
                RefreshToken = authToken?.RefreshToken;
            }
            else
            {
                try
                {
                    var errorResponse = JsonConvert.DeserializeObject <AuthErrorResponse>(response);
                    throw new ForceAuthException(errorResponse?.Error ?? string.Empty, errorResponse?.ErrorDescription ?? string.Empty);
                }
                catch (Exception ex)
                {
                    throw new ForceAuthException(Error.UnknownException, ex.Message);
                }
            }
        }