public void UpdateConfig([FromBody] Models.DTO.ServerConfig config) { var originalPort = serverConfig.Port; var originalAllowExternal = serverConfig.AllowExternal; int port = config.port; bool external = config.external; string saveDir = config.blackholedir; bool updateDisabled = config.updatedisabled; bool preRelease = config.prerelease; bool logging = config.logging; string basePathOverride = config.basepathoverride; if (basePathOverride != null) { basePathOverride = basePathOverride.TrimEnd('/'); if (!string.IsNullOrWhiteSpace(basePathOverride) && !basePathOverride.StartsWith("/")) { throw new Exception("The Base Path Override must start with a /"); } } string omdbApiKey = config.omdbkey; serverConfig.UpdateDisabled = updateDisabled; serverConfig.UpdatePrerelease = preRelease; serverConfig.BasePathOverride = basePathOverride; serverConfig.RuntimeSettings.BasePath = Engine.Server.BasePath(); configService.SaveConfig(serverConfig); Engine.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info); serverConfig.RuntimeSettings.TracingEnabled = logging; if (omdbApiKey != serverConfig.OmdbApiKey) { serverConfig.OmdbApiKey = omdbApiKey; configService.SaveConfig(serverConfig); // HACK indexerService.InitAggregateIndexer(); } if (config.proxy_type != serverConfig.ProxyType || config.proxy_url != serverConfig.ProxyUrl || config.proxy_port != serverConfig.ProxyPort || config.proxy_username != serverConfig.ProxyUsername || config.proxy_password != serverConfig.ProxyPassword) { if (config.proxy_port < 1 || config.proxy_port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } serverConfig.ProxyUrl = config.proxy_url; serverConfig.ProxyType = config.proxy_type; serverConfig.ProxyPort = config.proxy_port; serverConfig.ProxyUsername = config.proxy_username; serverConfig.ProxyPassword = config.proxy_password; configService.SaveConfig(serverConfig); } if (port != serverConfig.Port || external != serverConfig.AllowExternal) { if (ServerUtil.RestrictedPorts.Contains(port)) { throw new Exception("The port you have selected is restricted, try a different one."); } if (port < 1 || port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } // Save port to the config so it can be picked up by the if needed when running as admin below. serverConfig.AllowExternal = external; serverConfig.Port = port; configService.SaveConfig(serverConfig); // On Windows change the url reservations if (System.Environment.OSVersion.Platform != PlatformID.Unix) { if (!ServerUtil.IsUserAdministrator()) { try { processService.StartProcessAndLog(System.Windows.Forms.Application.ExecutablePath, "--ReserveUrls", true); } catch { serverConfig.Port = originalPort; serverConfig.AllowExternal = originalAllowExternal; configService.SaveConfig(serverConfig); throw new Exception("Failed to acquire admin permissions to reserve the new port."); } } else { serverService.ReserveUrls(true); } } (new Thread(() => { Thread.Sleep(500); serverService.Stop(); Engine.BuildContainer(serverConfig.RuntimeSettings, new WebApi2Module()); Engine.Server.Initalize(); Engine.Server.Start(); })).Start(); } if (saveDir != serverConfig.BlackholeDir) { if (!string.IsNullOrEmpty(saveDir)) { if (!Directory.Exists(saveDir)) { throw new Exception("Blackhole directory does not exist"); } } serverConfig.BlackholeDir = saveDir; configService.SaveConfig(serverConfig); } serverConfig.ConfigChanged(); }
public IActionResult UpdateConfig([FromBody] Common.Models.DTO.ServerConfig config) { var webHostRestartNeeded = false; var originalPort = serverConfig.Port; var originalAllowExternal = serverConfig.AllowExternal; var port = config.port; var external = config.external; var saveDir = config.blackholedir; var updateDisabled = config.updatedisabled; var preRelease = config.prerelease; var logging = config.logging; var basePathOverride = config.basepathoverride; if (basePathOverride != null) { basePathOverride = basePathOverride.TrimEnd('/'); if (!string.IsNullOrWhiteSpace(basePathOverride) && !basePathOverride.StartsWith("/")) { throw new Exception("The Base Path Override must start with a /"); } } var omdbApiKey = config.omdbkey; var omdbApiUrl = config.omdburl; if (config.basepathoverride != serverConfig.BasePathOverride) { webHostRestartNeeded = true; } serverConfig.UpdateDisabled = updateDisabled; serverConfig.UpdatePrerelease = preRelease; serverConfig.BasePathOverride = basePathOverride; serverConfig.RuntimeSettings.BasePath = serverService.BasePath(); configService.SaveConfig(serverConfig); Helper.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info); serverConfig.RuntimeSettings.TracingEnabled = logging; if (omdbApiKey != serverConfig.OmdbApiKey || omdbApiUrl != serverConfig.OmdbApiUrl) { serverConfig.OmdbApiKey = omdbApiKey; serverConfig.OmdbApiUrl = omdbApiUrl.TrimEnd('/'); configService.SaveConfig(serverConfig); // HACK indexerService.InitAggregateIndexer(); } if (config.proxy_type != serverConfig.ProxyType || config.proxy_url != serverConfig.ProxyUrl || config.proxy_port != serverConfig.ProxyPort || config.proxy_username != serverConfig.ProxyUsername || config.proxy_password != serverConfig.ProxyPassword) { if (config.proxy_port < 1 || config.proxy_port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } serverConfig.ProxyUrl = config.proxy_url; serverConfig.ProxyType = config.proxy_type; serverConfig.ProxyPort = config.proxy_port; serverConfig.ProxyUsername = config.proxy_username; serverConfig.ProxyPassword = config.proxy_password; configService.SaveConfig(serverConfig); webHostRestartNeeded = true; } if (port != serverConfig.Port || external != serverConfig.AllowExternal) { if (ServerUtil.RestrictedPorts.Contains(port)) { throw new Exception("The port you have selected is restricted, try a different one."); } if (port < 1 || port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } // Save port to the config so it can be picked up by the if needed when running as admin below. serverConfig.AllowExternal = external; serverConfig.Port = port; configService.SaveConfig(serverConfig); // On Windows change the url reservations if (System.Environment.OSVersion.Platform != PlatformID.Unix) { if (!ServerUtil.IsUserAdministrator()) { try { var consoleExePath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Replace(".dll", ".exe"); processService.StartProcessAndLog(consoleExePath, "--ReserveUrls", true); } catch { serverConfig.Port = originalPort; serverConfig.AllowExternal = originalAllowExternal; configService.SaveConfig(serverConfig); throw new Exception("Failed to acquire admin permissions to reserve the new port."); } } else { serverService.ReserveUrls(true); } } webHostRestartNeeded = true; } if (saveDir != serverConfig.BlackholeDir) { if (!string.IsNullOrEmpty(saveDir)) { if (!Directory.Exists(saveDir)) { throw new Exception("Blackhole directory does not exist"); } } serverConfig.BlackholeDir = saveDir; configService.SaveConfig(serverConfig); } if (webHostRestartNeeded) { Thread.Sleep(500); logger.Info("Restarting webhost due to configuration change"); Helper.RestartWebHost(); } serverConfig.ConfigChanged(); return(Json(serverConfig)); }
public IActionResult UpdateConfig([FromBody] Common.Models.DTO.ServerConfig config) { var webHostRestartNeeded = false; var originalPort = serverConfig.Port; var originalAllowExternal = serverConfig.AllowExternal; var port = config.port; var external = config.external; var saveDir = config.blackholedir; var updateDisabled = config.updatedisabled; var preRelease = config.prerelease; var enhancedLogging = config.logging; var basePathOverride = config.basepathoverride; if (basePathOverride != null) { basePathOverride = basePathOverride.TrimEnd('/'); if (!string.IsNullOrWhiteSpace(basePathOverride) && !basePathOverride.StartsWith("/")) { throw new Exception("The Base Path Override must start with a /"); } } var baseUrlOverride = config.baseurloverride; if (baseUrlOverride != serverConfig.BaseUrlOverride) { baseUrlOverride = baseUrlOverride.TrimEnd('/'); if (string.IsNullOrWhiteSpace(baseUrlOverride)) { baseUrlOverride = ""; } else if (!Uri.TryCreate(baseUrlOverride, UriKind.Absolute, out var uri) || !(uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) { throw new Exception("Base URL Override is invalid. Example: http://jackett:9117"); } serverConfig.BaseUrlOverride = baseUrlOverride; configService.SaveConfig(serverConfig); } var cacheEnabled = config.cache_enabled; var cacheTtl = config.cache_ttl; var cacheMaxResultsPerIndexer = config.cache_max_results_per_indexer; var omdbApiKey = config.omdbkey; var omdbApiUrl = config.omdburl; if (config.basepathoverride != serverConfig.BasePathOverride) { webHostRestartNeeded = true; } serverConfig.UpdateDisabled = updateDisabled; serverConfig.UpdatePrerelease = preRelease; serverConfig.BasePathOverride = basePathOverride; serverConfig.BaseUrlOverride = baseUrlOverride; serverConfig.CacheEnabled = cacheEnabled; serverConfig.CacheTtl = cacheTtl; serverConfig.CacheMaxResultsPerIndexer = cacheMaxResultsPerIndexer; serverConfig.RuntimeSettings.BasePath = serverService.BasePath(); configService.SaveConfig(serverConfig); if (config.flaresolverrurl != serverConfig.FlareSolverrUrl || config.flaresolverr_maxtimeout != serverConfig.FlareSolverrMaxTimeout) { if (string.IsNullOrWhiteSpace(config.flaresolverrurl)) { config.flaresolverrurl = ""; } else if (!Uri.TryCreate(config.flaresolverrurl, UriKind.Absolute, out var uri) || !(uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) { throw new Exception("FlareSolverr API URL is invalid. Example: http://127.0.0.1:8191"); } if (config.flaresolverr_maxtimeout < 5000) { throw new Exception("FlareSolverr Max Timeout must be greater than 5000 ms."); } serverConfig.FlareSolverrUrl = config.flaresolverrurl; serverConfig.FlareSolverrMaxTimeout = config.flaresolverr_maxtimeout; configService.SaveConfig(serverConfig); webHostRestartNeeded = true; } if (omdbApiKey != serverConfig.OmdbApiKey || omdbApiUrl != serverConfig.OmdbApiUrl) { serverConfig.OmdbApiKey = omdbApiKey; serverConfig.OmdbApiUrl = omdbApiUrl.TrimEnd('/'); configService.SaveConfig(serverConfig); // HACK indexerService.InitMetaIndexers(); } if (config.proxy_type != serverConfig.ProxyType || config.proxy_url != serverConfig.ProxyUrl || config.proxy_port != serverConfig.ProxyPort || config.proxy_username != serverConfig.ProxyUsername || config.proxy_password != serverConfig.ProxyPassword) { if (config.proxy_port < 1 || config.proxy_port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } serverConfig.ProxyType = string.IsNullOrWhiteSpace(config.proxy_url) ? ProxyType.Disabled : config.proxy_type; serverConfig.ProxyUrl = config.proxy_url; serverConfig.ProxyPort = config.proxy_port; serverConfig.ProxyUsername = config.proxy_username; serverConfig.ProxyPassword = config.proxy_password; configService.SaveConfig(serverConfig); webHostRestartNeeded = true; // Remove all results from cache so we can test the new proxy cacheService.CleanCache(); } if (port != serverConfig.Port || external != serverConfig.AllowExternal) { if (ServerUtil.RestrictedPorts.Contains(port)) { throw new Exception("The port you have selected is restricted, try a different one."); } if (port < 1 || port > 65535) { throw new Exception("The port you have selected is invalid, it must be below 65535."); } // Save port to the config so it can be picked up by the if needed when running as admin below. serverConfig.AllowExternal = external; serverConfig.Port = port; configService.SaveConfig(serverConfig); // On Windows change the url reservations if (Environment.OSVersion.Platform != PlatformID.Unix) { if (!ServerUtil.IsUserAdministrator()) { try { var consoleExePath = EnvironmentUtil.JackettExecutablePath().Replace(".dll", ".exe"); processService.StartProcessAndLog(consoleExePath, "--ReserveUrls", true); } catch { serverConfig.Port = originalPort; serverConfig.AllowExternal = originalAllowExternal; configService.SaveConfig(serverConfig); throw new Exception("Failed to acquire admin permissions to reserve the new port."); } } else { serverService.ReserveUrls(); } } webHostRestartNeeded = true; } if (saveDir != serverConfig.BlackholeDir) { if (!string.IsNullOrEmpty(saveDir)) { if (!Directory.Exists(saveDir)) { throw new Exception("Blackhole directory does not exist"); } } serverConfig.BlackholeDir = saveDir; configService.SaveConfig(serverConfig); } if (webHostRestartNeeded) { // we have to restore log level when the server restarts because we are not saving the state in the // configuration. when the server restarts the UI is inconsistent with the active log level // https://github.com/Jackett/Jackett/issues/8315 SetEnhancedLogLevel(false); Thread.Sleep(500); logger.Info("Restarting webhost due to configuration change"); Helper.RestartWebHost(); } else { SetEnhancedLogLevel(enhancedLogging); } serverConfig.ConfigChanged(); return(Json(serverConfig)); }