mirror of
https://github.com/bitwarden/server
synced 2026-01-02 16:43:25 +00:00
* Rewrite Icon fetching * Move validation to IconUri, Uri, or UriBuilder * `dotnet format` 🤖 * PR suggestions * Add not null compiler hint * Add twitter to test case * Move Uri manipulation to UriService * Implement MockedHttpClient Presents better, fluent handling of message matching and response building. * Add redirect handling tests * Add testing to models * More aggressively dispose content in icon link * Format 🤖 * Update icon lockfile * Convert to cloned stream for HttpResponseBuilder Content was being disposed when HttResponseMessage was being disposed. This avoids losing our reference to our content and allows multiple usages of the same `MockedHttpMessageResponse` * Move services to extension Extension is shared by testing and allows access to services from our service tests * Remove unused `using` * Prefer awaiting asyncs for better exception handling * `dotnet format` 🤖 * Await async * Update tests to use test TLD and ip ranges * Remove unused interfaces * Make assignments static when possible * Prefer invariant comparer to downcasing * Prefer injecting interface services to implementations * Prefer comparer set in HashSet initialization * Allow SVG icons * Filter out icons with unknown formats * Seek to beginning of MemoryStream after writing it * More appropriate to not return icon if it's invalid * Add svg icon test
43 lines
1.0 KiB
C#
43 lines
1.0 KiB
C#
#nullable enable
|
|
|
|
using System.Net;
|
|
|
|
namespace Bit.Icons.Extensions;
|
|
|
|
public static class IPAddressExtension
|
|
{
|
|
public static bool IsInternal(this IPAddress ip)
|
|
{
|
|
if (IPAddress.IsLoopback(ip))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var ipString = ip.ToString();
|
|
if (ipString == "::1" || ipString == "::" || ipString.StartsWith("::ffff:"))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
// IPv6
|
|
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
|
|
{
|
|
return ipString.StartsWith("fc") || ipString.StartsWith("fd") ||
|
|
ipString.StartsWith("fe") || ipString.StartsWith("ff");
|
|
}
|
|
|
|
// IPv4
|
|
var bytes = ip.GetAddressBytes();
|
|
return (bytes[0]) switch
|
|
{
|
|
0 => true,
|
|
10 => true,
|
|
127 => true,
|
|
169 => bytes[1] == 254, // Cloud environments, such as AWS
|
|
172 => bytes[1] < 32 && bytes[1] >= 16,
|
|
192 => bytes[1] == 168,
|
|
_ => false,
|
|
};
|
|
}
|
|
}
|