diff --git a/LibMatrix.Federation/AuthenticatedFederationClient.cs b/LibMatrix.Federation/AuthenticatedFederationClient.cs
index ee4bb25..95af72f 100644
--- a/LibMatrix.Federation/AuthenticatedFederationClient.cs
+++ b/LibMatrix.Federation/AuthenticatedFederationClient.cs
@@ -4,13 +4,13 @@ using LibMatrix.Homeservers;
namespace LibMatrix.Federation;
-public class AuthenticatedFederationClient(string federationEndpoint, AuthenticatedFederationClient.AuthenticatedFederationConfiguration config, string? proxy = null) : FederationClient(federationEndpoint, proxy) {
-
+public class AuthenticatedFederationClient(string federationEndpoint, AuthenticatedFederationClient.AuthenticatedFederationConfiguration config, string? proxy = null)
+ : FederationClient(federationEndpoint, proxy) {
public class AuthenticatedFederationConfiguration {
- public required VersionedHomeserverPrivateKey PrivateKey { get; set; }
+ public required VersionedHomeserverPrivateKey PrivateKey { get; set; }
public required string OriginServerName { get; set; }
}
-
+
// public async Task<UserDeviceListResponse> GetUserDevicesAsync(string userId) {
// var response = await HttpClient.SendAsync(new XMatrixAuthorizationScheme.XMatrixRequestSignature() {
// OriginServerName = config.OriginServerName,
@@ -20,5 +20,4 @@ public class AuthenticatedFederationClient(string federationEndpoint, Authentica
// }.ToSignedHttpRequestMessage(config.PrivateKey));
// return response;
// }
-
}
\ No newline at end of file
diff --git a/LibMatrix.Federation/Extensions/Ed25519Extensions.cs b/LibMatrix.Federation/Extensions/Ed25519Extensions.cs
index e5a9e5d..ada6a3d 100644
--- a/LibMatrix.Federation/Extensions/Ed25519Extensions.cs
+++ b/LibMatrix.Federation/Extensions/Ed25519Extensions.cs
@@ -6,5 +6,6 @@ namespace LibMatrix.Federation.Extensions;
public static class Ed25519Extensions {
public static string ToUnpaddedBase64(this Ed25519PublicKeyParameters key) => UnpaddedBase64.Encode(key.GetEncoded());
+ public static string ToUnpaddedBase64(this Ed25519PrivateKeyParameters key) => UnpaddedBase64.Encode(key.GetEncoded());
public static Ed25519PrivateKeyParameters GetPrivateEd25519Key(this VersionedHomeserverPrivateKey key) => new(UnpaddedBase64.Decode(key.PrivateKey), 0);
}
\ No newline at end of file
diff --git a/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs b/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
index 792264a..b520b1c 100644
--- a/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
+++ b/LibMatrix.Federation/Extensions/XMatrixAuthorizationSchemeExtensions.cs
@@ -4,13 +4,22 @@ using LibMatrix.Abstractions;
namespace LibMatrix.Federation.Extensions;
public static class XMatrixAuthorizationSchemeExtensions {
- public static HttpRequestMessage ToSignedHttpRequestMessage(this XMatrixAuthorizationScheme.XMatrixRequestSignature requestSignature, VersionedHomeserverPrivateKey privateKey) {
+ 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);
}
diff --git a/LibMatrix.Federation/XMatrixAuthorizationScheme.cs b/LibMatrix.Federation/XMatrixAuthorizationScheme.cs
index 45899b8..392cd93 100644
--- a/LibMatrix.Federation/XMatrixAuthorizationScheme.cs
+++ b/LibMatrix.Federation/XMatrixAuthorizationScheme.cs
@@ -2,6 +2,8 @@ using System.Net.Http.Headers;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using ArcaneLibs.Extensions;
+using LibMatrix.Abstractions;
+using LibMatrix.Responses.Federation;
using Microsoft.Extensions.Primitives;
namespace LibMatrix.Federation;
@@ -48,6 +50,14 @@ public class XMatrixAuthorizationScheme {
};
}
+ public static XMatrixAuthorizationHeader FromSignedObject(SignedObject<XMatrixRequestSignature> signedObj, VersionedHomeserverPrivateKey currentKey) =>
+ new() {
+ Origin = signedObj.TypedContent.OriginServerName,
+ Destination = signedObj.TypedContent.DestinationServerName,
+ Signature = signedObj.Signatures[signedObj.TypedContent.OriginServerName][currentKey.KeyId],
+ Key = currentKey.KeyId
+ };
+
public string ToHeaderValue() => $"{Scheme} origin=\"{Origin}\", destination=\"{Destination}\", key=\"{Key}\", sig=\"{Signature}\"";
}
|