about summary refs log tree commit diff
path: root/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs')
-rw-r--r--LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs29
1 files changed, 29 insertions, 0 deletions
diff --git a/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs b/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
new file mode 100644

index 0000000..b520b1c --- /dev/null +++ b/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
@@ -0,0 +1,29 @@ +using System.Net.Http.Json; +using LibMatrix.Abstractions; + +namespace LibMatrix.Federation.Extensions; + +public static class XMatrixAuthorizationSchemeExtensions { + public static HttpRequestMessage ToSignedHttpRequestMessage(this XMatrixAuthorizationScheme.XMatrixRequestSignature requestSignature, + VersionedHomeserverPrivateKey privateKey) { + var signature = requestSignature.Sign(privateKey); + var requestMessage = new HttpRequestMessage { + Method = new HttpMethod(requestSignature.Method), + RequestUri = new Uri(requestSignature.Uri, UriKind.Relative) + }; + + var headerValue = new XMatrixAuthorizationScheme.XMatrixAuthorizationHeader() { + Origin = requestSignature.OriginServerName, + Key = privateKey.KeyId, + Destination = requestSignature.DestinationServerName, + Signature = signature.Signatures[requestSignature.OriginServerName][privateKey.KeyId] + }.ToHeaderValue(); + requestMessage.Headers.Add("Authorization", headerValue); + + if (requestSignature.Content != null) { + requestMessage.Content = JsonContent.Create(requestSignature.Content); + } + + return requestMessage; + } +} \ No newline at end of file