public static SslConfig ParseConfig(JsonElement jsonElement) { var sslConfig = new SslConfig(); foreach (var property in jsonElement.EnumerateObject()) { string propertyName = property.Name.ToLower(); switch (propertyName) { case "certificate": { string cert = property.Value.GetString(); if (string.IsNullOrEmpty(cert)) { continue; } sslConfig.Certificate = Path.IsPathFullyQualified(cert) ? File.ReadAllText(cert, Encoding.UTF8) : cert; break; } case "key": { string key = property.Value.GetString(); if (string.IsNullOrEmpty(key)) { continue; } sslConfig.Key = Path.IsPathFullyQualified(key) ? File.ReadAllText(key, Encoding.UTF8) : key; break; } case "password": sslConfig.Password = property.Value.GetString(); break; } } return(sslConfig); }
public static SiteConfig ParseConfig(JsonElement jsonElement) { var site = new SiteConfig(); foreach (var property in jsonElement.EnumerateObject()) { string propertyName = property.Name.ToLower(); switch (propertyName) { case "hosts": { foreach (var element in property.Value.EnumerateArray()) { string elementValue = element.GetString(); if (string.IsNullOrEmpty(elementValue)) { continue; } site.Hosts.Add(element.GetString()); } break; } case "domains": { foreach (var element in property.Value.EnumerateArray()) { string elementValue = element.GetString(); if (string.IsNullOrEmpty(elementValue)) { continue; } site.Domains.Add(element.GetString()); } break; } case "ssl": { foreach (var element in property.Value.EnumerateArray()) { site.SslConfigs.Add(SslConfig.ParseConfig(element)); } break; } case "no-delay": { site.NoDelay = property.Value.GetBoolean(); break; } case "root": { site.RootDirectory = property.Value.GetString(); break; } case "plugins": { if (property.Value.TryGetProperty("enabled", out var enabledElement) && enabledElement.ValueKind is JsonValueKind.False or JsonValueKind.True) { site.PluginsEnabled = enabledElement.GetBoolean(); } if (property.Value.TryGetProperty("default-permission", out var defaultPermissionElement) && defaultPermissionElement.ValueKind is JsonValueKind.False or JsonValueKind.True) { site.DefaultPluginPermission = defaultPermissionElement.GetBoolean(); } if (property.Value.TryGetProperty("forbidden", out var forbiddenElement)) { foreach (string value in forbiddenElement.EnumerateArray().Select(element => element.GetString()).Where(value => !string.IsNullOrEmpty(value))) { site.ForbiddenPlugins.Add(value); } } if (property.Value.TryGetProperty("allowed", out var allowedElement) && allowedElement.ValueKind == JsonValueKind.Array) { foreach (string value in allowedElement.EnumerateArray().Select(element => element.GetString()).Where(value => !string.IsNullOrEmpty(value))) { site.AllowedPlugins.Add(value); } } break; } default: { if (propertyName.StartsWith("location ")) { string name = property.Name.Remove(0, 9); var locationConfig = new LocationConfig(name, property.Value); site.Locations.Add(locationConfig); } break; } } } if (site.Locations.Count == 0) { site.Locations.Add(new LocationConfig()); } return(site); }