From babc3e4f1a9cf46e8bfdf0d5677a285f350f477d Mon Sep 17 00:00:00 2001 From: Trevor Payne Date: Thu, 15 Apr 2021 14:36:43 -0500 Subject: [PATCH] fixed minor registration error --- .../Extensions/JsonExtensions.cs | 42 ++++++++ .../Factory/DeviceFactory.cs | 99 ++++++++++--------- .../PepperDash_Essentials_Core.csproj | 1 + 3 files changed, 94 insertions(+), 48 deletions(-) create mode 100644 essentials-framework/Essentials Core/PepperDashEssentialsBase/Extensions/JsonExtensions.cs diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Extensions/JsonExtensions.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Extensions/JsonExtensions.cs new file mode 100644 index 00000000..cdf723ea --- /dev/null +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Extensions/JsonExtensions.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace PepperDash.Essentials.Core +{ + public static class JsonExtensions + { + public static List FindTokens(this JToken containerToken, string name) + { + List matches = new List(); + FindTokens(containerToken, name, matches); + return matches; + } + + private static void FindTokens(JToken containerToken, string name, List matches) + { + if (containerToken.Type == JTokenType.Object) + { + foreach (JProperty child in containerToken.Children()) + { + if (child.Name == name) + { + matches.Add(child.Value); + } + FindTokens(child.Value, name, matches); + } + } + else if (containerToken.Type == JTokenType.Array) + { + foreach (JToken child in containerToken.Children()) + { + FindTokens(child, name, matches); + } + } + } + } +} \ No newline at end of file diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs index a0108490..cb7dd0b7 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs @@ -105,65 +105,68 @@ namespace PepperDash.Essentials.Core var name = localDc.Name; var type = localDc.Type; var properties = localDc.Properties; - - + //var propRecurse = properties; var typeName = localDc.Type.ToLower(); Debug.Console(2, "typeName = {0}", typeName); // Check for types that have been added by plugin dlls. - if (FactoryMethods.ContainsKey(typeName)) + if (!FactoryMethods.ContainsKey(typeName)) return null; + + /*foreach (var obj in (propRecurse as JObject).FindTokens("secret").OfType()) + { + Debug.Console(2, obj.ToString()); + }*/ + + + //look for secret in username + var userSecretToken = properties["control"]["tcpSshProperties"]["username"]["secret"]; + + if (userSecretToken != null) { - //look for secret in username - var userSecretToken = properties["control"]["tcpSshProperties"]["username"]["secret"]; - - if (userSecretToken != null) + Debug.Console(2, "Found a secret for {0} - attempting to retrieve it!", name); + var userSecretResult = + JsonConvert.DeserializeObject(userSecretToken.ToString()); + var userProvider = SecretsManager.GetSecretProviderByKey(userSecretResult.Provider); + if (userProvider != null) { - Debug.Console(2, "Found a secret for {0} - attempting to retrieve it!", name); - var userSecretResult = - JsonConvert.DeserializeObject(userSecretToken.ToString()); - var userProvider = SecretsManager.GetSecretProviderByKey(userSecretResult.Provider); - if (userProvider != null) + var user = userProvider.GetSecret(userSecretResult.Key); + if (user == null) { - var user = userProvider.GetSecret(userSecretResult.Key); - if (user == null) - { - Debug.Console(1, - "Unable to retrieve secret for {0} - Make sure you've added it to the secrets provider"); - return null; - } - properties["control"]["tcpSshProperties"]["username"] = (string) user.Value; + Debug.Console(1, + "Unable to retrieve secret for {0} - Make sure you've added it to the secrets provider"); + return null; } + properties["control"]["tcpSshProperties"]["username"] = (string) user.Value; } - - //look for secret in password - var passwordSecretToken = properties["control"]["tcpSshProperties"]["password"]["secret"]; - - if (passwordSecretToken != null) - { - Debug.Console(2, "Found a secret for {0} - attempting to retrieve it!", name); - - var passwordSecretResult = - JsonConvert.DeserializeObject(passwordSecretToken.ToString()); - var passwordProvider = SecretsManager.GetSecretProviderByKey(passwordSecretResult.Provider); - if (passwordProvider != null) - { - var password = passwordProvider.GetSecret(passwordSecretResult.Key); - if (password == null) - { - Debug.Console(1, - "Unable to retrieve secret for {0} - Make sure you've added it to the secrets provider"); - return null; - } - properties["control"]["tcpSshProperties"]["password"] = (string) password.Value; - } - } - - Debug.Console(0, "{0}", localDc.Properties.ToString()); - - return FactoryMethods[typeName].FactoryMethod(localDc); } - return null; + + //look for secret in password + var passwordSecretToken = properties["control"]["tcpSshProperties"]["password"]["secret"]; + + if (passwordSecretToken != null) + { + Debug.Console(2, "Found a secret for {0} - attempting to retrieve it!", name); + + var passwordSecretResult = + JsonConvert.DeserializeObject(passwordSecretToken.ToString()); + var passwordProvider = SecretsManager.GetSecretProviderByKey(passwordSecretResult.Provider); + if (passwordProvider != null) + { + var password = passwordProvider.GetSecret(passwordSecretResult.Key); + if (password == null) + { + Debug.Console(1, + "Unable to retrieve secret for {0} - Make sure you've added it to the secrets provider"); + return null; + } + properties["control"]["tcpSshProperties"]["password"] = (string)password.Value; + } + } + + Debug.Console(0, "{0}", localDc.Properties.ToString()); + + return FactoryMethods[typeName].FactoryMethod(localDc); } catch (Exception ex) { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index f202434e..e65b081b 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -209,6 +209,7 @@ +