public async Task <Result <UserAuthenticatedDto> > Handle(RegisterCommand request, CancellationToken cancellationToken) { var user = _mapper.Map <UserDto>(request.Register); await IsValid(user); var hashedPassword = _hasher.HashPassword(user, request.Register.Password); user = user with { PasswordHash = hashedPassword, Roles = new List <string> { "User" } }; var userToDb = _mapper.Map <User>(user); var jwtToken = JwtExtensions.GenerateJwtToken(user, _tokenConfiguration); var tokenString = JwtExtensions.GenerateRefreshToken(); var refreshToken = new RefreshToken { Id = Guid.NewGuid().ToString(), DateCreated = DateTime.UtcNow, DateExpires = DateTime.UtcNow.AddMinutes(_tokenConfiguration.RefreshTokenExpirationMinutes), Token = tokenString, User = userToDb }; await _tokenRepository.CreateAsync(refreshToken); UserAuthenticatedDto authenticatedDto = new(user, jwtToken, refreshToken.Token); await _sender.PublishAsync(new CreatedUser(userToDb), cancellationToken); await _sender.PublishAsync(new CreatedToken(refreshToken), cancellationToken); return(Result <UserAuthenticatedDto> .Success(authenticatedDto)); }
public async Task <Result <UserAuthenticatedDto> > Handle(RefreshTokenCommand request, CancellationToken cancellationToken) { var user = await _userRepository.GetAsync(u => u.Id == request.UserId); user.SessionId = Guid.NewGuid().ToString(); var userDto = _mapper.Map <UserDto>(user); var refreshTokenInDb = await _tokenRepository.GetAsync(t => t.User.Id == request.UserId && t.Token == request.Token.Name); refreshTokenInDb.CheckForNull(); IsValid(refreshTokenInDb); var jwtToken = JwtExtensions.GenerateJwtToken(userDto, _tokenConfiguration); var tokenString = JwtExtensions.GenerateRefreshToken(); var userInDb = _mapper.Map <User>(user); var refreshToken = new RefreshToken { Id = Guid.NewGuid().ToString(), DateCreated = DateTime.UtcNow, DateExpires = DateTime.UtcNow.AddMinutes(_tokenConfiguration.RefreshTokenExpirationMinutes), Token = tokenString, User = userInDb }; await _tokenRepository.CreateAsync(refreshToken); await _tokenRepository.DeleteAsync(t => t.Id == refreshTokenInDb.Id); await _sender.PublishAsync(new UpdatedUser(user), cancellationToken); await _sender.PublishAsync(new CreatedToken(refreshToken), cancellationToken); UserAuthenticatedDto authenticatedDto = new(userDto, jwtToken, refreshToken.Token); return(Result <UserAuthenticatedDto> .Success(authenticatedDto)); }
public async Task <Result <UserAuthenticatedDto> > Handle(LoginCommand request, CancellationToken cancellationToken) { var user = await _userRepository.GetAsync(u => u.UserName == request.Login.UserName); if (user == null) { throw Result <User> .Failure("userName", "Invalid userName", HttpStatusCode.BadRequest); } user.SessionId = Guid.NewGuid().ToString(); var userDto = _mapper.Map <UserDto>(user); IsValid(userDto, request.Login.Password); var jwtToken = JwtExtensions.GenerateJwtToken(userDto, _tokenConfiguration); var tokenString = JwtExtensions.GenerateRefreshToken(); var refreshToken = new RefreshToken { Id = Guid.NewGuid().ToString(), DateCreated = DateTime.UtcNow, DateExpires = DateTime.UtcNow.AddMinutes(_tokenConfiguration.RefreshTokenExpirationMinutes), Token = tokenString, User = user }; await _tokenRepository.CreateAsync(refreshToken); await _sender.PublishAsync(new UpdatedUser(user), cancellationToken); await _sender.PublishAsync(new CreatedToken(refreshToken), cancellationToken); UserAuthenticatedDto authenticatedDto = new(userDto, jwtToken, refreshToken.Token); return(Result <UserAuthenticatedDto> .Success(authenticatedDto)); }