using System; namespace PepperDash.Core.PasswordManagement { /// /// Represents a PasswordClient /// public class PasswordClient { /// /// Password selected /// public string Password { get; set; } /// /// Password selected key /// public ushort Key { get; set; } /// /// Used to build the password entered by the user /// public string PasswordToValidate { get; set; } /// /// Boolean event /// public event EventHandler BoolChange; /// /// Ushort event /// public event EventHandler UshrtChange; /// /// String event /// public event EventHandler StringChange; /// /// Constructor /// public PasswordClient() { PasswordManager.PasswordChange += new EventHandler(PasswordManager_PasswordChange); } /// /// Initialize method /// public void Initialize() { OnBoolChange(false, 0, PasswordManagementConstants.PasswordInitializedChange); Password = ""; PasswordToValidate = ""; OnUshrtChange((ushort)PasswordManager.Passwords.Count, 0, PasswordManagementConstants.PasswordManagerCountChange); OnBoolChange(true, 0, PasswordManagementConstants.PasswordInitializedChange); } /// /// Retrieve password by index /// /// /// /// GetPasswordByIndex method /// public void GetPasswordByIndex(ushort key) { OnUshrtChange((ushort)PasswordManager.Passwords.Count, 0, PasswordManagementConstants.PasswordManagerCountChange); Key = key; var pw = PasswordManager.Passwords[Key]; if (pw == null) { OnUshrtChange(0, 0, PasswordManagementConstants.PasswordLengthChange); return; } Password = pw; OnUshrtChange((ushort)Password.Length, 0, PasswordManagementConstants.PasswordLengthChange); OnUshrtChange(key, 0, PasswordManagementConstants.PasswordSelectIndexChange); } /// /// Password validation method /// /// /// /// ValidatePassword method /// public void ValidatePassword(string password) { if (string.IsNullOrEmpty(password)) return; if (string.Equals(Password, password)) OnBoolChange(true, 0, PasswordManagementConstants.PasswordValidationChange); else OnBoolChange(false, 0, PasswordManagementConstants.PasswordValidationChange); ClearPassword(); } /// /// Builds the user entered passwrod string, will attempt to validate the user entered /// password against the selected password when the length of the 2 are equal /// /// /// /// BuildPassword method /// public void BuildPassword(string data) { PasswordToValidate = String.Concat(PasswordToValidate, data); OnBoolChange(true, (ushort)PasswordToValidate.Length, PasswordManagementConstants.PasswordLedFeedbackChange); if (PasswordToValidate.Length == Password.Length) ValidatePassword(PasswordToValidate); } /// /// ClearPassword method /// public void ClearPassword() { PasswordToValidate = ""; OnBoolChange(false, (ushort)PasswordToValidate.Length, PasswordManagementConstants.PasswordLedFeedbackChange); } /// /// Protected boolean change event handler /// /// /// /// protected void OnBoolChange(bool state, ushort index, ushort type) { var handler = BoolChange; if (handler != null) { var args = new BoolChangeEventArgs(state, type); args.Index = index; BoolChange(this, args); } } /// /// Protected ushort change event handler /// /// /// /// protected void OnUshrtChange(ushort value, ushort index, ushort type) { var handler = UshrtChange; if (handler != null) { var args = new UshrtChangeEventArgs(value, type); args.Index = index; UshrtChange(this, args); } } /// /// Protected string change event handler /// /// /// /// protected void OnStringChange(string value, ushort index, ushort type) { var handler = StringChange; if (handler != null) { var args = new StringChangeEventArgs(value, type); args.Index = index; StringChange(this, args); } } /// /// If password changes while selected change event will be notifed and update the client /// /// /// protected void PasswordManager_PasswordChange(object sender, StringChangeEventArgs args) { //throw new NotImplementedException(); if (Key == args.Index) { //PasswordSelectedKey = args.Index; //PasswordSelected = args.StringValue; GetPasswordByIndex(args.Index); } } } }