using LibMatrix.Abstractions; using LibMatrix.Federation.Extensions; using LibMatrix.Homeservers; namespace LibMatrix.Federation; 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 string OriginServerName { get; set; } } public async Task GetUserDevicesAsync(string userId) { var response = await HttpClient.SendAsync(new XMatrixAuthorizationScheme.XMatrixRequestSignature() { OriginServerName = config.OriginServerName, DestinationServerName = userId.Split(':', 2)[1], Method = "GET", Uri = $"/_matrix/federation/v1/user/devices/{userId}", }.ToSignedHttpRequestMessage(config.PrivateKey)); return response; } }