Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }