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); } }
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))); } }