diff --git a/LibMatrix/RoomTypes/GenericRoom.cs b/LibMatrix/RoomTypes/GenericRoom.cs
index 6a0b003..550eb58 100644
--- a/LibMatrix/RoomTypes/GenericRoom.cs
+++ b/LibMatrix/RoomTypes/GenericRoom.cs
@@ -321,6 +321,9 @@ public class GenericRoom {
public Task<RoomCreateEventContent?> GetCreateEventAsync() =>
GetStateAsync<RoomCreateEventContent>("m.room.create");
+ public Task<RoomPolicyServerEventContent?> GetPolicyServerAsync() =>
+ GetStateAsync<RoomPolicyServerEventContent>(RoomPolicyServerEventContent.EventId);
+
public async Task<string?> GetRoomType() {
var res = await GetStateAsync<RoomCreateEventContent>("m.room.create");
return res.Type;
diff --git a/LibMatrix/Services/WellKnownResolver/WellKnownResolverService.cs b/LibMatrix/Services/WellKnownResolver/WellKnownResolverService.cs
index c5e9d9c..8764096 100644
--- a/LibMatrix/Services/WellKnownResolver/WellKnownResolverService.cs
+++ b/LibMatrix/Services/WellKnownResolver/WellKnownResolverService.cs
@@ -14,15 +14,17 @@ public class WellKnownResolverService {
private readonly ClientWellKnownResolver _clientWellKnownResolver;
private readonly SupportWellKnownResolver _supportWellKnownResolver;
private readonly ServerWellKnownResolver _serverWellKnownResolver;
+ private readonly PolicyServerWellKnownResolver _policyServerWellKnownResolver;
private readonly WellKnownResolverConfiguration _configuration;
public WellKnownResolverService(ILogger<WellKnownResolverService> logger, ClientWellKnownResolver clientWellKnownResolver, SupportWellKnownResolver supportWellKnownResolver,
- WellKnownResolverConfiguration configuration, ServerWellKnownResolver serverWellKnownResolver) {
+ WellKnownResolverConfiguration configuration, ServerWellKnownResolver serverWellKnownResolver, PolicyServerWellKnownResolver policyServerWellKnownResolver) {
_logger = logger;
_clientWellKnownResolver = clientWellKnownResolver;
_supportWellKnownResolver = supportWellKnownResolver;
_configuration = configuration;
_serverWellKnownResolver = serverWellKnownResolver;
+ _policyServerWellKnownResolver = policyServerWellKnownResolver;
if (logger is NullLogger<WellKnownResolverService>) {
var stackFrame = new StackTrace(true).GetFrame(1);
Console.WriteLine(
@@ -31,16 +33,26 @@ public class WellKnownResolverService {
}
public async Task<WellKnownRecords> TryResolveWellKnownRecords(string homeserver, bool includeClient = true, bool includeServer = true, bool includeSupport = true,
- WellKnownResolverConfiguration? config = null) {
+ bool includePolicyServer = true, WellKnownResolverConfiguration? config = null) {
WellKnownRecords records = new();
_logger.LogDebug($"Resolving well-knowns for {homeserver}");
- var clientTask = _clientWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration);
- var serverTask = _serverWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration);
- var supportTask = _supportWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration);
+ var clientTask = includeClient
+ ? _clientWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration)
+ : Task.FromResult<WellKnownResolutionResult<ClientWellKnown?>>(null!);
+ var serverTask = includeServer
+ ? _serverWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration)
+ : Task.FromResult<WellKnownResolutionResult<ServerWellKnown?>>(null!);
+ var supportTask = includeSupport
+ ? _supportWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration)
+ : Task.FromResult<WellKnownResolutionResult<SupportWellKnown?>>(null!);
+ var policyServerTask = includePolicyServer
+ ? _policyServerWellKnownResolver.TryResolveWellKnown(homeserver, config ?? _configuration)
+ : Task.FromResult<WellKnownResolutionResult<PolicyServerWellKnown?>>(null!);
if (includeClient && await clientTask is { } clientResult) records.ClientWellKnown = clientResult;
if (includeServer && await serverTask is { } serverResult) records.ServerWellKnown = serverResult;
if (includeSupport && await supportTask is { } supportResult) records.SupportWellKnown = supportResult;
+ if (includePolicyServer && await policyServerTask is { } policyServerResult) records.PolicyServerWellKnown = policyServerResult;
return records;
}
@@ -49,6 +61,7 @@ public class WellKnownResolverService {
public WellKnownResolutionResult<ClientWellKnown?>? ClientWellKnown { get; set; }
public WellKnownResolutionResult<ServerWellKnown?>? ServerWellKnown { get; set; }
public WellKnownResolutionResult<SupportWellKnown?>? SupportWellKnown { get; set; }
+ public WellKnownResolutionResult<PolicyServerWellKnown?>? PolicyServerWellKnown { get; set; }
}
public class WellKnownResolutionResult<T> {
diff --git a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ClientWellKnownResolver.cs b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ClientWellKnownResolver.cs
index f52b217..678c077 100644
--- a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ClientWellKnownResolver.cs
+++ b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ClientWellKnownResolver.cs
@@ -1,10 +1,10 @@
using System.Text.Json.Serialization;
using ArcaneLibs.Collections;
-using LibMatrix.Extensions;
using Microsoft.Extensions.Logging;
using WellKnownType = LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ClientWellKnown;
-using ResultType =
- LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult<LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ClientWellKnown?>;
+using ResultType = LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult<
+ LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ClientWellKnown?
+>;
namespace LibMatrix.Services.WellKnownResolver.WellKnownResolvers;
@@ -14,7 +14,7 @@ public class ClientWellKnownResolver(ILogger<ClientWellKnownResolver> logger, We
StoreNulls = false
};
- public Task<WellKnownResolverService.WellKnownResolutionResult<ClientWellKnown>> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) {
+ public Task<ResultType> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) {
config ??= configuration;
return ClientWellKnownCache.TryGetOrAdd(homeserver, async () => {
logger.LogTrace($"Resolving client well-known: {homeserver}");
@@ -23,7 +23,6 @@ public class ClientWellKnownResolver(ILogger<ClientWellKnownResolver> logger, We
await TryGetWellKnownFromUrl($"https://{homeserver}/.well-known/matrix/client", WellKnownResolverService.WellKnownSource.Https);
if (result.Content != null) return result;
-
return result;
});
}
diff --git a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/PolicyServerWellKnownResolver.cs b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/PolicyServerWellKnownResolver.cs
new file mode 100644
index 0000000..f7ffd62
--- /dev/null
+++ b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/PolicyServerWellKnownResolver.cs
@@ -0,0 +1,28 @@
+using System.Text.Json.Serialization;
+using Microsoft.Extensions.Logging;
+using WellKnownType = LibMatrix.Services.WellKnownResolver.WellKnownResolvers.PolicyServerWellKnown;
+using ResultType = LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult<
+ LibMatrix.Services.WellKnownResolver.WellKnownResolvers.PolicyServerWellKnown?
+>;
+
+namespace LibMatrix.Services.WellKnownResolver.WellKnownResolvers;
+
+public class PolicyServerWellKnownResolver(ILogger<PolicyServerWellKnownResolver> logger, WellKnownResolverConfiguration configuration) : BaseWellKnownResolver<WellKnownType> {
+ public Task<ResultType> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) {
+ config ??= configuration;
+ return WellKnownCache.TryGetOrAdd(homeserver, async () => {
+ logger.LogTrace($"Resolving support well-known: {homeserver}");
+
+ ResultType result = await TryGetWellKnownFromUrl($"https://{homeserver}/.well-known/matrix/policy_server", WellKnownResolverService.WellKnownSource.Https);
+ if (result.Content != null)
+ return result;
+
+ return null;
+ });
+ }
+}
+
+public class PolicyServerWellKnown {
+ [JsonPropertyName("public_key")]
+ public string PublicKey { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ServerWellKnownResolver.cs b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ServerWellKnownResolver.cs
index a48d846..f4be57d 100644
--- a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ServerWellKnownResolver.cs
+++ b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/ServerWellKnownResolver.cs
@@ -2,8 +2,9 @@ using System.Text.Json.Serialization;
using ArcaneLibs.Collections;
using Microsoft.Extensions.Logging;
using WellKnownType = LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ServerWellKnown;
-using ResultType =
- LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult<LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ServerWellKnown?>;
+using ResultType = LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult<
+ LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ServerWellKnown?
+>;
namespace LibMatrix.Services.WellKnownResolver.WellKnownResolvers;
@@ -13,7 +14,7 @@ public class ServerWellKnownResolver(ILogger<ServerWellKnownResolver> logger, We
StoreNulls = false
};
- public Task<WellKnownResolverService.WellKnownResolutionResult<ServerWellKnown>> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) {
+ public Task<ResultType> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) {
config ??= configuration;
return ClientWellKnownCache.TryGetOrAdd(homeserver, async () => {
logger.LogTrace($"Resolving client well-known: {homeserver}");
diff --git a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/SupportWellKnownResolver.cs b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/SupportWellKnownResolver.cs
index 99313db..4faff62 100644
--- a/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/SupportWellKnownResolver.cs
+++ b/LibMatrix/Services/WellKnownResolver/WellKnownResolvers/SupportWellKnownResolver.cs
@@ -1,5 +1,3 @@
-using System.Diagnostics;
-using System.Net.Http.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;
using WellKnownType = LibMatrix.Services.WellKnownResolver.WellKnownResolvers.SupportWellKnown;
@@ -16,7 +14,7 @@ public class SupportWellKnownResolver(ILogger<SupportWellKnownResolver> logger,
logger.LogTrace($"Resolving support well-known: {homeserver}");
ResultType result = await TryGetWellKnownFromUrl($"https://{homeserver}/.well-known/matrix/support", WellKnownResolverService.WellKnownSource.Https);
- if (result.Content != null)
+ if (result.Content != null)
return result;
return null;
|