public async Task <PinRedeemResult> RedeemPasswordResetPin(string pin) { DeletePinFile(); var usersReset = new List <string>(); var valid = !string.IsNullOrWhiteSpace(_lastPin) && string.Equals(_lastPin, pin, StringComparison.OrdinalIgnoreCase) && _lastPasswordPinCreationResult != null && _lastPasswordPinCreationResult.ExpirationDate > DateTime.UtcNow; if (valid) { _lastPin = null; _lastPasswordPinCreationResult = null; var users = Users.Where(i => !i.ConnectLinkType.HasValue || i.ConnectLinkType.Value != UserLinkType.Guest) .ToList(); foreach (var user in users) { await ResetPassword(user).ConfigureAwait(false); if (user.Policy.IsDisabled) { user.Policy.IsDisabled = false; UpdateUserPolicy(user, user.Policy, true); } usersReset.Add(user.Name); } } else { _pinAttempts++; if (_pinAttempts >= 3) { _lastPin = null; _lastPasswordPinCreationResult = null; } } return(new PinRedeemResult { Success = valid, UsersReset = usersReset.ToArray() }); }
private async Task <PasswordPinCreationResult> CreatePasswordResetPin() { var num = new Random().Next(1, 9999); var path = PasswordResetFile; var pin = num.ToString("0000", CultureInfo.InvariantCulture); _lastPin = pin; var time = TimeSpan.FromMinutes(5); var expiration = DateTime.UtcNow.Add(time); var text = new StringBuilder(); var localAddress = (await _appHost.GetLocalApiUrl(CancellationToken.None).ConfigureAwait(false)) ?? string.Empty; text.AppendLine("Use your web browser to visit:"); text.AppendLine(string.Empty); text.AppendLine(localAddress + "/web/index.html#!/forgotpasswordpin.html"); text.AppendLine(string.Empty); text.AppendLine("Enter the following pin code:"); text.AppendLine(string.Empty); text.AppendLine(pin); text.AppendLine(string.Empty); var localExpirationTime = expiration.ToLocalTime(); // Tuesday, 22 August 2006 06:30 AM text.AppendLine("The pin code will expire at " + localExpirationTime.ToString("f1", CultureInfo.CurrentCulture)); File.WriteAllText(path, text.ToString(), Encoding.UTF8); var result = new PasswordPinCreationResult { PinFile = path, ExpirationDate = expiration }; _lastPasswordPinCreationResult = result; _pinAttempts = 0; return(result); }
private PasswordPinCreationResult CreatePasswordResetPin() { var num = new Random().Next(1, 9999); var path = PasswordResetFile; var pin = num.ToString("0000", CultureInfo.InvariantCulture); _lastPin = pin; var time = TimeSpan.FromMinutes(5); var expiration = DateTime.UtcNow.Add(time); var text = new StringBuilder(); var info = _appHost.GetSystemInfo(); var localAddress = info.LocalAddress ?? string.Empty; text.AppendLine("Use your web browser to visit:"); text.AppendLine(string.Empty); text.AppendLine(localAddress + "/mediabrowser/web/forgotpasswordpin.html"); text.AppendLine(string.Empty); text.AppendLine("Enter the following pin code:"); text.AppendLine(string.Empty); text.AppendLine(pin); text.AppendLine(string.Empty); text.AppendLine("The pin code will expire at " + expiration.ToLocalTime().ToShortDateString() + " " + expiration.ToLocalTime().ToShortTimeString()); File.WriteAllText(path, text.ToString(), Encoding.UTF8); var result = new PasswordPinCreationResult { PinFile = path, ExpirationDate = expiration }; _lastPasswordPinCreationResult = result; _pinAttempts = 0; return(result); }
public async Task<PinRedeemResult> RedeemPasswordResetPin(string pin) { DeletePinFile(); var usersReset = new List<string>(); var valid = !string.IsNullOrWhiteSpace(_lastPin) && string.Equals(_lastPin, pin, StringComparison.OrdinalIgnoreCase) && _lastPasswordPinCreationResult != null && _lastPasswordPinCreationResult.ExpirationDate > DateTime.UtcNow; if (valid) { _lastPin = null; _lastPasswordPinCreationResult = null; var users = Users.Where(i => !i.ConnectLinkType.HasValue || i.ConnectLinkType.Value != UserLinkType.Guest) .ToList(); foreach (var user in users) { await ResetPassword(user).ConfigureAwait(false); if (user.Policy.IsDisabled) { user.Policy.IsDisabled = false; await UpdateUserPolicy(user, user.Policy, true).ConfigureAwait(false); } usersReset.Add(user.Name); } } else { _pinAttempts++; if (_pinAttempts >= 3) { _lastPin = null; _lastPasswordPinCreationResult = null; } } return new PinRedeemResult { Success = valid, UsersReset = usersReset.ToArray() }; }
private PasswordPinCreationResult CreatePasswordResetPin() { var num = new Random().Next(1, 9999); var path = PasswordResetFile; var pin = num.ToString("0000", CultureInfo.InvariantCulture); _lastPin = pin; var time = TimeSpan.FromMinutes(5); var expiration = DateTime.UtcNow.Add(time); var text = new StringBuilder(); var localAddress = _appHost.LocalApiUrl ?? string.Empty; text.AppendLine("Use your web browser to visit:"); text.AppendLine(string.Empty); text.AppendLine(localAddress + "/web/forgotpasswordpin.html"); text.AppendLine(string.Empty); text.AppendLine("Enter the following pin code:"); text.AppendLine(string.Empty); text.AppendLine(pin); text.AppendLine(string.Empty); text.AppendLine("The pin code will expire at " + expiration.ToLocalTime().ToShortDateString() + " " + expiration.ToLocalTime().ToShortTimeString()); _fileSystem.WriteAllText(path, text.ToString(), Encoding.UTF8); var result = new PasswordPinCreationResult { PinFile = path, ExpirationDate = expiration }; _lastPasswordPinCreationResult = result; _pinAttempts = 0; return result; }