summaryrefslogtreecommitdiffstats
path: root/src/main.lib/Plugins/TargetPlugins/Manual/ManualOptionsFactory.cs
blob: 363f839ce6a109660e100d354bd443dd0e062f29 (plain)
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
using PKISharp.WACS.Extensions;
using PKISharp.WACS.Plugins.Base.Factories;
using PKISharp.WACS.Services;
using System.Linq;
using System.Threading.Tasks;

namespace PKISharp.WACS.Plugins.TargetPlugins
{
    internal class ManualOptionsFactory : TargetPluginOptionsFactory<Manual, ManualOptions>
    {
        private readonly IArgumentsService _arguments;
        public ManualOptionsFactory(IArgumentsService arguments) => _arguments = arguments;
        public override int Order => 5;
        public override async Task<ManualOptions?> Aquire(IInputService inputService, RunLevel runLevel)
        {
            var input = await inputService.RequestString("Enter comma-separated list of host names, starting with the common name");
            if (string.IsNullOrEmpty(input))
            {
                return null;
            }
            else
            {
                return Create(input);
            }
        }

        public override async Task<ManualOptions?> Default()
        {
            var args = _arguments.GetArguments<ManualArguments>();
            var input = _arguments.TryGetRequiredArgument(nameof(args.Host), args.Host);
            var ret = Create(input);
            if (ret != null)
            {
                var commonName = args.CommonName;
                if (!string.IsNullOrWhiteSpace(commonName))
                {
                    commonName = commonName.ToLower().Trim().ConvertPunycode();
                    ret.CommonName = commonName;
                    if (!ret.AlternativeNames.Contains(commonName))
                    {
                        ret.AlternativeNames.Insert(0, commonName);
                    }
                }
            }
            return ret;
        }

        private ManualOptions? Create(string? input)
        {
            var sanList = input.ParseCsv().Select(x => x.ConvertPunycode());
            if (sanList != null)
            {
                return new ManualOptions()
                {
                    CommonName = sanList.First(),
                    AlternativeNames = sanList.ToList()
                };
            }
            else
            {
                return null;
            }
        }
    }
}