private async Task PrepareRecoverable(IRecoverable recoverable, CancellationToken cancellationToken) { await recoverable.RecoverAsync(_connection, cancellationToken).ConfigureAwait(false); _recoverables.Add(recoverable); recoverable.Closed += OnRecoverableClosed; recoverable.RecoveryRequested += OnRecoveryRequested; }
public static void EnsureTokenIsValid(this IRecoverable account, TimeSpan resetWithin) { if (account.IsResetTokenExpired(resetWithin)) { throw new ValidationException("Reset password token is expired"); } }
// place for additional data that is not part of the state being saved in memento, e.g. load/save counter, etc. public Originator(IRecoverable <TData> customBehaviour) { TargetScript = customBehaviour; }
private void OnRecoverableClosed(IRecoverable recoverable) { recoverable.Closed -= OnRecoverableClosed; recoverable.RecoveryRequested -= OnRecoveryRequested; _recoverables.Remove(recoverable); }
public static bool IsResetTokenExpired(this IRecoverable account, TimeSpan resetWithin) { return(account.ResetPasswordSentAt.HasValue && DateTime.Now.Subtract(account.ResetPasswordSentAt.Value) > resetWithin); }
public static void ResetPassword(this IRecoverable account, string newPassword) { account.ResetPasswordToken = string.Empty; account.ResetPasswordSentAt = null; account.HashedPassword = newPassword; }
public static void RequestedPasswordReset(this IRecoverable account) { account.ResetPasswordToken = Guid.NewGuid().ToString(); account.ResetPasswordSentAt = DateTime.Now; }