Пример #1
0
        public override async Task <IISSitesOptions> Aquire(IInputService input, RunLevel runLevel)
        {
            var ret   = new IISSitesOptions();
            var sites = _siteHelper.GetSites(true).
                        Where(x => !_arguments.MainArguments.HideHttps || x.Https == false).
                        Where(x => x.Hosts.Any()).
                        ToList();

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }
            input.WritePagedList(
                sites.Select(x =>
                             Choice.Create(x,
                                           $"{x.Name} ({x.Hosts.Count()} binding{(x.Hosts.Count()==1?"":"s")})",
                                           x.Id.ToString(),
                                           color: x.Https ? ConsoleColor.DarkGray : (ConsoleColor?)null)).ToList());

            var sanInput = await input.RequestString("Enter a comma separated list of SiteIds or 'S' for all sites");

            sites = ProcessSiteIds(ret, sites, sanInput);
            if (sites != null)
            {
                var hosts = sites.SelectMany(x => x.Hosts).Distinct().OrderBy(x => x);
                if (await _optionsHelper.AquireAdvancedOptions(input, hosts, runLevel, ret))
                {
                    return(ret);
                }
            }
            return(null);
        }
Пример #2
0
        public override IISSiteOptions Aquire(IArgumentsService arguments, IInputService input, RunLevel runLevel)
        {
            var ret   = new IISSiteOptions();
            var sites = _siteHelper.
                        GetSites(arguments.MainArguments.HideHttps, true).
                        Where(x => x.Hidden == false).
                        Where(x => x.Hosts.Any());

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }
            var chosen = input.ChooseFromList("Choose site",
                                              sites,
                                              x => Choice.Create(x, x.Name),
                                              "Abort");

            if (chosen != null)
            {
                ret.SiteId = chosen.Id;
                if (_optionsHelper.AquireAdvancedOptions(input, chosen.Hosts, runLevel, ret))
                {
                    return(ret);
                }
            }
            return(null);
        }
Пример #3
0
        public override IISSitesOptions Aquire(IArgumentsService arguments, IInputService input, RunLevel runLevel)
        {
            var ret   = new IISSitesOptions();
            var sites = _siteHelper.GetSites(arguments.MainArguments.HideHttps, true).
                        Where(x => x.Hidden == false).
                        Where(x => x.Hosts.Any()).
                        ToList();

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }
            input.WritePagedList(sites.Select(x => Choice.Create(x, $"{x.Name} ({x.Hosts.Count()} bindings)", x.Id.ToString())).ToList());
            var sanInput = input.RequestString("Enter a comma separated list of SiteIds or 'S' for all sites");

            sites = ProcessSiteIds(ret, sites, sanInput);
            if (sites == null)
            {
                return(null);
            }
            var hosts = sites.SelectMany(x => x.Hosts).Distinct().OrderBy(x => x);

            if (_optionsHelper.AquireAdvancedOptions(input, hosts, runLevel, ret))
            {
                return(ret);
            }
            return(ret);
        }
Пример #4
0
        public override IISSitesOptions Aquire(IOptionsService optionsService, IInputService inputService, RunLevel runLevel)
        {
            var ret   = new IISSitesOptions();
            var sites = _helper.GetSites(optionsService.MainArguments.HideHttps, true).Where(x => x.Hidden == false).ToList();

            inputService.WritePagedList(sites.Select(x => Choice.Create(x, $"{x.Name} ({x.Hosts.Count()} bindings)", x.Id.ToString())).ToList());
            var sanInput = inputService.RequestString("Enter a comma separated list of SiteIds or 'S' for all sites").ToLower().Trim();

            sites = ProcessSiteIds(ret, sites, sanInput);
            if (sites == null)
            {
                return(null);
            }
            var hosts = sites.SelectMany(x => x.Hosts).Distinct().OrderBy(x => x);

            inputService.WritePagedList(hosts.Select(x => Choice.Create(x, "")));
            ret.ExcludeBindings = inputService.RequestString("Press enter to include all listed hosts, or type a comma-separated lists of exclusions").ParseCsv();

            if (runLevel.HasFlag(RunLevel.Advanced))
            {
                ret.CommonName = inputService.ChooseFromList(
                    "Select common name",
                    hosts.Except(ret.ExcludeBindings ?? new List <string>()),
                    (x) => new Choice <string>(x),
                    true);
            }
            return(ret);
        }
