summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/Clients/IIS/IISClient.cs2
-rw-r--r--src/main/Configuration/MainArguments.cs17
-rw-r--r--src/main/Configuration/MainArgumentsProvider.cs26
-rw-r--r--src/main/Extensions/MainArgumentsExtensions.cs2
-rw-r--r--src/main/Plugins/TargetPlugins/IISBinding/IISBinding.cs4
-rw-r--r--src/main/Plugins/TargetPlugins/IISBinding/IISBindingArguments.cs8
-rw-r--r--src/main/Plugins/TargetPlugins/IISBinding/IISBindingArgumentsProvider.cs28
-rw-r--r--src/main/Plugins/TargetPlugins/IISBinding/IISBindingOptionsFactory.cs5
-rw-r--r--src/main/Plugins/TargetPlugins/IISSite/IISSiteArguments.cs9
-rw-r--r--src/main/Plugins/TargetPlugins/IISSite/IISSiteArgumentsProvider.cs31
-rw-r--r--src/main/Plugins/TargetPlugins/IISSite/IISSiteOptionsFactory.cs9
-rw-r--r--src/main/Plugins/TargetPlugins/IISSites/IISSitesOptionsFactory.cs7
-rw-r--r--src/main/Plugins/TargetPlugins/Manual/ManualArguments.cs8
-rw-r--r--src/main/Plugins/TargetPlugins/Manual/ManualArgumentsProvider.cs27
-rw-r--r--src/main/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs5
-rw-r--r--src/main/wacs.csproj6
16 files changed, 142 insertions, 52 deletions
diff --git a/src/main/Clients/IIS/IISClient.cs b/src/main/Clients/IIS/IISClient.cs
index df3dcac..77109a1 100644
--- a/src/main/Clients/IIS/IISClient.cs
+++ b/src/main/Clients/IIS/IISClient.cs
@@ -313,7 +313,7 @@ namespace PKISharp.WACS.Clients.IIS
{
var bestMatch = httpMatches.First();
var addOptions = bindingOptions.WithHost(bestMatch.binding.Host);
- if (AllowAdd(addOptions, allBindings)) ;
+ if (AllowAdd(addOptions, allBindings))
{
AddBinding(site, addOptions);
return bestMatch.binding.Host;
diff --git a/src/main/Configuration/MainArguments.cs b/src/main/Configuration/MainArguments.cs
index 84d2ac8..5cb8302 100644
--- a/src/main/Configuration/MainArguments.cs
+++ b/src/main/Configuration/MainArguments.cs
@@ -2,8 +2,6 @@
{
public class MainArguments
{
- #region Basic
-
public string BaseUri { get; set; }
public string ImportBaseUri { get; set; }
@@ -26,19 +24,8 @@
public string Store { get; set; }
public string Installation { get; set; }
- #endregion
-
- #region Target
-
- public string SiteId { get; set; }
- public string CommonName { get; set; }
- public string ExcludeBindings { get; set; }
- public bool HideHttps { get; set; }
- public string Host { get; set; }
-
- #endregion
-
public bool CloseOnFinish { get; set; }
+ public bool HideHttps { get; set; }
public bool NoTaskScheduler { get; set; }
public bool UseDefaultTaskUser { get; set; }
@@ -46,4 +33,4 @@
public bool AcceptTos { get; set; }
public string EmailAddress { get; set; }
}
-}
+} \ No newline at end of file
diff --git a/src/main/Configuration/MainArgumentsProvider.cs b/src/main/Configuration/MainArgumentsProvider.cs
index ed02658..923c634 100644
--- a/src/main/Configuration/MainArgumentsProvider.cs
+++ b/src/main/Configuration/MainArgumentsProvider.cs
@@ -87,29 +87,16 @@ namespace PKISharp.WACS.Configuration
.As("installation")
.WithDescription("Specify which installation plugins to use. This may be a comma separated list.");
- // Remove
- parser.Setup(o => o.SiteId)
- .As("siteid")
- .WithDescription("[--target iissite|iissites|iisbinding] Specify identifier of the site that the plugin should create the target from. For the iissites plugin this may be a comma separated list.");
- parser.Setup(o => o.CommonName)
- .As("commonname")
- .WithDescription("[--target iissite|iissites|manual] Specify the common name of the certificate that should be requested for the target.");
- parser.Setup(o => o.ExcludeBindings)
- .As("excludebindings")
- .WithDescription("[--target iissite|iissites] Exclude bindings from being included in the certificate. This may be a comma separated list.");
- parser.Setup(o => o.HideHttps)
- .As("hidehttps")
- .WithDescription("Hide sites that have existing https bindings.");
- parser.Setup(o => o.Host)
- .As("host")
- .WithDescription("[--target manual|iisbinding] A host name to manually get a certificate for. For the manual plugin this may be a comma separated list.");
-
// Misc
parser.Setup(o => o.CloseOnFinish)
.As("closeonfinish")
.WithDescription("[--test] Close the application when complete, which usually doesn't happen in test mode.");
+ parser.Setup(o => o.HideHttps)
+ .As("hidehttps")
+ .WithDescription("Hide sites that have existing https bindings.");
+
parser.Setup(o => o.NoTaskScheduler)
.As("notaskscheduler")
.WithDescription("Do not create (or offer to update) the scheduled task.");
@@ -131,12 +118,9 @@ namespace PKISharp.WACS.Configuration
public override bool Active(MainArguments current)
{
- return !string.IsNullOrEmpty(current.CommonName) ||
- !string.IsNullOrEmpty(current.ExcludeBindings) ||
+ return
!string.IsNullOrEmpty(current.FriendlyName) ||
- !string.IsNullOrEmpty(current.Host) ||
!string.IsNullOrEmpty(current.Installation) ||
- !string.IsNullOrEmpty(current.SiteId) ||
!string.IsNullOrEmpty(current.Store) ||
!string.IsNullOrEmpty(current.Target) ||
!string.IsNullOrEmpty(current.Validation);
diff --git a/src/main/Extensions/MainArgumentsExtensions.cs b/src/main/Extensions/MainArgumentsExtensions.cs
index 0b131aa..06ac9f0 100644
--- a/src/main/Extensions/MainArgumentsExtensions.cs
+++ b/src/main/Extensions/MainArgumentsExtensions.cs
@@ -36,8 +36,6 @@ namespace PKISharp.WACS.Extensions
options.Renew = false;
options.FriendlyName = null;
options.Force = false;
- options.ExcludeBindings = null;
- options.CommonName = null;
options.List = false;
options.Version = false;
options.Help = false;
diff --git a/src/main/Plugins/TargetPlugins/IISBinding/IISBinding.cs b/src/main/Plugins/TargetPlugins/IISBinding/IISBinding.cs
index 21503a7..002f3b2 100644
--- a/src/main/Plugins/TargetPlugins/IISBinding/IISBinding.cs
+++ b/src/main/Plugins/TargetPlugins/IISBinding/IISBinding.cs
@@ -28,10 +28,10 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
var binding = bindings.FirstOrDefault(x => x.HostUnicode == _options.Host);
if (binding == null)
{
- _log.Error("Binding {binding} no longer found in IIS", _options.Host);
+ _log.Error("Binding {binding} not yet found in IIS, create it or use the Manual target plugin instead", _options.Host);
return null;
}
- if (binding.SiteId != _options.SiteId)
+ else if (binding.SiteId != _options.SiteId)
{
_log.Warning("Binding {binding} moved from site {a} to site {b}", _options.SiteId, binding.SiteId);
_options.SiteId = binding.SiteId;
diff --git a/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArguments.cs b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArguments.cs
new file mode 100644
index 0000000..7340fb2
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArguments.cs
@@ -0,0 +1,8 @@
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class IISBindingArguments
+ {
+ public string SiteId { get; set; }
+ public string Host { get; set; }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArgumentsProvider.cs b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArgumentsProvider.cs
new file mode 100644
index 0000000..2c98f91
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingArgumentsProvider.cs
@@ -0,0 +1,28 @@
+using Fclp;
+using PKISharp.WACS.Configuration;
+
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class IISBindingArgumentsProvider : BaseArgumentsProvider<IISBindingArguments>
+ {
+ public override string Name => "IIS Binding";
+ public override string Group => "Target";
+ public override string Condition => "--target iisbinding";
+
+ public override bool Active(IISBindingArguments current)
+ {
+ return !string.IsNullOrEmpty(current.SiteId) ||
+ !string.IsNullOrEmpty(current.Host);
+ }
+
+ public override void Configure(FluentCommandLineParser<IISBindingArguments> parser)
+ {
+ parser.Setup(o => o.SiteId)
+ .As("siteid")
+ .WithDescription("Id of the site where the binding should be found.");
+ parser.Setup(o => o.Host)
+ .As("host")
+ .WithDescription("Host name to get a certificate for.");
+ }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/IISBinding/IISBindingOptionsFactory.cs b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingOptionsFactory.cs
index 3aa560b..e1395dc 100644
--- a/src/main/Plugins/TargetPlugins/IISBinding/IISBindingOptionsFactory.cs
+++ b/src/main/Plugins/TargetPlugins/IISBinding/IISBindingOptionsFactory.cs
@@ -42,8 +42,9 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
public override IISBindingOptions Default(IOptionsService optionsService)
{
var ret = new IISBindingOptions();
- var hostName = optionsService.TryGetRequiredOption(nameof(optionsService.MainArguments.Host), optionsService.MainArguments.Host).ToLower();
- var rawSiteId = optionsService.MainArguments.SiteId;
+ var args = optionsService.GetArguments<IISBindingArguments>();
+ var hostName = optionsService.TryGetRequiredOption(nameof(args.Host), args.Host).ToLower();
+ var rawSiteId = args.SiteId;
var filterSet = _helper.GetBindings(false, false);
if (!string.IsNullOrEmpty(rawSiteId))
{
diff --git a/src/main/Plugins/TargetPlugins/IISSite/IISSiteArguments.cs b/src/main/Plugins/TargetPlugins/IISSite/IISSiteArguments.cs
new file mode 100644
index 0000000..e03ae08
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/IISSite/IISSiteArguments.cs
@@ -0,0 +1,9 @@
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class IISSiteArguments
+ {
+ public string SiteId { get; set; }
+ public string CommonName { get; set; }
+ public string ExcludeBindings { get; set; }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/IISSite/IISSiteArgumentsProvider.cs b/src/main/Plugins/TargetPlugins/IISSite/IISSiteArgumentsProvider.cs
new file mode 100644
index 0000000..69520c9
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/IISSite/IISSiteArgumentsProvider.cs
@@ -0,0 +1,31 @@
+using Fclp;
+using PKISharp.WACS.Configuration;
+
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class IISSiteArgumentsProvider : BaseArgumentsProvider<IISSiteArguments>
+ {
+ public override string Name => "IISSite(s)";
+ public override string Group => "Target";
+ public override string Condition => "--target iissite|iissites";
+ public override bool Active(IISSiteArguments current)
+ {
+ return !string.IsNullOrEmpty(current.SiteId) ||
+ !string.IsNullOrEmpty(current.CommonName) ||
+ !string.IsNullOrEmpty(current.ExcludeBindings);
+ }
+
+ public override void Configure(FluentCommandLineParser<IISSiteArguments> parser)
+ {
+ parser.Setup(o => o.SiteId)
+ .As("siteid")
+ .WithDescription("Specify identifier of the site that the plugin should create the target from. For iissites this may be a comma separated list.");
+ parser.Setup(o => o.CommonName)
+ .As("commonname")
+ .WithDescription("Specify the common name of the certificate that should be requested for the target.");
+ parser.Setup(o => o.ExcludeBindings)
+ .As("excludebindings")
+ .WithDescription("Exclude bindings from the certificate. This may be a comma separated list.");
+ }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/IISSite/IISSiteOptionsFactory.cs b/src/main/Plugins/TargetPlugins/IISSite/IISSiteOptionsFactory.cs
index bdad9ce..0f7ae42 100644
--- a/src/main/Plugins/TargetPlugins/IISSite/IISSiteOptionsFactory.cs
+++ b/src/main/Plugins/TargetPlugins/IISSite/IISSiteOptionsFactory.cs
@@ -50,21 +50,22 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
public override IISSiteOptions Default(IOptionsService optionsService)
{
var ret = new IISSiteOptions();
- var rawSiteId = optionsService.TryGetRequiredOption(nameof(optionsService.MainArguments.SiteId), optionsService.MainArguments.SiteId);
+ var args = optionsService.GetArguments<IISSiteArguments>();
+ var rawSiteId = optionsService.TryGetRequiredOption(nameof(args.SiteId), args.SiteId);
if (long.TryParse(rawSiteId, out long siteId))
{
var site = _helper.GetSites(false, false).FirstOrDefault(binding => binding.Id == siteId);
if (site != null)
{
ret.SiteId = site.Id;
- ret.ExcludeBindings = optionsService.MainArguments.ExcludeBindings.ParseCsv();
+ ret.ExcludeBindings = args.ExcludeBindings.ParseCsv();
if (ret.ExcludeBindings != null)
{
ret.ExcludeBindings = ret.ExcludeBindings.Select(x => x.ConvertPunycode()).ToList();
}
ret.FriendlyNameSuggestion = $"Site-{ret.SiteId}";
- var commonName = optionsService.MainArguments.CommonName;
+ var commonName = args.CommonName;
if (!string.IsNullOrWhiteSpace(commonName))
{
commonName = commonName.ToLower().Trim().ConvertPunycode();
@@ -88,7 +89,7 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
}
else
{
- _log.Error("Invalid SiteId {siteId}", optionsService.MainArguments.SiteId);
+ _log.Error("Invalid SiteId {siteId}", args.SiteId);
}
return null;
}
diff --git a/src/main/Plugins/TargetPlugins/IISSites/IISSitesOptionsFactory.cs b/src/main/Plugins/TargetPlugins/IISSites/IISSitesOptionsFactory.cs
index 7521e33..bee06ac 100644
--- a/src/main/Plugins/TargetPlugins/IISSites/IISSitesOptionsFactory.cs
+++ b/src/main/Plugins/TargetPlugins/IISSites/IISSitesOptionsFactory.cs
@@ -49,19 +49,20 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
public override IISSitesOptions Default(IOptionsService optionsService)
{
var ret = new IISSitesOptions();
+ var args = optionsService.GetArguments<IISSiteArguments>();
var sites = _helper.GetSites(false, false);
- var rawSiteIds = optionsService.TryGetRequiredOption(nameof(optionsService.MainArguments.SiteId), optionsService.MainArguments.SiteId);
+ var rawSiteIds = optionsService.TryGetRequiredOption(nameof(args.SiteId), args.SiteId);
sites = ProcessSiteIds(ret, sites, rawSiteIds);
if (sites == null)
{
return null;
}
- ret.ExcludeBindings = optionsService.MainArguments.ExcludeBindings.ParseCsv();
+ ret.ExcludeBindings = args.ExcludeBindings.ParseCsv();
if (ret.ExcludeBindings != null)
{
ret.ExcludeBindings = ret.ExcludeBindings.Select(x => x.ConvertPunycode()).ToList();
}
- var commonName = optionsService.MainArguments.CommonName;
+ var commonName = args.CommonName;
if (!string.IsNullOrWhiteSpace(commonName))
{
commonName = commonName.ToLower().Trim().ConvertPunycode();
diff --git a/src/main/Plugins/TargetPlugins/Manual/ManualArguments.cs b/src/main/Plugins/TargetPlugins/Manual/ManualArguments.cs
new file mode 100644
index 0000000..18cae37
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/Manual/ManualArguments.cs
@@ -0,0 +1,8 @@
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class ManualArguments
+ {
+ public string CommonName { get; set; }
+ public string Host { get; set; }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/Manual/ManualArgumentsProvider.cs b/src/main/Plugins/TargetPlugins/Manual/ManualArgumentsProvider.cs
new file mode 100644
index 0000000..50e24e4
--- /dev/null
+++ b/src/main/Plugins/TargetPlugins/Manual/ManualArgumentsProvider.cs
@@ -0,0 +1,27 @@
+using Fclp;
+using PKISharp.WACS.Configuration;
+
+namespace PKISharp.WACS.Plugins.TargetPlugins
+{
+ class ManualArgumentsProvider : BaseArgumentsProvider<ManualArguments>
+ {
+ public override string Name => "Manual";
+ public override string Group => "Target";
+ public override string Condition => "--target manual";
+
+ public override bool Active(ManualArguments current)
+ {
+ return !string.IsNullOrEmpty(current.Host);
+ }
+
+ public override void Configure(FluentCommandLineParser<ManualArguments> parser)
+ {
+ parser.Setup(o => o.CommonName)
+ .As("commonname")
+ .WithDescription("Specify the common name of the certificate. If not provided the first host name will be used.");
+ parser.Setup(o => o.Host)
+ .As("host")
+ .WithDescription("A host name to get a certificate for. This may be a comma separated list.");
+ }
+ }
+}
diff --git a/src/main/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs b/src/main/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs
index 4e82150..86855be 100644
--- a/src/main/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs
+++ b/src/main/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs
@@ -24,9 +24,10 @@ namespace PKISharp.WACS.Plugins.TargetPlugins
public override ManualOptions Default(IOptionsService optionsService)
{
- var input = optionsService.TryGetRequiredOption(nameof(optionsService.MainArguments.Host), optionsService.MainArguments.Host);
+ var args = optionsService.GetArguments<ManualArguments>();
+ var input = optionsService.TryGetRequiredOption(nameof(args.Host), args.Host);
var ret = Create(input);
- var commonName = optionsService.MainArguments.CommonName;
+ var commonName = args.CommonName;
if (!string.IsNullOrWhiteSpace(commonName))
{
commonName = commonName.ToLower().Trim().ConvertPunycode();
diff --git a/src/main/wacs.csproj b/src/main/wacs.csproj
index 0782740..e59bd4b 100644
--- a/src/main/wacs.csproj
+++ b/src/main/wacs.csproj
@@ -339,6 +339,12 @@
<Compile Include="Plugins\StorePlugins\CentralSsl\CentralSslArgumentsProvider.cs" />
<Compile Include="Plugins\StorePlugins\CertificateStore\CertificateStoreArguments.cs" />
<Compile Include="Plugins\StorePlugins\CertificateStore\CertificateStoreArgumentsProvider.cs" />
+ <Compile Include="Plugins\TargetPlugins\IISBinding\IISBindingArguments.cs" />
+ <Compile Include="Plugins\TargetPlugins\IISBinding\IISBindingArgumentsProvider.cs" />
+ <Compile Include="Plugins\TargetPlugins\IISSite\IISSiteArguments.cs" />
+ <Compile Include="Plugins\TargetPlugins\IISSite\IISSiteArgumentsProvider.cs" />
+ <Compile Include="Plugins\TargetPlugins\Manual\ManualArguments.cs" />
+ <Compile Include="Plugins\TargetPlugins\Manual\ManualArgumentsProvider.cs" />
<Compile Include="Plugins\ValidationPlugins\Dns\Manual\Manual.cs" />
<Compile Include="Plugins\ValidationPlugins\Dns\Manual\ManualOptions.cs" />
<Compile Include="Plugins\ValidationPlugins\Dns\Manual\ManualOptionsFactory.cs" />