summaryrefslogtreecommitdiffstats
path: root/src/main.lib/Services/PluginService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.lib/Services/PluginService.cs')
-rw-r--r--src/main.lib/Services/PluginService.cs110
1 files changed, 35 insertions, 75 deletions
diff --git a/src/main.lib/Services/PluginService.cs b/src/main.lib/Services/PluginService.cs
index fff7fec..404e65d 100644
--- a/src/main.lib/Services/PluginService.cs
+++ b/src/main.lib/Services/PluginService.cs
@@ -14,103 +14,53 @@ namespace PKISharp.WACS.Services
public class PluginService : IPluginService
{
private readonly List<Type> _allTypes;
-
- private readonly List<Type> _optionProviders;
-
- private readonly List<Type> _targetOptionFactories;
- private readonly List<Type> _validationOptionFactories;
- private readonly List<Type> _csrOptionFactories;
- private readonly List<Type> _storeOptionFactories;
- private readonly List<Type> _installationOptionFactories;
-
- private readonly List<Type> _target;
- private readonly List<Type> _validation;
- private readonly List<Type> _csr;
- private readonly List<Type> _store;
- private readonly List<Type> _installation;
+ private readonly List<Type> _argumentProviders;
+ private readonly List<Type> _optionFactories;
+ private readonly List<Type> _plugins;
internal readonly ILogService _log;
- public List<IArgumentsProvider> OptionProviders()
+ public IEnumerable<IArgumentsProvider> ArgumentsProviders()
{
- return _optionProviders.Select(x =>
+ return _argumentProviders.Select(x =>
{
var c = x.GetConstructor(new Type[] { });
return (IArgumentsProvider)c.Invoke(new object[] { });
}).ToList();
}
- public List<ITargetPluginOptionsFactory> TargetPluginFactories(ILifetimeScope scope) => GetFactories<ITargetPluginOptionsFactory>(_targetOptionFactories, scope);
-
- public List<IValidationPluginOptionsFactory> ValidationPluginFactories(ILifetimeScope scope) => GetFactories<IValidationPluginOptionsFactory>(_validationOptionFactories, scope);
-
- public List<ICsrPluginOptionsFactory> CsrPluginOptionsFactories(ILifetimeScope scope) => GetFactories<ICsrPluginOptionsFactory>(_csrOptionFactories, scope);
-
- public List<IStorePluginOptionsFactory> StorePluginFactories(ILifetimeScope scope) => GetFactories<IStorePluginOptionsFactory>(_storeOptionFactories, scope);
-
- public List<IInstallationPluginOptionsFactory> InstallationPluginFactories(ILifetimeScope scope) => GetFactories<IInstallationPluginOptionsFactory>(_installationOptionFactories, scope);
-
- public ITargetPluginOptionsFactory TargetPluginFactory(ILifetimeScope scope, string name) => GetByName<ITargetPluginOptionsFactory>(_targetOptionFactories, name, scope);
-
- public IValidationPluginOptionsFactory ValidationPluginFactory(ILifetimeScope scope, string type, string name)
- {
- return _validationOptionFactories.
- Select(scope.Resolve).
- OfType<IValidationPluginOptionsFactory>().
- FirstOrDefault(x => x.Match(name) && string.Equals(type, x.ChallengeType, StringComparison.InvariantCultureIgnoreCase));
- }
-
- public ICsrPluginOptionsFactory CsrPluginFactory(ILifetimeScope scope, string name) => GetByName<ICsrPluginOptionsFactory>(_csrOptionFactories, name, scope);
-
- public IStorePluginOptionsFactory StorePluginFactory(ILifetimeScope scope, string name) => GetByName<IStorePluginOptionsFactory>(_storeOptionFactories, name, scope);
-
- public IInstallationPluginOptionsFactory InstallationPluginFactory(ILifetimeScope scope, string name) => GetByName<IInstallationPluginOptionsFactory>(_installationOptionFactories, name, scope);
-
- public List<Type> PluginOptionTypes<T>() where T : PluginOptions => GetResolvable<T>();
+ public IEnumerable<Type> PluginOptionTypes<T>() where T : PluginOptions => GetResolvable<T>();
internal void Configure(ContainerBuilder builder)
{
- _targetOptionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
- _validationOptionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
- _csrOptionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
- _storeOptionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
- _installationOptionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
-
- _target.ForEach(ip => builder.RegisterType(ip));
- _validation.ForEach(ip => builder.RegisterType(ip));
- _csr.ForEach(ip => builder.RegisterType(ip));
- _store.ForEach(ip => builder.RegisterType(ip));
- _installation.ForEach(ip => builder.RegisterType(ip));
+ _optionFactories.ForEach(t => builder.RegisterType(t).SingleInstance());
+ _plugins.ForEach(ip => builder.RegisterType(ip));
}
- private List<T> GetFactories<T>(List<Type> source, ILifetimeScope scope) where T : IPluginOptionsFactory => source.Select(scope.Resolve).OfType<T>().OrderBy(x => x.Order).ToList();
+ public IEnumerable<T> GetFactories<T>(ILifetimeScope scope) where T : IPluginOptionsFactory => _optionFactories.Select(scope.Resolve).OfType<T>().OrderBy(x => x.Order).ToList();
- private T GetByName<T>(IEnumerable<Type> list, string name, ILifetimeScope scope) where T : IPluginOptionsFactory => list.Select(scope.Resolve).OfType<T>().FirstOrDefault(x => x.Match(name));
+ private IEnumerable<T> GetByName<T>(string name, ILifetimeScope scope) where T : IPluginOptionsFactory => GetFactories<T>(scope).Where(x => x.Match(name));
public PluginService(ILogService logger)
{
_log = logger;
_allTypes = GetTypes();
- _optionProviders = GetResolvable<IArgumentsProvider>();
-
- _targetOptionFactories = GetResolvable<ITargetPluginOptionsFactory>();
- _validationOptionFactories = GetResolvable<IValidationPluginOptionsFactory>();
- _csrOptionFactories = GetResolvable<ICsrPluginOptionsFactory>();
- _storeOptionFactories = GetResolvable<IStorePluginOptionsFactory>(true);
- _installationOptionFactories = GetResolvable<IInstallationPluginOptionsFactory>(true);
-
- _target = GetResolvable<ITargetPlugin>();
- _validation = GetResolvable<IValidationPlugin>();
- _csr = GetResolvable<ICsrPlugin>();
- _store = GetResolvable<IStorePlugin>();
- _installation = GetResolvable<IInstallationPlugin>();
-
- ListPlugins(_target, "target");
- ListPlugins(_validation, "validation");
- ListPlugins(_csr, "csr");
- ListPlugins(_store, "store");
- ListPlugins(_installation, "installation");
+ _argumentProviders = GetResolvable<IArgumentsProvider>();
+ _optionFactories = GetResolvable<IPluginOptionsFactory>(true);
+ _plugins = new List<Type>();
+ void AddPluginType<T>(string name)
+ {
+ var temp = GetResolvable<T>();
+ ListPlugins(temp, name);
+ _plugins.AddRange(temp);
+ }
+ AddPluginType<ITargetPlugin>("target");
+ AddPluginType<IValidationPlugin>("validation");
+ AddPluginType<IOrderPlugin>("order");
+ AddPluginType<ICsrPlugin>("csr");
+ AddPluginType<IStorePlugin>("store");
+ AddPluginType<IInstallationPlugin>("installation");
}
private void ListPlugins(IEnumerable<Type> list, string type)
@@ -257,5 +207,15 @@ namespace PKISharp.WACS.Services
}
return ret.ToList();
}
+
+ public T GetFactory<T>(ILifetimeScope scope, string name, string? parameter = null) where T : IPluginOptionsFactory
+ {
+ var plugins = GetByName<T>(name, scope);
+ if (typeof(T) is IValidationPluginOptionsFactory)
+ {
+ plugins = plugins.Where(x => string.Equals(parameter, (x as IValidationPluginOptionsFactory)?.ChallengeType, StringComparison.InvariantCultureIgnoreCase));
+ }
+ return plugins.FirstOrDefault();
+ }
}
}