mirror of
https://github.com/bitwarden/server
synced 2026-01-03 00:53:37 +00:00
Rewrite Icon fetching (#3023)
* 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
This commit is contained in:
42
src/Icons/Util/IPAddressExtension.cs
Normal file
42
src/Icons/Util/IPAddressExtension.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
#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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user