public async Task <Client> GetClient() { const string command = "SELECT * FROM [Thermostat].[Client] CROSS JOIN [Thermostat].[Application]"; dynamic result = null; try { using (var connection = new SqlConnection(_settings.ConnectionString)) { result = (await connection.QueryAsync(command)).FirstOrDefault(); } return(new Client( Convert.ToInt64(result.ClientID), Convert.ToString(result.Name), new ClientAuthentication( Convert.ToString(result.ApiKey), Convert.ToString(result.AuthorizationCode), Convert.ToString(result.RefreshToken), result.RefreshTokenExpiration == null ? null : Convert.ToDateTime(result.RefreshTokenExpiration), Convert.ToString(result.AccessToken), result.AccessTokenExpiration == null ? null : Convert.ToDateTime(result.AccessTokenExpiration)) )); } catch (Exception ex) { var exception = new HqvException($"Unable to get client with command {command}", ex); exception.Data["connection-string"] = _settings.ConnectionString; if (result != null) { exception.Data["result"] = result; } throw exception; } }
public async Task <TResult> PostAsyncJsonWithBearerToken <TResult>( string baseUri, string relativeUri, string bearerToken, string body, Func <object, Task <TResult> > parser, ICollection <KeyValuePair <string, string> > queryParameters = null) { var uri = UriHelper.Create(baseUri, relativeUri, queryParameters); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); var content = new StringContent(body, Encoding.UTF8, "application/json"); HttpResponseMessage response; try { response = await _httpClient.PostAsync(uri, content); } catch (Exception ex) { ex.Data["uri"] = uri; ex.Data["body"] = body; throw; } if (!response.IsSuccessStatusCode) { var exception = new HqvException($"Failed with error code {response.StatusCode}"); exception.Data["uri"] = uri; exception.Data["body"] = body; exception.Data["response-content"] = await response.Content.ReadAsStringAsync(); throw exception; } try { var responseContent = await response.Content.ReadAsStringAsync(); var json = JsonConvert.DeserializeObject(responseContent); var result = await parser(json); return(result); } catch (Exception ex) { ex.Data["uri"] = uri; ex.Data["body"] = body; ex.Data["response-content"] = await response.Content.ReadAsStringAsync(); throw; } }
private static void ValidateRequest(ThumbnailSheetCreateRequest request) { var validator = new ThumbnailSheetCreateRequestValidator(); var validationResult = validator.Validate(request); if (validationResult.IsValid) { return; } var exception = new HqvException("Validation on request failed"); exception.Data["errors"] = validationResult.Errors; throw exception; }
public static void Validate <TT, TValidator>(TT obj, TValidator validator) where TValidator : AbstractValidator <TT>, new() { var validationResult = validator.Validate(obj); if (validationResult.IsValid) { return; } var message = string.Join(". ", validationResult.Errors.Select(x => x.ErrorMessage)); var exception = new HqvException($"Validation failed. Detail is {message}"); exception.Data["errors"] = validationResult.Errors; throw exception; }
private JObject GetJsonFromFfprobeResult(ProcessResult ffprobeResult) { _response.FfprobeOutput = ffprobeResult.OutputData; if (!string.IsNullOrEmpty(ffprobeResult.ErrorData)) { var exception = new HqvException("Error message from FFprobe"); exception.Data["error-stream"] = ffprobeResult.ErrorData; throw exception; } if (string.IsNullOrEmpty(ffprobeResult.OutputData)) { throw new HqvException("No output message from FFprobe"); } return(JObject.Parse(ffprobeResult.OutputData)); }
private async Task <EcobeeResponsesModel> Parse(object json) { if (_settings.StoreResponse) { await _eventLogRepository.Add(new EventLog( "Ecobee", _settings.ThermostatUri, "ResponseBody", DateTime.UtcNow, _correlationId, entityObject : json)); } var response = EcobeeResponseParser.Parse(json); if (response.Code != 0) { var exception = new HqvException("Ecobee responded not sucessful"); exception.Data["response"] = response; } return(response); }
private async Task GetTokensUsingRefreshToken(ClientAuthentication authentication) { var parameters = new Dictionary <string, string>() { { "grant_type", "refresh_token" }, { "code", authentication.RefreshToken }, { "client_id", authentication.AppApiKey } }; var uri = UriHelper.Create(_settings.BaseUri, _settings.TokenUri); var client = new HttpClient(); var content = new FormUrlEncodedContent(parameters); HttpResponseMessage response; try { response = await client.PostAsync(uri, content); } catch (Exception ex) { var exception = new HqvException($"{MethodBase.GetCurrentMethod().Name} failed.", ex); exception.Data["uri"] = uri; exception.Data["request-content"] = await content.ReadAsStringAsync(); throw exception; } if (!response.IsSuccessStatusCode) { var exception = new HqvException($"{MethodBase.GetCurrentMethod().Name} failed with error code {response.StatusCode}"); exception.Data["uri"] = uri; exception.Data["request-content"] = await content.ReadAsStringAsync(); exception.Data["response-content"] = await response.Content.ReadAsStringAsync(); throw exception; } try { var responseContent = await response.Content.ReadAsStringAsync(); dynamic json = JsonConvert.DeserializeObject(responseContent); var expiresInSeconds = (int)json.expires_in - _settings.AccessTokenExpirationFuzzyInSeconds; authentication.SetAccessToken((string)json.access_token, DateTime.Now.AddSeconds(expiresInSeconds).ToUniversalTime()); authentication.SetRefreshToken((string)json.refresh_token, DateTime.Now.AddYears(1).AddMonths(-_settings.RefreshTokenExpirationFuzzyInMonths).ToUniversalTime()); } catch (Exception ex) { var exception = new HqvException($"Unable to parse result from Ecobee for {MethodBase.GetCurrentMethod().Name}", ex); exception.Data["uri"] = uri; exception.Data["request-content"] = await content.ReadAsStringAsync(); exception.Data["response-content"] = await response.Content.ReadAsStringAsync(); throw exception; } }