24 lines
850 B
C#
24 lines
850 B
C#
namespace PrivaPub.Federation.Objects
|
|||
|
|
{
|
||
|
|
public static class Origin
|
||
|
|
{
|
||
|
|
public static string Of(string uri) =>
|
||
|
|
Uri.TryCreate(uri, UriKind.Absolute, out var parsed) ? Of(parsed) : default;
|
||
|
|
|
||
|
|
public static string Of(Uri uri) =>
|
||
|
|
uri is { IsAbsoluteUri: true } && (uri.Scheme == Uri.UriSchemeHttps || uri.Scheme == Uri.UriSchemeHttp)
|
||
|
|
? $"{uri.Scheme}://{uri.IdnHost.ToLowerInvariant()}:{uri.Port}"
|
||
|
|
: default;
|
||
|
|
|
||
|
|
public static bool Same(string first, string second)
|
||
|
|
{
|
||
|
|
var origin = Of(first);
|
||
|
|
return origin != default && origin == Of(second);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static bool IsDocumentAt(string id, Uri location) =>
|
||
|
|
Uri.TryCreate(id, UriKind.Absolute, out var parsed)
|
||
|
|
&& location is { IsAbsoluteUri: true }
|
||
|
|
&& Uri.Compare(parsed, location, UriComponents.HttpRequestUrl, UriFormat.UriEscaped, StringComparison.Ordinal) == 0;
|
||
|
|
}
|
||
|
|
}
|