// TODO: Check for user in domain || Not necessary if we checking email?? public DataAccess.Models.User Invoke(Models.UserModel user) { if (!user.IsValid() || userRepository.FindBy(x => x.Email == user.Email).Count() > 0) { return(null); } var newUser = AutoMapper.Mapper.Map <DataAccess.Models.User>(user); newUser.PasswordSalt = hasher.GenerateRandomSalt(); newUser.PasswordHash = hasher.CreatePasswordHash(user.Password, newUser.PasswordSalt); userRepository.Add(newUser); var newUserToken = new DataAccess.Models.UserToken { User = newUser, SecretToken = hasher.GenerateRandomGuid() }; userTokenRepository.Add(newUserToken); _unitOfWork.Save(); return(newUser); }
public string Invoke(Guid userId) { if (userId == Guid.Empty) { return(string.Empty); } var user = userRepository.GetById(userId); if (user == null) { return(string.Empty); } var token = userTokenRepository.GetById(userId); if (token != null) { userTokenRepository.Delete(token); } var userToken = new DataAccess.Models.UserToken { User = user, SecretToken = hasher.GenerateRandomGuid() }; userTokenRepository.Add(userToken); _unitOfWork.Save(); return(userToken.SecretToken); }
public Task SetTokenAsync(ApplicationUser user, string loginProvider, string name, string value, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (user == null) { throw new ArgumentNullException(nameof(user)); } if (string.IsNullOrWhiteSpace(loginProvider)) { throw new ArgumentNullException(nameof(loginProvider)); } if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException(nameof(name)); } var userTokenEntity = new UserToken { LoginProvider = loginProvider, Name = name, Value = value, UserId = user.Id }; _userTokenRepository.Add(userTokenEntity); return(Task.CompletedTask); }
public async Task AddUserTokenAsync(UserToken userToken) { if (!_configuration.Value.AllowMultipleLoginsFromTheSameUser) { await InvalidateUserTokensAsync(userToken.UserId); } await DeleteTokensWithSameRefreshTokenSourceAsync(userToken.RefreshTokenIdHashSource); _userTokenRepository.Add(userToken); await _userTokenRepository.SaveChanges(); }
/// <summary> /// Get a new token for the parametrized user /// </summary> /// <param name="user"></param> /// <returns></returns> public async Task <UserToken> GetNewTokenAsync(User user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } UserToken userToken = _userTokenRepository.GetByUser(user); if (userToken == null) { userToken = UserToken.Create(user, _appSettings.TokenExpirationInHours); _userTokenRepository.Add(userToken); } else { userToken.CreateToken(_appSettings.TokenExpirationInHours); _userTokenRepository.Update(userToken); } await _userTokenRepository.SaveChangesAsync(); return(userToken); }
private static TokenResponse GenerateAccessTokenResponse(IUserTokenRepository userTokenRepository, IOAuth appSettingsOAuth, long userId, string userRole, string username) { string nonce = GenerateNonce(); string accessToken = GenerateAccessToken( userId: userId, userRole: userRole, nonce: nonce, secretKey: appSettingsOAuth.SecretKey, issuer: appSettingsOAuth.Issuer, expiresAfter: appSettingsOAuth.AccessTokenExpires); string refreshToken = GenerateRefreshToken(); string checksum = (refreshToken + username).GetSHA256HashString(); userTokenRepository.Add(refreshToken, userId, nonce, appSettingsOAuth.RefreshTokenExpires, checksum); userTokenRepository.RemoveExpired(); return(new TokenResponse { AccessToken = accessToken, TokenType = "bearer", ExpiresIn = appSettingsOAuth.AccessTokenExpires, RefreshToken = refreshToken }); }