From fb6cde38b67186c0071998b15567b56e1186e78a Mon Sep 17 00:00:00 2001 From: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Date: Tue, 10 Oct 2023 00:04:57 +0300 Subject: [PATCH] Clean up after last commit --- .../Exporting/ExportAssetDownloader.cs | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs b/DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs index 0ffdce82..116baed6 100644 --- a/DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs +++ b/DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs @@ -102,28 +102,27 @@ internal partial class ExportAssetDownloader internal partial class ExportAssetDownloader { + // Remove signature parameters from Discord CDN URLs to normalize them + private static string StripUrlSignatureParameters(string url) + { + var uri = new Uri(url); + if (!string.Equals(uri.Host, "cdn.discordapp.com", StringComparison.OrdinalIgnoreCase)) + return url; + + var query = HttpUtility.ParseQueryString(uri.Query); + query.Remove("ex"); + query.Remove("is"); + query.Remove("hm"); + + return uri.GetLeftPart(UriPartial.Path) + query; + } + private static string GetUrlHash(string url) { - // Strip out ex, is and hm query params from Discord CDN URLs to create a consistent hash - if ( - url.Contains("cdn.discordapp.com") - && url.Contains("ex") - && url.Contains("is") - && url.Contains("hm") - ) - { - var uriBuilder = new UriBuilder(url); - var query = HttpUtility.ParseQueryString(uriBuilder.Query); - query.Remove("ex"); - query.Remove("is"); - query.Remove("hm"); - uriBuilder.Query = query.ToString(); - url = uriBuilder.ToString(); - url = url.Replace(":443", ""); - } + var normalizedUrl = StripUrlSignatureParameters(url); return SHA256 - .HashData(Encoding.UTF8.GetBytes(url)) + .HashData(Encoding.UTF8.GetBytes(normalizedUrl)) .ToHex() // 5 chars ought to be enough for anybody .Truncate(5);