public PluginManager(HtcServer htcServer, ILogger logger) { _logger = logger; _pluginLoader = new PluginLoader <IPlugin>(); _plugins = new Dictionary <string, IPlugin>(); _pluginServerContext = new PluginServerContext(HtcIOUtils.ReplacePathTags(htcServer.Config.GetValue("PluginsPath", StringComparison.CurrentCultureIgnoreCase)?.Value <string>()), this);; }
public async Task Start() { try { if (Running) { return; } Running = true; Logger.LogInfo("Loading HtcServer", null); Logger.LogInfo("Loading Modules", null); _moduleManager.LoadModules(HtcIOUtils.ReplacePathTags(Config.GetValue("ModulesPath", StringComparison.CurrentCultureIgnoreCase)?.Value <string>())); await _moduleManager.CallLoad(); Logger.LogInfo("Loading Engines", null); var enginesConfigs = (JObject)Config.GetValue("Engines", StringComparison.CurrentCultureIgnoreCase); foreach (string engineName in EngineManager.GetEnginesNames()) { if (!enginesConfigs.ContainsKey(engineName)) { continue; } var engineConfig = (JObject)enginesConfigs.GetValue(engineName, StringComparison.CurrentCultureIgnoreCase); var engine = EngineManager.InstantiateEngine(engineName); EngineManager.AddEngine(engine); Logger.LogInfo($"Loading Engine {engineName}", null); await EngineManager.Load(engine, engineConfig); } Logger.LogInfo("Loading Plugins", null); _pluginManager.LoadPlugins(HtcIOUtils.ReplacePathTags(Config.GetValue("PluginsPath", StringComparison.CurrentCultureIgnoreCase)?.Value <string>())); await _pluginManager.CallLoad(); Logger.LogInfo("Starting HtcServer", null); Logger.LogInfo("Enabling Modules", null); await _moduleManager.CallEnable(); Logger.LogInfo("Starting Engines", null); await EngineManager.Start(); Logger.LogInfo("Enabling Plugins", null); await _pluginManager.CallEnable(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); throw ex; } }
public Task Load(PluginServerContext pluginServerContext, ILogger logger) { Logger = logger; string path = Path.Combine(pluginServerContext.PluginsPath, @"PhpConfig.json"); if (!File.Exists(path)) { using var fileStream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); using var streamWriter = new StreamWriter(fileStream); streamWriter.Write(JsonConvert.SerializeObject(new { PhpCgiExec = "%WorkingPath%\\plugins\\php\\php-cgi.exe", PhpPath = "%WorkingPath%\\plugins\\php", Timeout = 10000 }, Formatting.Indented)); } var config = JsonUtils.GetJsonFile(path); PhpCgiExec = HtcIOUtils.ReplacePathTags(config.GetValue("PhpCgiExec", StringComparison.CurrentCultureIgnoreCase).ToObject <string>()); PhpPath = HtcIOUtils.ReplacePathTags(config.GetValue("PhpPath", StringComparison.CurrentCultureIgnoreCase).ToObject <string>()); Timeout = config.GetValue("Timeout", StringComparison.CurrentCultureIgnoreCase).ToObject <int>(); return(Task.CompletedTask); }
private void Configure(JObject config) { ServerConfigs = new List <HttpServerConfig>(); DomainDictionary = new Dictionary <string, HttpServerConfig>(); var servers = config.GetValue("Servers", StringComparison.CurrentCultureIgnoreCase)?.Value <JArray>(); if (servers == null) { return; } foreach (var jToken in servers) { var server = (JObject)jToken; List <string> hosts = GetValues <string>(server, "Hosts"); List <string> domains = GetValues <string>(server, "Domains"); string root = HtcIOUtils.ReplacePathTags(GetValue <string>(server, "Root")); if (!Directory.Exists(root)) { Directory.CreateDirectory(root); } var useSsl = GetValue <bool>(server, "SSL"); string certificate = null; string password = null; if (useSsl) { certificate = HtcIOUtils.ReplacePathTags(GetValue <string>(server, "Certificate")); password = GetValue <string>(server, "Password"); } var locationManager = ContainsKey(server, "Locations") ? new HttpLocationManager(GetValue <JToken>(server, "Default"), GetValue <JObject>(server, "Locations")) : new HttpLocationManager(GetValue <JToken>(server, "Default"), null); var errorMessageManager = new ErrorMessageManager(); if (ContainsKey(server, "ErrorPages")) { foreach ((string key, var value) in GetValue <JObject>(server, "ErrorPages")) { if (int.TryParse(key, out int pageStatusCode)) { errorMessageManager.RegisterOverridePage(new FilePageMessage(value.Value <string>(), pageStatusCode)); } } } var serverConfig = new HttpServerConfig(hosts, domains, root, useSsl, certificate, password, locationManager, errorMessageManager); ServerConfigs.Add(serverConfig); if (domains.Contains("*")) { // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator //foreach (string host in hosts) { string key = useSsl ? $"1*" : $"0*"; if (DomainDictionary.ContainsKey(key)) { continue; } DomainDictionary.Add(key, serverConfig); //} } else { // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (string domain in domains) { // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator //foreach (string host in hosts) { string key = useSsl ? $"1{domain}" : $"0{domain}"; if (DomainDictionary.ContainsKey(key)) { continue; } DomainDictionary.Add(key, serverConfig); //} } } } }