public async Task <ApiResponse <LoginDetail> > AuthenticateUser(UserLogin model) { var response = new ApiResponse <LoginDetail>(); var userDetail = _userRepo.List(i => i.Email == model.Email).FirstOrDefault(); var loginLog = new Entity.LoginLog(model.IpAddress); if (userDetail != null && !userDetail.IsActive) { response.Success = false; response.ErrorMesssage.Add(MtsResource.AccountLocked); loginLog.Success = false; } if (response.Success) { if (userDetail == null || !_crypto.CheckMatch(userDetail.Password, model.Password)) { response.Success = false; response.ErrorMesssage.Add(MtsResource.EmailPasswordNotFound); if (userDetail != null) { loginLog.Success = false; loginLog.UserId = userDetail.Id; userDetail.ErrorCount += 1; if (userDetail.ErrorCount == _config.MaxLoginErrorCount) { await DeactivateUser(userDetail); } } } if (response.Success) { var userBusiness = _userBusinessRepo.List(i => i.UserId == userDetail.Id).FirstOrDefault(); if (userBusiness != null) { string chip = $"{model.Email}:{model.Password}"; loginLog.UserId = userDetail.Id; userDetail.ErrorCount = 0; await _userRepo.Update(userDetail); response.DataResponse = new LoginDetail() { BusinessId = userBusiness.BusinessId, Id = userDetail.Id, Name = $"{userDetail.FirstName} {userDetail.LastName}", RefreshToken = $"{_crypto.EncryptString(chip, _config.EncryptionKey)}.{_crypto.CalculateHash(chip)}", AccessToken = RandomGenerator.GenerateString(16) }; } else { response.Success = false; response.ErrorMesssage.Add(MtsResource.EmailPasswordNotFound); } } } await _loginLogRepo.Save(loginLog); return(response); }