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 Models.DTO.ServerConfig Config() { var dto = new Models.DTO.ServerConfig(serverService.notices, serverConfig, configService.GetVersion()); return(dto); }