about summary refs log tree commit diff
path: root/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
blob: b520b1c7f38fa2af8c29e4c3f7a28c0fdddf45fe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
    }
}