1
0
mirror of https://github.com/chylex/Discord-History-Tracker.git synced 2025-02-22 22:46:01 +01:00
Discord-History-Tracker/app/Server/Download/DiscordCdn.cs
2025-02-03 12:28:07 +01:00

45 lines
1.2 KiB
C#

using System;
using System.Collections.Frozen;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Web;
namespace DHT.Server.Download;
static class DiscordCdn {
private static FrozenSet<string> CdnHosts { get; } = new[] {
"cdn.discordapp.com",
"cdn.discord.com",
"media.discordapp.net",
}.ToFrozenSet();
private static bool IsCdnUrl(string originalUrl, [NotNullWhen(true)] out Uri? uri) {
return Uri.TryCreate(originalUrl, UriKind.Absolute, out uri) && CdnHosts.Contains(uri.Host);
}
public static string NormalizeUrl(string originalUrl) {
return IsCdnUrl(originalUrl, out Uri? uri) ? DoNormalize(uri) : originalUrl;
}
public static bool NormalizeUrlAndReturnIfCdn(string originalUrl, out string normalizedUrl) {
if (IsCdnUrl(originalUrl, out Uri? uri)) {
normalizedUrl = DoNormalize(uri);
return true;
}
else {
normalizedUrl = originalUrl;
return false;
}
}
private static string DoNormalize(Uri uri) {
NameValueCollection query = HttpUtility.ParseQueryString(uri.Query);
query.Remove("ex");
query.Remove("is");
query.Remove("hm");
return new UriBuilder(uri) { Query = query.ToString() }.Uri.ToString();
}
}