diff --git a/Pepperdash Core/Pepperdash Core/PasswordManager/Config.cs b/Pepperdash Core/Pepperdash Core/PasswordManagement/Config.cs
similarity index 66%
rename from Pepperdash Core/Pepperdash Core/PasswordManager/Config.cs
rename to Pepperdash Core/Pepperdash Core/PasswordManagement/Config.cs
index c783113..82f1714 100644
--- a/Pepperdash Core/Pepperdash Core/PasswordManager/Config.cs
+++ b/Pepperdash Core/Pepperdash Core/PasswordManagement/Config.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using Crestron.SimplSharp;
-namespace PepperDash.Core.PasswordManager
+namespace PepperDash.Core.PasswordManagement
{
// Example JSON password configuration object
//{
@@ -13,7 +13,7 @@ namespace PepperDash.Core.PasswordManager
// {
// "key": "Password01",
// "name": "Technician Password",
- // "enable": true,
+ // "enabled": true,
// "password": "1988"
// }
// ]
@@ -36,18 +36,38 @@ namespace PepperDash.Core.PasswordManager
///
/// Password object enabled
///
- public bool enable { get; set; }
+ public bool enabled { get; set; }
+ ///
+ ///
+ ///
+ public ushort simplEnabled
+ {
+ get { return (ushort)(enabled ? 1 : 0); }
+ set { enabled = Convert.ToBoolean(value); }
+ }
///
/// Password object configured password
///
public string password { get; set; }
-
+ ///
+ /// Password type
+ ///
+ private int type { get; set; }
+ ///
+ /// Password Type for S+
+ ///
+ public ushort simplType
+ {
+ get { return Convert.ToUInt16(type); }
+ set { type = value; }
+ }
///
/// Constructor
///
public PasswordConfig()
{
-
+ simplEnabled = 0;
+ simplType = 0;
}
}
@@ -63,7 +83,7 @@ namespace PepperDash.Core.PasswordManager
///
public GlobalConfig()
{
-
+
}
}
diff --git a/Pepperdash Core/Pepperdash Core/PasswordManagement/Constants.cs b/Pepperdash Core/Pepperdash Core/PasswordManagement/Constants.cs
new file mode 100644
index 0000000..9319b7b
--- /dev/null
+++ b/Pepperdash Core/Pepperdash Core/PasswordManagement/Constants.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+namespace PepperDash.Core.PasswordManagement
+{
+ ///
+ /// Constants
+ ///
+ public class PasswordManagementConstants
+ {
+ ///
+ /// Generic boolean value change constant
+ ///
+ public const ushort BoolValueChange = 1;
+ ///
+ /// Evaluated boolean change constant
+ ///
+ public const ushort BoolEvaluatedChange = 2;
+ ///
+ /// Password is valid change constant
+ ///
+ public const ushort PasswordIsValid = 3;
+ ///
+ /// Password is invalid change constant
+ ///
+ public const ushort PasswordIsInvalid = 4;
+ ///
+ /// Password LED change constant
+ ///
+ public const ushort PasswordLedChange = 5;
+
+ ///
+ /// Generic ushort value change constant
+ ///
+ public const ushort UshrtValueChange = 101;
+ ///
+ /// Password count
+ ///
+ public const ushort PasswordListCount = 102;
+ ///
+ /// Password length
+ ///
+ public const ushort SelectedPasswordLength = 103;
+ ///
+ /// Password to validate length
+ ///
+ public const ushort UserEnteredPasswordLength = 104;
+
+ ///
+ /// Generic string value change constant
+ ///
+ public const ushort StringValueChange = 201;
+ ///
+ /// Password key change constant
+ ///
+ public const ushort PasswordKey = 202;
+ ///
+ /// Password selected key change constant
+ ///
+ public const ushort PasswordKeySelected = 203;
+ }
+}
\ No newline at end of file
diff --git a/Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordClient.cs b/Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordClient.cs
new file mode 100644
index 0000000..7d3d254
--- /dev/null
+++ b/Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordClient.cs
@@ -0,0 +1,189 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+namespace PepperDash.Core.PasswordManagement
+{
+ public class PasswordClient
+ {
+ ///
+ /// Password Client
+ ///
+ public PasswordConfig Client { 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()
+ {
+
+ }
+
+ ///
+ /// Initialize method
+ ///
+ ///
+ public void Initialize(string key)
+ {
+ OnBoolChange(false, 0, PasswordManagementConstants.BoolEvaluatedChange);
+
+ Client = new PasswordConfig();
+ PasswordToValidate = "";
+
+ // there has to be a better way to get the index of the current index of password
+ ushort i = 0;
+ foreach (var password in PasswordManager.Passwords)
+ {
+ i++;
+ OnStringChange(password.key, i, PasswordManagementConstants.PasswordKey);
+ }
+
+ OnBoolChange(true, 0, PasswordManagementConstants.BoolEvaluatedChange);
+ }
+
+ ///
+ /// Retrieves password by key
+ ///
+ ///
+ public void GetPasswordByKey(string key)
+ {
+ if (string.IsNullOrEmpty(key))
+ {
+ Debug.Console(1, "PassowrdClient.GetPasswordByKey failed:\rKey {0} is null or empty", key);
+ return;
+ }
+
+ PasswordConfig password = PasswordManager.Passwords.FirstOrDefault(p => p.key.Equals(key));
+ if (password == null)
+ {
+ OnUshrtChange(0, 0, PasswordManagementConstants.SelectedPasswordLength);
+ return;
+ }
+
+ Client = password;
+ OnUshrtChange((ushort)Client.password.Length, 0, PasswordManagementConstants.SelectedPasswordLength);
+ OnStringChange(Client.key, 0, PasswordManagementConstants.PasswordKeySelected);
+ }
+
+ ///
+ /// Password validation method
+ ///
+ ///
+ public void ValidatePassword(string password)
+ {
+ if (string.IsNullOrEmpty(password))
+ return;
+
+ if (string.Equals(Client.password, password))
+ {
+ OnBoolChange(true, 0, PasswordManagementConstants.PasswordIsValid);
+ }
+ else
+ {
+ OnBoolChange(true, 0, PasswordManagementConstants.PasswordIsInvalid);
+ }
+
+
+ OnBoolChange(false, 0, PasswordManagementConstants.PasswordIsValid);
+ OnBoolChange(false, 0, PasswordManagementConstants.PasswordIsInvalid);
+
+ 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
+ ///
+ ///
+ public void BuildPassword(string data)
+ {
+ PasswordToValidate = String.Concat(PasswordToValidate, data);
+ OnBoolChange(true, (ushort)PasswordToValidate.Length, PasswordManagementConstants.PasswordLedChange);
+
+ if (PasswordToValidate.Length == Client.password.Length)
+ ValidatePassword(PasswordToValidate);
+ }
+
+ ///
+ /// Clears the user entered password and resets the LEDs
+ ///
+ public void ClearPassword()
+ {
+ PasswordToValidate = "";
+ OnBoolChange(true, (ushort)PasswordToValidate.Length, PasswordManagementConstants.PasswordLedChange);
+
+ for(var i = 1; i <= Client.password.Length; i++)
+ OnBoolChange(false, (ushort)i, PasswordManagementConstants.PasswordLedChange);
+ }
+
+ ///
+ /// 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);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Pepperdash Core/Pepperdash Core/PasswordManager/PasswordManager.cs b/Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordManager.cs
similarity index 75%
rename from Pepperdash Core/Pepperdash Core/PasswordManager/PasswordManager.cs
rename to Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordManager.cs
index e31ba00..15d0d5f 100644
--- a/Pepperdash Core/Pepperdash Core/PasswordManager/PasswordManager.cs
+++ b/Pepperdash Core/Pepperdash Core/PasswordManagement/PasswordManager.cs
@@ -7,14 +7,14 @@ using Newtonsoft.Json.Linq;
using Crestron.SimplSharp;
using PepperDash.Core.JsonToSimpl;
-namespace PepperDash.Core.PasswordManager
+namespace PepperDash.Core.PasswordManagement
{
- public class PasswordManager : IKeyed
+ public class PasswordManager
{
- public string Key { get; set; }
-
- public List Passwords { get; set; }
-
+ ///
+ /// List of passwords configured
+ ///
+ public static List Passwords = new List();
///
/// Boolean event
///
@@ -33,7 +33,7 @@ namespace PepperDash.Core.PasswordManager
///
public PasswordManager()
{
-
+ Passwords.Clear();
}
///
@@ -43,7 +43,7 @@ namespace PepperDash.Core.PasswordManager
///
public void Initialize(string uniqueId, string key)
{
- OnBoolChange(false, 0, PasswordManagerConstants.BoolEvaluatedChange);
+ OnBoolChange(false, 0, PasswordManagementConstants.BoolEvaluatedChange);
try
{
@@ -53,8 +53,6 @@ namespace PepperDash.Core.PasswordManager
return;
}
- Key = key;
-
JsonToSimplMaster master = J2SGlobal.GetMasterByFile(uniqueId);
if(master == null)
{
@@ -64,25 +62,31 @@ namespace PepperDash.Core.PasswordManager
var passwords = master.JsonObject.ToObject().global.passwords;
if(passwords == null)
- {
+ {
Debug.Console(1, "PasswordManager.Initialize failed:\rCould not find password object");
return;
}
foreach(var password in passwords)
{
- AddPassword(password);
+ if (password != null)
+ {
+ Debug.Console(1, "PasswordManager.Initialize: {0}, {1}, {2}, {3}, {4}", password.key, password.name, password.simplEnabled, password.simplType, password.password);
+ AddPassword(password);
+ }
}
+
+ OnUshrtChange(Convert.ToUInt16(Passwords.Count), 0, PasswordManagementConstants.PasswordListCount);
}
catch(Exception e)
{
- var msg = string.Format("PasswordManager.Initialize({0}, {1}) failed:\r{2}", uniqueId, Key, e.Message);
+ var msg = string.Format("PasswordManager.Initialize({0}, {1}) failed:\r{2}", uniqueId, key, e.Message);
CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg);
}
finally
{
- OnBoolChange(true, 0, PasswordManagerConstants.BoolEvaluatedChange);
+ OnBoolChange(true, 0, PasswordManagementConstants.BoolEvaluatedChange);
}
}
@@ -95,7 +99,9 @@ namespace PepperDash.Core.PasswordManager
if (password == null)
return;
- RemovePassword(password);
+ var item = Passwords.FirstOrDefault(i => i.key.Equals(password.key));
+ if (item != null)
+ Passwords.Remove(item);
Passwords.Add(password);
}
@@ -108,7 +114,7 @@ namespace PepperDash.Core.PasswordManager
if (password == null)
return;
- var item = Passwords.FirstOrDefault(p => p.key.Equals(password.key));
+ var item = Passwords.FirstOrDefault(i => i.key.Equals(password.key));
if (item != null)
Passwords.Remove(item);
}
diff --git a/Pepperdash Core/Pepperdash Core/PasswordManager/Constants.cs b/Pepperdash Core/Pepperdash Core/PasswordManager/Constants.cs
deleted file mode 100644
index a85349e..0000000
--- a/Pepperdash Core/Pepperdash Core/PasswordManager/Constants.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-
-namespace PepperDash.Core.PasswordManager
-{
- ///
- /// Constants
- ///
- public class PasswordManagerConstants
- {
- ///
- /// Generic boolean value change constant
- ///
- public const ushort BoolValueChange = 1;
- ///
- /// Evaluated boolean change constant
- ///
- public const ushort BoolEvaluatedChange = 2;
-
- ///
- /// Generic ushort value change constant
- ///
- public const ushort UshrtValueChange = 101;
-
- ///
- /// Generic string value change constant
- ///
- public const ushort StringValueChange = 201;
- }
-}
\ No newline at end of file
diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj
index 4e6bc43..1d98c97 100644
--- a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj
+++ b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj
@@ -110,9 +110,10 @@
-
-
-
+
+
+
+