public AuthenticatedViewModel Login(string email, string password) { if (string.IsNullOrEmpty(email)) { throw new DomainException(ErrorMessage.UserEmailIsEmpty); } if (string.IsNullOrEmpty(password)) { throw new DomainException(ErrorMessage.PasswordIsRequired); } var user = _systemUserRepository.GetAll(x => x.Email == email).FirstOrDefault(); if (user == null) { throw new DomainException(ErrorMessage.UserIsNotExist); } if (!user.IsActive) { throw new DomainException(ErrorMessage.UserWasDisabled); } if (!PasswordHasher.ValidateHash(password, user.PasswordHash)) { throw new DomainException(ErrorMessage.UserLoginFault); } using (var unitOfWork = _unitOfWorkFactory.GetCurrentUnitOfWork()) { var authenticationToken = SHA256Hash.CreateHash(Guid.NewGuid().ToString()); user.UpdateLogin(authenticationToken, _timeSource.LocalNow()); _systemUserRepository.Edit(user); unitOfWork.Commit(); _cacheManager.Add(authenticationToken, user.Id); var authenticatedViewModel = new AuthenticatedViewModel { Id = user.Id, Name = user.Name, Email = user.Email, AuthenticationToken = authenticationToken, SystemRoleName = user.SystemRole.Name, SystemRoleId = user.SystemRoleId }; _cacheManager.Add(user.Id.ToString(), authenticatedViewModel); return(authenticatedViewModel); } }