Files
mRemoteNG/mRemoteV1/UI/Controls/NewPasswordWithVerification.cs
David Sparer c0c5579027 Merge branch 'develop' into improve_credential_manager
# Conflicts:
#	mRemoteV1/UI/Forms/frmMain.cs
#	mRemoteV1/UI/Menu/ToolsMenu.cs
2017-03-23 17:25:16 -06:00

106 lines
3.1 KiB
C#

using System;
using System.ComponentModel;
using System.Drawing;
using System.Security;
using System.Windows.Forms;
using mRemoteNG.Security;
namespace mRemoteNG.UI.Controls
{
public partial class NewPasswordWithVerification : UserControl
{
private bool _useSystemPasswordChar;
private char _passwordChar;
[Browsable(false)]
public SecureString SecureString { get; private set; }
[Browsable(false)]
public bool PasswordsMatch { get; private set; }
[Browsable(true)]
public char PasswordChar
{
get { return _passwordChar; }
set
{
_passwordChar = value;
secureTextBox1.PasswordChar = _passwordChar;
secureTextBox2.PasswordChar = _passwordChar;
}
}
[Browsable(true)]
public bool UseSystemPasswordChar
{
get { return _useSystemPasswordChar; }
set
{
_useSystemPasswordChar = value;
secureTextBox1.UseSystemPasswordChar = _useSystemPasswordChar;
secureTextBox2.UseSystemPasswordChar = _useSystemPasswordChar;
}
}
public NewPasswordWithVerification()
{
InitializeComponent();
secureTextBox1.TextChanged += OnSecureTextBoxTextChanged;
secureTextBox2.TextChanged += OnSecureTextBoxTextChanged;
}
public void SetPassword(SecureString password)
{
var text = password.ConvertToUnsecureString();
secureTextBox1.Text = text;
secureTextBox2.Text = text;
}
private bool Verify()
{
return secureTextBox1.SecString.Length == secureTextBox2.SecString.Length &&
secureTextBox1.SecString.ConvertToUnsecureString() ==
secureTextBox2.SecString.ConvertToUnsecureString();
}
private void TogglePasswordMatchIndicator(bool passwordsMatch)
{
labelPasswordsDontMatch.Visible = !passwordsMatch;
imgError.Visible = !passwordsMatch;
if (passwordsMatch)
{
secureTextBox1.BackColor = SystemColors.Window;
secureTextBox2.BackColor = SystemColors.Window;
}
else
{
secureTextBox1.BackColor = Color.MistyRose;
secureTextBox2.BackColor = Color.MistyRose;
}
}
private void OnSecureTextBoxTextChanged(object sender, EventArgs eventArgs)
{
if (Verify() && !PasswordsMatch)
{
PasswordsMatch = true;
SecureString = secureTextBox1.SecString;
RaiseVerifiedEvent();
}
else
{
PasswordsMatch = false;
SecureString = null;
}
TogglePasswordMatchIndicator(PasswordsMatch);
}
public event EventHandler Verified;
private void RaiseVerifiedEvent()
{
Verified?.Invoke(this, EventArgs.Empty);
}
}
}