public async Task LoadAsync()
{
SortedDictionary<string, List<string>> variables = null;
if (Credentials == null)
{
var lines = File.ReadAllLines("jws.conf");
variables = new SortedDictionary<string, List<string>>();
foreach (var line in lines)
{
var index = line.IndexOf('#');
var content = index == -1 ? line : line.Substring(0, index);
var parts = content.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 2)
{
continue;
}
var key = parts[0].Trim().ToLowerInvariant();
var value = parts[1].Trim();
if (variables.ContainsKey(key))
{
variables[key].Add(value);
}
else
{
variables.Add(key, new List<string> { value });
}
}
}
else
{
using (var client = GetClient())
{
HttpResponseMessage response = await client.GetAsync("api/server/");
if (response.IsSuccessStatusCode)
{
variables = (SortedDictionary<string, List<string>>)await response.Content.ReadAsAsync(typeof(SortedDictionary<string, List<string>>));
}
}
}
var newPool = new ApplicationPool(null, ApplicationPools);
newPool.Name = "DefaultAppPool";
newPool.ManagedRuntimeVersion = variables.Load(new List<string> { "v2.0" }, "runtime")[0];
newPool.ProcessModel.MaxProcesses = long.Parse(variables.Load(new List<string> { "1" }, "httpd.processes")[0]);
newPool.ProcessModel.UserName = variables.Load(new List<string> { string.Empty }, "httpd.user")[0];
newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
ApplicationPools.Add(newPool);
SiteFolder = variables.Load(new List<string> { "siteconf" }, "siteconfigdir")[0];
LogFolder = variables.Load(new List<string> { "log" }, "sitelogdir")[0];
_certificateCache = variables.Load(new List<string> { string.Empty }, "certificatefile")[0];
_keyCache = variables.Load(new List<string> { string.Empty }, "certificatekeyfile")[0];
IEnumerable<string> sites = null;
if (Credentials == null)
{
sites = Directory.GetFiles(SiteFolder).Where(name => !name.Contains("_"));
}
else
{
using (var client = GetClient())
{
HttpResponseMessage response = await client.GetAsync("api/site/");
if (response.IsSuccessStatusCode)
{
sites = (List<string>)await response.Content.ReadAsAsync(typeof(List<string>));
}
}
}
long count = 0;
Debug.Assert(sites != null, "sites != null");
foreach (var file in sites)
{
var site = Credentials == null
? new Site(Sites) { Name = Path.GetFileName(file), Id = count }
: new Site(Sites) { Name = file, Id = count };
Sites.Add(site);
count = await LoadAsync(site, count, file, SiteFolder);
}
Extra = variables;
}