LANCommander/LANCommander.SDK/Extensions/UriExtensions.cs
2025-03-10 23:18:08 -05:00

71 lines
No EOL
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
namespace LANCommander.SDK.Extensions;
public static class UriExtensions
{
public static IEnumerable<Uri> SuggestValidUris(this string url)
{
List<Uri> uris = new();
int[] knownPorts =
{
1337,
80,
443,
31337,
};
// Generate URIs based on provided URL
try
{
if (Uri.IsWellFormedUriString(url, UriKind.Absolute))
{
var uri = new Uri(url);
uris.Add(uri);
if (uri.Scheme != Uri.UriSchemeHttp)
uris.Add(new UriBuilder(url)
{
Scheme = Uri.UriSchemeHttp,
Port = uri.Port,
}.Uri);
else if (uri.Scheme != Uri.UriSchemeHttps)
uris.Add(new UriBuilder(url)
{
Scheme = Uri.UriSchemeHttps,
Port = uri.Port,
}.Uri);
}
else
{
var basePart = url.Split("://").Last();
uris.Add(new Uri($"http://{basePart}"));
uris.Add(new Uri($"https://{basePart}"));
}
}
catch { }
// Additionally check known-ports
foreach (var uri in uris.ToArray())
{
foreach (var port in knownPorts)
{
if (uri.Port != port)
{
uris.Add(new UriBuilder(uri)
{
Port = port,
}.Uri);
}
}
}
return uris;
}
}