Example #1
0
        public ActionResult Token(string username, string password)
        {
            //sleep timer to demonstrate the loading bar
            Thread.Sleep(2000);
            //get user from data store
            var user = userService.GetByName(username);

            //validate password
            if (user == null)
            {
                return(BadRequest("Invalid credentials"));
            }
            if (user.Active != true)
            {
                return(BadRequest("Account not active"));
            }
            if (hashingService.VerifyHashedPassword(user.PasswordHash, password) == PasswordVerificationResult.Failed)
            {
                return(BadRequest("Invalid credentials"));
            }
            //create claims
            var claims = new List <Claim> {
                new Claim("uid", user.Id.ToString(CultureInfo.InvariantCulture), ClaimValueTypes.Integer)
            };
            //create tokens
            var accessToken  = jwtTokenService.GenerateAccessToken(user.UserName, null, claims);
            var refreshToken = jwtTokenService.GenerateRefreshToken();

            //store refresh token
            jwtTokenService.StoreRefreshToken(user.Id, refreshToken);
            return(Ok(new JwtToken {
                AccessToken = accessToken, RefreshToken = refreshToken, TokenType = "bearer"
            }));
        }
        public LoginResultViewModel Login(LoginViewModel loginViewModel)
        {
            var user         = _benutzerService.GetByEmail(loginViewModel?.Email?.ToLowerInvariant());
            var errorMessage = "Benutzername oder Passwort falsch.";

            if (user == null)
            {
                throw new CustomException(errorMessage);
            }

            // TODO: Sperrung aktivieren, wenn Entsperrung möglich ist
            //if (user.IstGesperrt)
            //{
            //    throw new CustomException("Ihr Benutzer ist gesperrt. Kontaktieren Sie einen Administrator zur Entsperrung.");
            //}

            PasswordVerificationResult verificationResult = _passwordHashingService.VerifyHashedPassword(user.Passwort, loginViewModel.Passwort);

            if (verificationResult == PasswordVerificationResult.Failed)
            {
                using (var unit = new UnitOfWork())
                {
                    var benutzerRepo = unit.GetRepository <BenutzerRepository>();
                    user.LoginVersuche += 1;
                    //if (user.LoginVersuche >= EnvironmentVariableValues.Loginversuche)
                    //{
                    //user.IstGesperrt = true;
                    //}
                    _logger.LogInformation("Erfolgloser Login durch " + loginViewModel.Email);
                    benutzerRepo.Update(user);
                }

                throw new CustomException(errorMessage);
            }
            else if (user.LoginVersuche > 0)
            {
                using (var unit = new UnitOfWork())
                {
                    var benutzerRepo = unit.GetRepository <BenutzerRepository>();
                    user.LoginVersuche = 0;
                    benutzerRepo.Update(user);
                }
            }

            _logger.LogInformation($"Erfolgreicher Loginversuch des Benutzers {loginViewModel?.Email}.");

            SetLastLoginResetLoginversuche(user);

            return(_mapper.Map <LoginResultViewModel>(user));
        }