using System.Text.Json; using RelayServer.Services; using WebSocketSharp.Server; using RelayServer.Models; var surrealService = new SurrealService(); var coreClient = new CoreClientService(); var cryptoService = new ChannelCryptoService(); await using var db = await surrealService.ConnectAsync(); ChatTest.ClientKeyService = new ClientKeyService(db); ChatTest.Db = db; var wssv = new WebSocketServer("ws://localhost:1337"); wssv.AddWebSocketService("/"); wssv.Start(); Console.WriteLine("WebSocket server started"); var keeper = await coreClient.GetUserByUsernameAsync("Keeper317"); var kira = await coreClient.GetUserByUsernameAsync("Ru_Kira"); var test = await coreClient.GetUserByUsernameAsync("Test"); if (keeper is null || kira is null || test is null) { Console.WriteLine("One or more required users do not exist in RelayCore."); return; } if (!keeper.Licensed || !kira.Licensed || !test.Licensed) { Console.WriteLine("One or more required users are not licensed."); return; } Console.WriteLine($"Core verified user: {keeper.Username}"); Console.WriteLine($"Core verified user: {kira.Username}"); Console.WriteLine($"Core verified user: {test.Username}"); var server = await db.Create("servers", new Servers { Name = "Test Server", OwnerUserId = keeper.Id, CreatedAt = DateTime.UtcNow }); Console.WriteLine($"Server created: {ToJsonString(server)}"); var keeperMember = await db.Create("server_members", new ServerMembers { UserId = keeper.Id, JoinedAt = DateTime.UtcNow, IsOwner = true }); var kiraMember = await db.Create("server_members", new ServerMembers { UserId = kira.Id, JoinedAt = DateTime.UtcNow, IsOwner = false }); var testMember = await db.Create("server_members", new ServerMembers { UserId = test.Id, JoinedAt = DateTime.UtcNow, IsOwner = false }); Console.WriteLine("Server members created."); var channel = await db.Create("channels", new Channels { Name = "general", CreatedAt = DateTime.UtcNow }); var channel2 = await db.Create("files", new Channels { Name = "files", CreatedAt = DateTime.UtcNow.Subtract(new TimeSpan(0, 4, 0,0)) }); Console.WriteLine($"Channel created: {ToJsonString(channel2)}"); var channelId = GetRecordId(channel.Id); Console.WriteLine($"Resolved channelId: {channelId}"); ChatTest.DefaultChannelId = channelId; var keyBase64 = cryptoService.GenerateKey(); var serverKeys = E2EeHelper.GenerateRsaKeyPair(); var serverKey = await db.Create("server_encryption_keys", new ServerEncryptionKeys { KeyBase64 = keyBase64, PublicKey = serverKeys.publicKey, PrivateKey = serverKeys.privateKey, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }); ChatTest.ServerPublicKey = serverKeys.publicKey; ChatTest.ServerPrivateKey = serverKeys.privateKey; ChatTest.ChannelDbKey = keyBase64; Console.WriteLine("Server encryption key created."); Console.ReadKey(true); wssv.Stop(); return; static string ToJsonString(object? obj) { return JsonSerializer.Serialize(obj, new JsonSerializerOptions { WriteIndented = true, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } static string GetRecordId(object? id) { if (id is null) return string.Empty; var json = JsonSerializer.Serialize(id); using var doc = JsonDocument.Parse(json); var root = doc.RootElement; var recordId = root.GetProperty("Id").GetString() ?? string.Empty; var table = root.GetProperty("Table").GetString() ?? string.Empty; return $"{table}:{recordId}"; }