public async Task <bool> DefineForgottenPassword(string userToken, string password, CancellationToken token = default) { var userId = JwtExtensions.GetUserIdFromToken(userToken); if (!userId.HasValue) { return(false); } var user = await Get(userId.Value, token); if (user == null) { return(false); } var userRequest = new UserRequest(); userRequest.CloneFrom(user); userRequest.Password = password; var result = await Update(userId.Value, userRequest, token); return(result != null); }
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 void ConfigureServices(IServiceCollection services) { services.AddControllers(); var repositoriesInitializer = new RepositoriesInitializer(); repositoriesInitializer.InitializeRepositories(services); var initializer = new Initializer(); initializer.Initialize(services, Configuration.GetConnectionString("DefaultConnection")); services.AddTransient <IJwtHelper, JwtHelper>(); JwtExtensions.AddJwt(services, Configuration); CorsExtensions.Add(services, Configuration); SwaggerExtension.Add(services, Configuration); services.AddMvcCore().AddApiExplorer(); }
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)); }