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; } }