mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-10 10:15:01 +00:00
@@ -85,96 +85,79 @@ namespace PepperDash.Essentials.Core
|
||||
|
||||
var wrapper = new DeviceFactoryWrapper() { CType = cType, Description = description, FactoryMethod = method };
|
||||
DeviceFactory.FactoryMethods.Add(typeName, wrapper);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The factory method for Core "things". Also iterates the Factory methods that have
|
||||
/// been loaded from plugins
|
||||
/// </summary>
|
||||
/// <param name="dc"></param>
|
||||
/// <returns></returns>
|
||||
public static IKeyed GetDevice(DeviceConfig dc)
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
|
||||
private static void CheckForSecrets(IEnumerable<JProperty> obj)
|
||||
{
|
||||
foreach (var prop in obj.Where(prop => prop.Value as JObject != null))
|
||||
{
|
||||
if (prop.Name.ToLower() == "secret")
|
||||
{
|
||||
var secret = GetSecret(JsonConvert.DeserializeObject<SecretsPropertiesConfig>(prop.Children().First().ToString()));
|
||||
prop.Parent.Replace(secret);
|
||||
}
|
||||
var recurseProp = prop.Value as JObject;
|
||||
if (recurseProp == null) return;
|
||||
CheckForSecrets(recurseProp.Properties());
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetSecret(SecretsPropertiesConfig data)
|
||||
{
|
||||
var secretProvider = SecretsManager.GetSecretProviderByKey(data.Provider);
|
||||
if (secretProvider == null) return null;
|
||||
var secret = secretProvider.GetSecret(data.Key);
|
||||
if (secret != null) return (string) secret.Value;
|
||||
Debug.Console(1,
|
||||
"Unable to retrieve secret {0}{1} - Make sure you've added it to the secrets provider",
|
||||
data.Provider, data.Key);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The factory method for Core "things". Also iterates the Factory methods that have
|
||||
/// been loaded from plugins
|
||||
/// </summary>
|
||||
/// <param name="dc"></param>
|
||||
/// <returns></returns>
|
||||
public static
|
||||
IKeyed GetDevice(DeviceConfig dc)
|
||||
{
|
||||
try
|
||||
{
|
||||
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading '{0}' from Essentials Core", dc.Type);
|
||||
|
||||
var localDc = new DeviceConfig(dc);
|
||||
var localDc = new DeviceConfig(dc);
|
||||
|
||||
var key = localDc.Key;
|
||||
var name = localDc.Name;
|
||||
var type = localDc.Type;
|
||||
var key = localDc.Key;
|
||||
var name = localDc.Name;
|
||||
var type = localDc.Type;
|
||||
var properties = localDc.Properties;
|
||||
//var propRecurse = properties;
|
||||
//var propRecurse = properties;
|
||||
|
||||
var typeName = localDc.Type.ToLower();
|
||||
var typeName = localDc.Type.ToLower();
|
||||
|
||||
|
||||
var jObject = properties as JObject;
|
||||
if (jObject != null)
|
||||
{
|
||||
var jProp = jObject.Properties();
|
||||
|
||||
CheckForSecrets(jProp);
|
||||
}
|
||||
|
||||
Debug.Console(2, "typeName = {0}", typeName);
|
||||
// Check for types that have been added by plugin dlls.
|
||||
if (!FactoryMethods.ContainsKey(typeName)) return null;
|
||||
// Check for types that have been added by plugin dlls.
|
||||
return !FactoryMethods.ContainsKey(typeName) ? null : FactoryMethods[typeName].FactoryMethod(localDc);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.Console(2, "Issue with getting device - {0}", ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/*foreach (var obj in (propRecurse as JObject).FindTokens("secret").OfType<JObject>())
|
||||
{
|
||||
Debug.Console(2, obj.ToString());
|
||||
}*/
|
||||
|
||||
|
||||
//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<SecretsPropertiesConfig>(userSecretToken.ToString());
|
||||
var userProvider = SecretsManager.GetSecretProviderByKey(userSecretResult.Provider);
|
||||
if (userProvider != 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;
|
||||
}
|
||||
}
|
||||
|
||||
//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<SecretsPropertiesConfig>(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)
|
||||
{
|
||||
Debug.Console(2, "Issue with getting device - {0}", ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prints the type names and associated metadata from the FactoryMethods collection.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user