about summary refs log tree commit diff
path: root/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MatrixRoomUtils.Core/AuthenticatedHomeServer.cs')
-rw-r--r--MatrixRoomUtils.Core/AuthenticatedHomeServer.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs b/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs
new file mode 100644
index 0000000..dd9aa25
--- /dev/null
+++ b/MatrixRoomUtils.Core/AuthenticatedHomeServer.cs
@@ -0,0 +1,53 @@
+using System.Net.Http.Headers;
+using System.Net.Http.Json;
+using System.Text.Json;
+
+namespace MatrixRoomUtils;
+
+public class AuthenticatedHomeServer : IHomeServer
+{
+    public string UserId { get; set; }
+    public string AccessToken { get; set; }
+
+    public AuthenticatedHomeServer(string userId, string accessToken, string canonicalHomeServerDomain)
+    {
+        UserId = userId;
+        AccessToken = accessToken;
+        HomeServerDomain = canonicalHomeServerDomain;
+        _httpClient = new HttpClient();
+        
+        var rhsfwt = ResolveHomeserverFromWellKnown(canonicalHomeServerDomain);
+        rhsfwt.ContinueWith(_ =>
+        {
+            FullHomeServerDomain = rhsfwt.Result;
+            _httpClient.Dispose();
+            _httpClient = new HttpClient {BaseAddress = new Uri(FullHomeServerDomain)};
+            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AccessToken);
+            Console.WriteLine("[AHS] Finished setting up http client :)");
+        });
+    }
+
+    public async Task<Room> GetRoom(string roomId)
+    {
+        return new Room(_httpClient, roomId);
+    }
+
+    public async Task<List<Room>> GetJoinedRooms()
+    {
+        var rooms = new List<Room>();
+        var _rooms = await _httpClient.GetAsync("/_matrix/client/v3/joined_rooms");
+        if (!_rooms.IsSuccessStatusCode)
+        {
+            Console.WriteLine($"Failed to get rooms: {await _rooms.Content.ReadAsStringAsync()}");
+            throw new InvalidDataException($"Failed to get rooms: {await _rooms.Content.ReadAsStringAsync()}");
+        }
+
+        var roomsJson = await _rooms.Content.ReadFromJsonAsync<JsonElement>();
+        foreach (var room in roomsJson.GetProperty("joined_rooms").EnumerateArray())
+        {
+            rooms.Add(new Room(_httpClient, room.GetString()));
+        }
+
+        return rooms;
+    }
+}
\ No newline at end of file