public async Task <ResetPasswordAccessToken> RedeemAsync(string publicId)
        {
            ResetPasswordAccessToken token = await _repository.GetByPublicIdAsync(publicId);

            if (token == null)
            {
                throw new TokenNotFoundException(publicId);
            }

            if (token.ExpiresOn <= DateTime.UtcNow)
            {
                throw new TokenExpiredException(publicId);
            }

            if (token.Redeemed)
            {
                throw new TokenRedeemedException(publicId);
            }

            token.Redeemed = true;

            try
            {
                return(await _repository.UpdateAsync(token));
            }
            catch (KeyNotFoundException)
            {
                throw new TokenNotFoundException(token.PublicId);
            }
        }
Ejemplo n.º 2
0
        public async Task <CommandHandlingResult> Handle(GeneratePasswordResetTokenCommand cmd,
                                                         IEventPublisher publisher)
        {
            ResetPasswordAccessToken token = await _accessTokenService.CreateAsync(cmd.EmployeeId, cmd.MerchantId);

            _chaosKitty.Meow("Issue with Azure repository when creating reset password token");

            string resetPasswordUrl = string.Format(_resetPasswordUrlTemplate, token.PublicId);

            if (cmd.IsNewEmployee)
            {
                publisher.PublishEvent(new EmployeeRegistrationCompletedEvent
                {
                    Id = token.EmployeeId,
                    ResetPasswordUrl = resetPasswordUrl
                });
            }
            else
            {
                publisher.PublishEvent(new EmployeeUpdateCompletedEvent
                {
                    Id = token.EmployeeId,
                    ResetPasswordUrl = resetPasswordUrl
                });
            }

            _chaosKitty.Meow("Issue with RabbitMq publishing EmployeeRegistrationCompletedEvent and EmployeeUpdateCompletedEvent");

            return(CommandHandlingResult.Ok());
        }
        public async Task <IActionResult> Redeem([Required, RowKey] string publicId)
        {
            try
            {
                ResetPasswordAccessToken token = await _accessTokenService.RedeemAsync(publicId);

                return(Ok(Mapper.Map <ResetPasswordAccessTokenResponse>(token)));
            }
            catch (TokenNotFoundException e)
            {
                _log.Error(e, $"Token not found: {publicId}");

                return(NotFound(ErrorResponse.Create(e.Message)));
            }
            catch (TokenExpiredException e)
            {
                _log.Error(e, $"Token expired: {publicId}");

                return(BadRequest(ErrorResponse.Create(e.Message)));
            }
            catch (TokenRedeemedException e)
            {
                _log.Error(e, $"Token already redeemed: {publicId}");

                return(BadRequest(ErrorResponse.Create(e.Message)));
            }
        }
        public async Task <ResetPasswordAccessToken> CreateAsync(string employeeId, string merchantId)
        {
            DateTime tokenExpiration = DateTime.UtcNow.Add(_tokenExpirationSettings);

            var token = ResetPasswordAccessToken.Create(employeeId, merchantId, tokenExpiration);

            return(await _repository.CreateAsync(token));
        }
        public async Task <IActionResult> GetByPublicId([Required, RowKey] string publicId)
        {
            ResetPasswordAccessToken token = await _accessTokenService.GetByPublicIdAsync(publicId);

            if (token == null)
            {
                return(NotFound(ErrorResponse.Create("Token not found")));
            }

            return(Ok(Mapper.Map <ResetPasswordAccessTokenResponse>(token)));
        }
        public async Task <IActionResult> Create([FromBody] CreateResetPasswordTokenRequest request)
        {
            try
            {
                ResetPasswordAccessToken token =
                    await _accessTokenService.CreateAsync(request.EmployeeId, request.MerchantId);

                return(Ok(Mapper.Map <ResetPasswordAccessTokenResponse>(token)));
            }
            catch (DuplicateKeyException e)
            {
                _log.Error(e, $"{e.Message}, request: {request.ToJson()}");

                return(BadRequest(ErrorResponse.Create(e.Message)));
            }
        }