Exemple #1
0
 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);;
 }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
                        //}
                    }
                }
            }
        }