public async Task <EntityOperationResult <User> > Authenticate(string username, string password) { var result = new EntityOperationResult <User>(); if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) { result.AddError("Login fail", "Name or Password are empty"); return(result); } var user = await _context.Users.FirstOrDefaultAsync(x => x.Name == username); if (user == null) { result.AddError("User inexistent", "User is nor registered"); return(result); } if (!VerifyPasswordHash(password, user.PasswordHash, user.PasswordSalt)) { result.AddError("User invalid", "User password invalid"); return(result); } // authentication successful return(new EntityOperationResult <User>(user)); }
private async Task <EntityOperationResult <CurrencyDto> > GetDataFromHtmlAsync(string htmlPage, DateTime date) { var result = new EntityOperationResult <CurrencyDto>(); var parser = new HtmlParser(); var document = parser.ParseDocument(htmlPage); if (document.GetElementsByClassName("sinResultados").Any()) { Logger.LogInformation("Creating Currency object with No Price."); result.Entity = CreateCurrency(date, "0", ServiceSettings.CurrencyCode, "0"); return(result); } var titleValidation = document.GetElementsByTagName("tr").ElementAtOrDefault(1); if (titleValidation == null) { await SendSlackNotification(htmlPage, date, CurrencyCodeEnum.Ars); result.AddError("Html error", $"Error getting HTML, not exist currency USD. Check Date {date.ToUniversalTime().ToShortDateString()}."); return(result); } var tableRows = document.QuerySelectorAll("table > tbody > tr"); var usdCurrency = GetCurrencyByDate(tableRows, date); if (usdCurrency == null) { Logger.LogInformation("Creating Currency object with No Price."); result.Entity = CreateCurrency(date, "0", ServiceSettings.CurrencyCode, "0"); return(result); } var columns = usdCurrency.GetElementsByTagName("td"); var buyColumn = columns.ElementAtOrDefault(1); var saleColumn = columns.ElementAtOrDefault(2); var dateColumn = columns.ElementAtOrDefault(3); if (buyColumn != null && saleColumn != null && dateColumn != null) { Logger.LogInformation("Creating Currency object to returned to the client."); result.Entity = CreateCurrency(date, saleColumn.InnerHtml, ServiceSettings.CurrencyCode, buyColumn.InnerHtml); return(result); } await SendSlackNotification(htmlPage, date, CurrencyCodeEnum.Ars); result.AddError("Error Bna", "Error getting currency, please check HTML."); return(result); }
public async Task <EntityOperationResult <User> > Register(User user, string password) { var result = new EntityOperationResult <User>(); if (string.IsNullOrWhiteSpace(password)) { result.AddError("Password", "Password is required"); return(result); } var userRepeated = await _context.Users.FirstOrDefaultAsync(x => x.Spa.Id == user.SpaId && x.Active && x.Name == user.Name); if (userRepeated != null) { result.AddError("Repeated user", "Username \"" + user.Name + "\" is already taken"); return(result); } var spaAssociated = await _context.Spas.FirstOrDefaultAsync(x => x.Id == user.SpaId); if (spaAssociated == null) { result.AddError("Spa", "Spa \"" + user.SpaId + "\" is not already exist"); return(result); } CreatePasswordHash(password, out var passwordHash, out var passwordSalt); var newUser = new User { Email = user.Email, Active = true, Name = user.Name, PasswordHash = passwordHash, PasswordSalt = passwordSalt, SpaId = user.SpaId }; _context.Users.Add(newUser); await _context.SaveChangesAsync(); return(new EntityOperationResult <User>(newUser)); }
public async Task GetCurrency_ShouldBeHttpStatusCodeBadRequest_WhenResponseReturnAnError() { //Arrange var result = new EntityOperationResult <CurrencyDto>(); result.AddError("", ""); _testServer.CurrencyServiceMock.Setup(x => x.GetCurrencyByCurrencyCodeAndDate( It.IsAny <DateTime>(), It.IsAny <CurrencyCodeEnum>())) .ReturnsAsync(result); // Act var response = await _client.GetAsync("conversion/Ars/01-02-2012"); // Assert Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); }
public async Task GetCurrency_ShouldBeHttpStatusCodeBadRequest_WhenUrlDoesHaveInvalidCurrencyCode() { //Arrange const string currencyCode = "Test"; var result = new EntityOperationResult <CurrencyDto>(); result.AddError("Currency code invalid", $"Currency code invalid: {currencyCode}"); _testServer.CurrencyServiceMock.Setup(x => x.GetCurrencyByCurrencyCodeAndDate( It.IsAny <DateTime>(), It.IsAny <CurrencyCodeEnum>())) .ReturnsAsync(result); // Act var response = await _client.GetAsync("conversion/TEST/02-02-2020"); // Assert Assert.False(response.IsSuccessStatusCode); }
private async Task <EntityOperationResult <CurrencyDto> > GetDataFromHtmlAsync(string htmlPage, DateTime date) { var result = new EntityOperationResult <CurrencyDto>(); var parser = new HtmlParser(); var document = parser.ParseDocument(htmlPage); try { var table = document.GetElementsByClassName("Tabla_borde").FirstOrDefault(); if (table != null) { var columns = table.GetElementsByTagName("td"); if (columns.Any() && columns.Length == 4) { var columnTime = $"{columns.ElementAtOrDefault(2)?.InnerHtml}"; if (columnTime == $"{date:dd-MM-yyyy}") { var saleValue = columns.ElementAtOrDefault(3)?.InnerHtml.Replace(".", ","); result.Entity = CreateCurrency(date, saleValue, ServiceSettings.CurrencyCode); return(result); } } } } catch (Exception e) { await SendSlackNotification(htmlPage, date, CurrencyCodeEnum.Mxn, e); result.AddError("Html Error Mxn currency", "Error getting HTML or date is holiday, please check HTML."); return(result); } //No price for current date Logger.LogInformation("Creating Currency object with No Price."); result.Entity = CreateCurrency(date, "0", ServiceSettings.CurrencyCode); return(result); }