Пример #5
0
        public async override Task <IISSiteOptions> Aquire(IInputService input, RunLevel runLevel)
        {
            var ret   = new IISSiteOptions();
            var sites = _siteHelper.
                        GetSites(true).
                        Where(x => !_arguments.MainArguments.HideHttps || x.Https == false).
                        Where(x => x.Hosts.Any());

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }

            var chosen = await input.ChooseFromList("Choose site",
                                                    sites,
                                                    x => Choice.Create(x,
                                                                       $"{x.Name} ({x.Hosts.Count()} binding{(x.Hosts.Count() == 1 ? "" : "s")})",
                                                                       x.Id.ToString(),
                                                                       color: x.Https ? ConsoleColor.DarkGray : (ConsoleColor?)null),
                                                    "Abort");

            if (chosen != null)
            {
                ret.SiteId = chosen.Id;
                if (await _optionsHelper.AquireAdvancedOptions(input, chosen.Hosts, runLevel, ret))
                {
                    return(ret);
                }
            }
            return(null);
        }
Пример #6
0
        public override IISSiteOptions Aquire(IOptionsService optionsService, IInputService inputService, RunLevel runLevel)
        {
            var ret    = new IISSiteOptions();
            var chosen = inputService.ChooseFromList("Choose site",
                                                     _helper.GetSites(optionsService.MainArguments.HideHttps, true).Where(x => x.Hidden == false),
                                                     x => new Choice <IISSiteHelper.IISSiteOption>(x)
            {
                Description = x.Name
            },
                                                     true);

            if (chosen != null)
            {
                ret.SiteId = chosen.Id;
                ret.FriendlyNameSuggestion = $"Site-{chosen.Id}";

                // Exclude bindings
                inputService.WritePagedList(chosen.Hosts.Select(x => Choice.Create(x, "")));
                ret.ExcludeBindings = inputService.RequestString("Press enter to include all listed hosts, or type a comma-separated lists of exclusions").ParseCsv();
                if (runLevel.HasFlag(RunLevel.Advanced))
                {
                    ret.CommonName = inputService.ChooseFromList(
                        "Select common name",
                        chosen.Hosts.Except(ret.ExcludeBindings ?? new List <string>()),
                        x => new Choice <string>(x),
                        true);
                }
                return(ret);
            }
            return(null);
        }
        public override IISSiteOptions Aquire(IArgumentsService arguments, IInputService inputService, RunLevel runLevel)
        {
            var ret   = new IISSiteOptions();
            var sites = _helper.
                        GetSites(arguments.MainArguments.HideHttps, true).
                        Where(x => x.Hidden == false).
                        Where(x => x.Hosts.Any());

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }
            var chosen = inputService.ChooseFromList("Choose site",
                                                     sites,
                                                     x => new Choice <IISSiteHelper.IISSiteOption>(x)
            {
                Description = x.Name
            },
                                                     true);

            if (chosen != null)
            {
                ret.SiteId = chosen.Id;

                // Exclude bindings
                inputService.WritePagedList(chosen.Hosts.Select(x => Choice.Create(x, "")));
                ret.ExcludeBindings = inputService.RequestString("Press enter to include all listed hosts, or type a comma-separated lists of exclusions").ParseCsv();
                var remaining = chosen.Hosts.Except(ret.ExcludeBindings ?? new List <string>());
                if (remaining.Count() == 0)
                {
                    _log.Error("No bindings remain");
                    return(null);
                }

                // Set common name
                if (remaining.Count() > 1)
                {
                    ret.CommonName = inputService.ChooseFromList(
                        "Select primary domain (common name)",
                        remaining,
                        x => new Choice <string>(x),
                        true);
                }
                return(ret);
            }
            return(null);
        }
