Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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;
            }
        }