summaryrefslogtreecommitdiffstats
path: root/src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs
diff options
context:
space:
mode:
authorWouterTinus <wouter.tinus@gmail.com>2019-01-10 09:07:19 +0100
committerWouterTinus <wouter.tinus@gmail.com>2019-01-10 09:07:19 +0100
commit43c1d305e335e7af46ca63e849c9da514bb9302a (patch)
tree23280b39f20511005606460913fa9e8cec75bacf /src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs
parent45003b931b04e21f7a1c9a592e9d87449bf7887e (diff)
downloadletsencrypt-win-simple-43c1d305e335e7af46ca63e849c9da514bb9302a.zip
letsencrypt-win-simple-43c1d305e335e7af46ca63e849c9da514bb9302a.tar.gz
letsencrypt-win-simple-43c1d305e335e7af46ca63e849c9da514bb9302a.tar.bz2
Move plugins in preparation for argument splitting
Diffstat (limited to 'src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs')
-rw-r--r--src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs b/src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs
new file mode 100644
index 0000000..b16f705
--- /dev/null
+++ b/src/main/Plugins/ValidationPlugins/Http/FileSystem/FileSystemOptionsFactory.cs
@@ -0,0 +1,61 @@
+using Microsoft.Web.Administration;
+using PKISharp.WACS.Clients.IIS;
+using PKISharp.WACS.DomainObjects;
+using PKISharp.WACS.Extensions;
+using PKISharp.WACS.Services;
+
+namespace PKISharp.WACS.Plugins.ValidationPlugins.Http
+{
+ /// <summary>
+ /// Classic FileSystem validation
+ /// </summary>
+ internal class FileSystemOptionsFactory : HttpValidationOptionsFactory<FileSystem, FileSystemOptions>
+ {
+ private IIISClient _iisClient;
+
+ public FileSystemOptionsFactory(IIISClient iisClient, ILogService log) : base(log)
+ {
+ _iisClient = iisClient;
+ }
+ public override bool PathIsValid(string path) => path.ValidPath(_log);
+ public override bool AllowEmtpy(Target target) => target.IIS;
+
+ public override FileSystemOptions Default(Target target, IOptionsService optionsService)
+ {
+ var ret = new FileSystemOptions(BaseDefault(target, optionsService));
+ if (target.IIS == true && _iisClient.HasWebSites)
+ {
+ var validationSiteId = optionsService.TryGetLong(nameof(optionsService.MainArguments.ValidationSiteId), optionsService.MainArguments.ValidationSiteId);
+ if (validationSiteId != null)
+ {
+ var site = _iisClient.GetWebSite(validationSiteId.Value); // Throws exception when not found
+ ret.Path = site.Path;
+ ret.SiteId = validationSiteId;
+ }
+ }
+ return ret;
+ }
+
+ public override FileSystemOptions Aquire(Target target, IOptionsService optionsService, IInputService inputService, RunLevel runLevel)
+ {
+ // Choose alternative site for validation
+ var ret = new FileSystemOptions(BaseAquire(target, optionsService, inputService, runLevel));
+ if (target.IIS && _iisClient.HasWebSites && string.IsNullOrEmpty(ret.Path))
+ {
+ if (inputService.PromptYesNo("Use different site for validation?"))
+ {
+ var site = inputService.ChooseFromList("Validation site, must receive requests for all hosts on port 80",
+ _iisClient.WebSites,
+ x => new Choice<IIISSite>(x) { Command = x.Id.ToString(), Description = x.Name }, true);
+ if (site != null)
+ {
+ ret.Path = site.Path;
+ ret.SiteId = site.Id;
+ }
+ }
+ }
+ return ret;
+ }
+ }
+
+}