1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
using PKISharp.WACS.Clients.IIS;
using PKISharp.WACS.DomainObjects;
using PKISharp.WACS.Extensions;
using PKISharp.WACS.Services;
using System.Threading.Tasks;
namespace PKISharp.WACS.Plugins.ValidationPlugins.Http
{
/// <summary>
/// Classic FileSystem validation
/// </summary>
internal class FileSystemOptionsFactory : HttpValidationOptionsFactory<FileSystem, FileSystemOptions>
{
private readonly IIISClient _iisClient;
private readonly ILogService _log;
public FileSystemOptionsFactory(
IIISClient iisClient, ILogService log,
IArgumentsService arguments) : base(arguments)
{
_log = log;
_iisClient = iisClient;
}
public override bool PathIsValid(string path) => path.ValidPath(_log);
public override bool AllowEmtpy(Target target) => target.IIS;
public override async Task<FileSystemOptions?> Default(Target target)
{
var args = _arguments.GetArguments<FileSystemArguments>();
var ret = new FileSystemOptions(BaseDefault(target));
if (string.IsNullOrEmpty(ret.Path))
{
if (target.IIS && _iisClient.HasWebSites)
{
if (args?.ValidationSiteId != null)
{
// Throws exception when not found
_iisClient.GetWebSite(args.ValidationSiteId.Value);
ret.SiteId = args.ValidationSiteId.Value;
}
}
}
return ret;
}
public override async Task<FileSystemOptions?> Aquire(Target target, IInputService inputService, RunLevel runLevel)
{
// Choose alternative site for validation
var ret = new FileSystemOptions(await BaseAquire(target, inputService));
if (target.IIS && _iisClient.HasWebSites && string.IsNullOrEmpty(ret.Path))
{
if (await inputService.PromptYesNo("Use different site for validation?", false))
{
var site = await inputService.ChooseOptional("Validation site, must receive requests for all hosts on port 80",
_iisClient.WebSites,
x => Choice.Create<IIISSite?>(x, x.Name, x.Id.ToString()),
"Automatic (target site)");
if (site != null)
{
ret.Path = site.Path;
ret.SiteId = site.Id;
}
}
}
return ret;
}
}
}
|