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); }
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()); }
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); }
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); } }
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); }
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); } }
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); } } }