public static IAggregatorConfiguration ReadConfiguration(Microsoft.Extensions.Configuration.IConfiguration config)
        {
            var ac = new Model.AggregatorConfiguration();

            Enum.TryParse(config["Aggregator_VstsTokenType"], out DevOpsTokenType vtt);
            ac.DevOpsTokenType = vtt;
            ac.DevOpsToken     = config["Aggregator_VstsToken"];
            ac.SaveMode        = Enum.TryParse(config["Aggregator_SaveMode"], out SaveMode sm)
                ? sm
                : SaveMode.Default;
            ac.DryRun = false;
            return(ac);
        }
        public static async Task <IAggregatorConfiguration> ReadConfiguration(Microsoft.Azure.Management.AppService.Fluent.IWebApp webApp)
        {
            (string ruleName, string key) SplitRuleNameKey(string input)
            {
                int idx = input.LastIndexOf('.');

                return(input.Substring(0, idx), input.Substring(idx + 1));
            }

            var settings = await webApp.GetAppSettingsAsync();

            var ac = new Model.AggregatorConfiguration();

            foreach (var ruleSetting in settings.Where(kvp => kvp.Key.StartsWith(RULE_SETTINGS_PREFIX)).Select(kvp => new { ruleNameKey = kvp.Key.Substring(RULE_SETTINGS_PREFIX.Length), value = kvp.Value.Value }))
            {
                var(ruleName, key) = SplitRuleNameKey(ruleSetting.ruleNameKey);

                var ruleConfig = ac.GetRuleConfiguration(ruleName);
                if (string.Equals("Disabled", key, StringComparison.OrdinalIgnoreCase))
                {
                    ruleConfig.IsDisabled = Boolean.TryParse(ruleSetting.value, out bool result) && result;
                }

                if (string.Equals("Impersonate", key, StringComparison.OrdinalIgnoreCase))
                {
                    ruleConfig.Impersonate = string.Equals("onBehalfOfInitiator", ruleSetting.value, StringComparison.OrdinalIgnoreCase);
                }
            }

            Enum.TryParse(settings.GetValueOrDefault("Aggregator_VstsTokenType")?.Value, out DevOpsTokenType vtt);
            ac.DevOpsTokenType = vtt;
            ac.DevOpsToken     = settings.GetValueOrDefault("Aggregator_VstsToken")?.Value;
            ac.SaveMode        = Enum.TryParse(settings.GetValueOrDefault("Aggregator_SaveMode")?.Value, out SaveMode sm)
                ? sm
                : SaveMode.Default;
            ac.DryRun = false;
            return(ac);
        }