Пример #8
0
        public Target Generate()
        {
            var site = _helper.GetSites(false, false).FirstOrDefault(s => s.Id == _options.SiteId);

            if (site == null)
            {
                _log.Error($"SiteId {_options.SiteId} not found");
                return(null);
            }
            var hosts = site.Hosts;

            if (_options.ExcludeBindings != null)
            {
                hosts = hosts.Except(_options.ExcludeBindings).ToList();
            }
            var cn        = _options.CommonName;
            var cnDefined = !string.IsNullOrWhiteSpace(cn);
            var cnValid   = cnDefined && hosts.Contains(cn);

            if (cnDefined && !cnValid)
            {
                _log.Warning("Specified common name {cn} not valid", cn);
            }
            return(new Target()
            {
                CommonName = cnValid ? cn : hosts.FirstOrDefault(),
                Parts = new[] {
                    new TargetPart()
                    {
                        Identifiers = hosts,
                        SiteId = site.Id
                    }
                }
            });
        }
        public override IISSitesOptions Aquire(IArgumentsService arguments, IInputService inputService, RunLevel runLevel)
        {
            var ret   = new IISSitesOptions();
            var sites = _helper.GetSites(arguments.MainArguments.HideHttps, true).
                        Where(x => x.Hidden == false).
                        Where(x => x.Hosts.Any()).
                        ToList();

            if (!sites.Any())
            {
                _log.Error($"No sites with named bindings have been configured in IIS. Add one or choose '{ManualOptions.DescriptionText}'.");
                return(null);
            }
            inputService.WritePagedList(sites.Select(x => Choice.Create(x, $"{x.Name} ({x.Hosts.Count()} bindings)", x.Id.ToString())).ToList());
            var sanInput = inputService.RequestString("Enter a comma separated list of SiteIds or 'S' for all sites").ToLower().Trim();

            sites = ProcessSiteIds(ret, sites, sanInput);
            if (sites == null)
            {
                return(null);
            }
            var hosts = sites.SelectMany(x => x.Hosts).Distinct().OrderBy(x => x);

            inputService.WritePagedList(hosts.Select(x => Choice.Create(x, "")));
            ret.ExcludeBindings = inputService.RequestString("Press enter to include all listed hosts, or type a comma-separated lists of exclusions").ParseCsv();
            var remaining = hosts.Except(ret.ExcludeBindings ?? new List <string>());

            if (remaining.Count() == 0)
            {
                _log.Error("No bindings remain after excluding");
                return(null);
            }

            // Set common name
            if (remaining.Count() > 1)
            {
                ret.CommonName = inputService.ChooseFromList(
                    "Select primary domain (common name)",
                    remaining,
                    x => new Choice <string>(x),
                    true);
            }
            return(ret);
        }
Пример #10
0
        public Task <Target> Generate()
        {
            var sites    = _helper.GetSites(false);
            var filtered = new List <IISSiteHelper.IISSiteOption>();

            if (_options.All == true)
            {
                filtered = sites;
            }
            else
            {
                foreach (var id in _options.SiteIds)
                {
                    var site = sites.FirstOrDefault(s => s.Id == id);
                    if (site != null)
                    {
                        filtered.Add(site);
                    }
                    else
                    {
                        _log.Warning("SiteId {Id} not found", id);
                    }
                }
            }
            var allHosts = filtered.SelectMany(x => x.Hosts);
            var exclude  = _options.ExcludeBindings ?? new List <string>();

            allHosts = allHosts.Except(exclude).ToList();
            var cn        = _options.CommonName;
            var cnDefined = !string.IsNullOrWhiteSpace(cn);
            var cnValid   = cnDefined && allHosts.Contains(cn);

            if (cnDefined && !cnValid)
            {
                _log.Warning("Specified common name {cn} not valid", cn);
            }
            return(Task.FromResult(new Target()
            {
                FriendlyName = $"[{nameof(IISSites)}] {(_options.All == true ? "All" : string.Join(",", _options.SiteIds))}",
                CommonName = cnValid ? cn : allHosts.FirstOrDefault(),
                Parts = filtered.Select(site => new TargetPart
                {
                    Identifiers = site.Hosts.Except(exclude).ToList(),
                    SiteId = site.Id
                })
            }));
        }