예제 #1
0
        public IActionResult Registration([FromBody] UserRegistrationModels registrationModel, [FromServices] IChallengeNotifierService game)
        {
            _logger.LogDebug("Registration attempt from {RemoteIp} and {UserAgent}", UserIp, UserAgent);
            var challenge = _rngGenerator.GetString(6, EAlphabetType.AZ);

            game.Notify(registrationModel.UserName, challenge);
            //create user entry and refresh token

            var dbUser = registrationModel.ToDbUser();

            dbUser.Challenge      = challenge;
            dbUser.CreateDateTime = _now;
            dbUser.State          = EUserState.InChallenge;
            dbUser.HashPasswordAndSet(registrationModel.Password);

            try
            {
                _logger.LogDebug("Adding new user ({UserName})  to DB", dbUser.UserName);
                _db.Users.Add(dbUser);
                _db.SaveChanges();
                _logger.LogDebug("User ({UserName}) successful added", dbUser.UserName);
                return(Ok());
            }
            catch (SecurityTokenEncryptionFailedException e)
            {
                _logger.LogError(e, "Problem with generating JWT for {UserName}", dbUser.UserName);
                throw;
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Problem with saving user (@{User})", dbUser);
                throw;
            }
        }
 public static DbUser ToDbUser(this UserRegistrationModels reg)
 {
     return(new DbUser()
     {
         UserName = reg.UserName
     });
 }