[#76] Utils: Fix non-ascii characters in User-Agent header

This commit is contained in:
2026-10-08 10:54:17 +02:00
parent d91e8c7e99
commit b8b86ef7ec
2 changed files with 30 additions and 26 deletions
+7 -6
View File
@@ -339,20 +339,21 @@ namespace Elwig {
public static async Task CheckForUpdates(bool showAlert = false) { public static async Task CheckForUpdates(bool showAlert = false) {
if (Config.UpdateUrl == null) return; if (Config.UpdateUrl == null) return;
try {
var latest = await Utils.GetLatestInstallerUrl(Config.UpdateUrl); var latest = await Utils.GetLatestInstallerUrl(Config.UpdateUrl);
if (latest != null && new Version(latest.Value.Version) > Version) { if (new Version(latest.Version) > Version) {
await MainDispatcher.BeginInvoke(() => { await MainDispatcher.BeginInvoke(() => {
var d = new UpdateDialog(latest.Value.Version, latest.Value.Url, latest.Value.Size); var d = new UpdateDialog(latest.Version, latest.Url, latest.Size);
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
ShutdownNow(); ShutdownNow();
} }
}); });
} else if (showAlert) { } else if (showAlert) {
if (latest == null) { InteractionService.ShowInformation("Nach Updates suchen", $"Elwig ist auf dem aktuellsten Stand! (Version: {latest.Version})");
InteractionService.ShowError("Nach Updates suchen", "Informationen konnten nicht abgerufen werden!");
} else {
InteractionService.ShowInformation("Nach Updates suchen", $"Elwig ist auf dem aktuellsten Stand! (Version: {latest.Value.Version})");
} }
} catch (Exception exc) {
if (showAlert)
InteractionService.ShowException("Nach Updates suchen", $"Informationen konnten nicht abgerufen werden!", exc);
} }
} }
+11 -8
View File
@@ -483,12 +483,20 @@ namespace Elwig.Helpers {
return InternetGetConnectedState(out var _, 0); return InternetGetConnectedState(out var _, 0);
} }
public static string ReplaceUmlaute(string s) {
return s
.Replace("ä", "ae").Replace("Ä", "Ae")
.Replace("ö", "oe").Replace("Ö", "Oe")
.Replace("ü", "ue").Replace("Ü", "Ue")
.Replace("ß", "ss").Replace("ẞ", "SS");
}
public static HttpClient GetHttpClient(string? username = null, string? password = null, string? accept = null) { public static HttpClient GetHttpClient(string? username = null, string? password = null, string? accept = null) {
var client = new HttpClient() { var client = new HttpClient() {
Timeout = TimeSpan.FromSeconds(5), Timeout = TimeSpan.FromSeconds(5),
}; };
client.DefaultRequestHeaders.UserAgent.Clear(); client.DefaultRequestHeaders.UserAgent.Clear();
client.DefaultRequestHeaders.UserAgent.ParseAdd($"Elwig/{App.Version} ({App.Client?.NameToken}, {App.BranchName}, {Environment.MachineName}, {Environment.OSVersion})"); client.DefaultRequestHeaders.UserAgent.ParseAdd($"Elwig/{App.Version} ({App.Client?.NameToken}, {ReplaceUmlaute(App.BranchName)}, {Environment.MachineName}, {Environment.OSVersion})");
client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Clear();
if (accept != null) if (accept != null)
client.DefaultRequestHeaders.Accept.Add(new(accept)); client.DefaultRequestHeaders.Accept.Add(new(accept));
@@ -497,18 +505,13 @@ namespace Elwig.Helpers {
return client; return client;
} }
public static async Task<(string Version, string Url, long Size)?> GetLatestInstallerUrl(string url) { public static async Task<(string Version, string Url, long Size)> GetLatestInstallerUrl(string url) {
try {
using var client = GetHttpClient(accept: "application/json"); using var client = GetHttpClient(accept: "application/json");
using var res = await client.GetAsync(url); using var res = await client.GetAsync(url);
if (!res.IsSuccessStatusCode) res.EnsureSuccessStatusCode();
return null;
var resJson = JsonNode.Parse(await res.Content.ReadAsStringAsync()); var resJson = JsonNode.Parse(await res.Content.ReadAsStringAsync());
var data = resJson!["data"]!.AsArray()[^1]!; var data = resJson!["data"]!.AsArray()[^1]!;
return ((string)data["version"]!, (string)data["url"]!, (long)data["size"]!); return ((string)data["version"]!, (string)data["url"]!, (long)data["size"]!);
} catch {
return null;
}
} }
public static async Task UploadExportData(string zip, string url, string username, string password) { public static async Task UploadExportData(string zip, string url, string username, string password) {