From 608675f96e12cb3de13ab451f5b997783db1a057 Mon Sep 17 00:00:00 2001 From: database64128 Date: Mon, 12 Oct 2020 00:18:58 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=99=20Allow=20configuration=20of=20User-A?= =?UTF-8?q?gent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - For OnlineConfigResolver and GeositeUpdater --- shadowsocks-csharp/Controller/Service/GeositeUpdater.cs | 2 ++ .../Controller/Service/OnlineConfigResolver.cs | 7 +++---- shadowsocks-csharp/Controller/ShadowsocksController.cs | 2 +- shadowsocks-csharp/Model/Configuration.cs | 8 ++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/GeositeUpdater.cs b/shadowsocks-csharp/Controller/Service/GeositeUpdater.cs index f076df96..e4489f60 100644 --- a/shadowsocks-csharp/Controller/Service/GeositeUpdater.cs +++ b/shadowsocks-csharp/Controller/Service/GeositeUpdater.cs @@ -102,6 +102,8 @@ namespace Shadowsocks.Controller // because we can't change proxy on existing socketsHttpHandler instance httpClientHandler = new HttpClientHandler(); httpClient = new HttpClient(httpClientHandler); + if (!string.IsNullOrWhiteSpace(config.userAgentString)) + httpClient.DefaultRequestHeaders.Add("User-Agent", config.userAgentString); if (config.enabled) { httpClientHandler.Proxy = new WebProxy( diff --git a/shadowsocks-csharp/Controller/Service/OnlineConfigResolver.cs b/shadowsocks-csharp/Controller/Service/OnlineConfigResolver.cs index b2a2416f..457e2ab7 100644 --- a/shadowsocks-csharp/Controller/Service/OnlineConfigResolver.cs +++ b/shadowsocks-csharp/Controller/Service/OnlineConfigResolver.cs @@ -11,7 +11,7 @@ namespace Shadowsocks.Controller.Service { public class OnlineConfigResolver { - public static async Task> GetOnline(string url, IWebProxy proxy = null) + public static async Task> GetOnline(string url, string userAgentString, IWebProxy proxy = null) { var httpClientHandler = new HttpClientHandler() { @@ -21,9 +21,8 @@ namespace Shadowsocks.Controller.Service { Timeout = TimeSpan.FromSeconds(15) }; - - string userAgent = "ShadowsocksWindows/" + UpdateChecker.Version; - httpClient.DefaultRequestHeaders.Add("User-Agent", userAgent); + if (!string.IsNullOrWhiteSpace(userAgentString)) + httpClient.DefaultRequestHeaders.Add("User-Agent", userAgentString); string server_json = await httpClient.GetStringAsync(url); diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index 935bf8ea..590485e0 100644 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -691,7 +691,7 @@ namespace Shadowsocks.Controller public async Task UpdateOnlineConfigInternal(string url) { - var onlineServer = await OnlineConfigResolver.GetOnline(url, _config.WebProxy); + var onlineServer = await OnlineConfigResolver.GetOnline(url, _config.userAgentString, _config.WebProxy); _config.configs = Configuration.SortByOnlineConfig( _config.configs .Where(c => c.group != url) diff --git a/shadowsocks-csharp/Model/Configuration.cs b/shadowsocks-csharp/Model/Configuration.cs index 60df5410..a11cc46b 100644 --- a/shadowsocks-csharp/Model/Configuration.cs +++ b/shadowsocks-csharp/Model/Configuration.cs @@ -46,6 +46,7 @@ namespace Shadowsocks.Model public string geositeUrl; // for custom geosite source (and rule group) public string geositeGroup; public bool geositeBlacklistMode; + public string userAgent; //public NLogConfig.LogLevel logLevel; public LogViewerConfig logViewer; @@ -81,6 +82,7 @@ namespace Shadowsocks.Model geositeUrl = ""; geositeGroup = "geolocation-!cn"; geositeBlacklistMode = true; + userAgent = "ShadowsocksWindows/$version"; logViewer = new LogViewerConfig(); proxy = new ProxyConfig(); @@ -92,6 +94,9 @@ namespace Shadowsocks.Model onlineConfigSource = new List(); } + [JsonIgnore] + public string userAgentString; // $version substituted with numeral version in it + [JsonIgnore] NLogConfig nLogConfig; @@ -153,6 +158,7 @@ namespace Shadowsocks.Model string configContent = File.ReadAllText(CONFIG_FILE); config = JsonConvert.DeserializeObject(configContent); config.isDefault = false; + config.version = UpdateChecker.Version; if (UpdateChecker.Asset.CompareVersion(UpdateChecker.Version, config.version ?? "0") > 0) { config.updated = true; @@ -201,6 +207,8 @@ namespace Shadowsocks.Model logger.Error(e, "Cannot get the log level from NLog config file. Please check if the nlog config file exists with corresponding XML nodes."); } + config.userAgentString = config.userAgent.Replace("$version", config.version); + return config; }