From 0e79e4e17903528d183cc55f6a345029b8203eed Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 17 Jun 2025 14:20:27 +0200 Subject: Start of federation code --- LibMatrix.Federation/XMatrixAuthorizationScheme.cs | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 LibMatrix.Federation/XMatrixAuthorizationScheme.cs (limited to 'LibMatrix.Federation/XMatrixAuthorizationScheme.cs') diff --git a/LibMatrix.Federation/XMatrixAuthorizationScheme.cs b/LibMatrix.Federation/XMatrixAuthorizationScheme.cs new file mode 100644 index 0000000..cb349c9 --- /dev/null +++ b/LibMatrix.Federation/XMatrixAuthorizationScheme.cs @@ -0,0 +1,47 @@ +using System.Net; +using System.Net.Http.Headers; +using System.Text.Json.Serialization; +using ArcaneLibs.Extensions; +using Microsoft.Extensions.Primitives; + +namespace LibMatrix.Federation; + +public class XMatrixAuthorizationScheme { + public class XMatrixAuthorizationHeader { + public const string Scheme = "X-Matrix"; + + [JsonPropertyName("origin")] + public required string Origin { get; set; } + + [JsonPropertyName("destination")] + public required string Destination { get; set; } + + [JsonPropertyName("key")] + public required string Key { get; set; } + + [JsonPropertyName("sig")] + public required string Signature { get; set; } + + public static XMatrixAuthorizationHeader FromHeaderValue(AuthenticationHeaderValue header) { + if (header.Scheme != Scheme) + throw new LibMatrixException() { + Error = $"Expected authentication scheme of {Scheme}, got {header.Scheme}", + ErrorCode = MatrixException.ErrorCodes.M_UNAUTHORIZED + }; + + if (string.IsNullOrWhiteSpace(header.Parameter)) + throw new LibMatrixException() { + Error = $"Expected authentication header to have a value.", + ErrorCode = MatrixException.ErrorCodes.M_UNAUTHORIZED + }; + + var headerValues = new StringValues(header.Parameter); + foreach (var value in headerValues) + { + Console.WriteLine(headerValues.ToJson()); + } + } + + public string ToHeaderValue() { } + } +} \ No newline at end of file -- cgit 1.5.1