From 93fd8312daf71c86c8e46efd56a669f69705dc52 Mon Sep 17 00:00:00 2001 From: olcxja Date: Thu, 21 May 2026 08:29:13 +0200 Subject: [PATCH] add "user/invites/sent" and "user/invites/received" requests --- LarpixServer/Account/Requests.cs | 12 ++++++++++++ LarpixServer/Account/Utils.cs | 31 ++++++++++++++++++++++++++++++- LarpixServer/Filesystem/Fs.cs | 2 +- LarpixServer/Room/Requests.cs | 15 ++++++--------- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/LarpixServer/Account/Requests.cs b/LarpixServer/Account/Requests.cs index 096449e..4707cd5 100644 --- a/LarpixServer/Account/Requests.cs +++ b/LarpixServer/Account/Requests.cs @@ -535,6 +535,18 @@ public class Requests { switch (serializedBody.string1) { + case "user/invites/sent": + await context.Response.WriteAsync( + Encryption.Encryption.EncryptString( + await Utils.GetUserSentInvites(id) + , password)); + break; + case "user/invites/received": + await context.Response.WriteAsync( + Encryption.Encryption.EncryptString( + await Utils.GetUserReceivedInvites(id) + , password)); + break; case "user/key/update": await context.Response.WriteAsync( Encryption.Encryption.EncryptString( diff --git a/LarpixServer/Account/Utils.cs b/LarpixServer/Account/Utils.cs index 1bc0e44..f5d8f58 100644 --- a/LarpixServer/Account/Utils.cs +++ b/LarpixServer/Account/Utils.cs @@ -180,6 +180,35 @@ public class Utils await Fs.WriteFile(path, Encoding.UTF8.GetBytes(newPassword)); } + public static async Task GetUserSentInvites(string id) + { + string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/sent"; + if (!Fs.Exists(path)) + { + return ""; + } + string[] invites = Fs.ReadDirectory(path); + if (invites.Length == 0) + { + return ""; + } + return string.Join(",", invites); + } + public static async Task GetUserReceivedInvites(string id) + { + string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/recv"; + if (!Fs.Exists(path)) + { + return ""; + } + string[] invites = Fs.ReadDirectory(path); + if (invites.Length == 0) + { + return ""; + } + return string.Join(",", invites); + } + public static async Task UpdateUserKeys(string id, string body) { if (!Fs.Exists($"{ACCOUNTS_DATA_DIR}/{id}/secret")) @@ -250,7 +279,7 @@ public class Utils string dms = "{"; foreach (var dmfile in Fs.ReadDirectory(path)) { - dms += $"{Encoding.UTF8.GetString(await Fs.ReadFile(dmfile))},"; + dms += $"{Encoding.UTF8.GetString(await Fs.ReadFile($"{path}/{dmfile}"))},"; } return dms.Substring(0, dms.Length - 1) + "}"; diff --git a/LarpixServer/Filesystem/Fs.cs b/LarpixServer/Filesystem/Fs.cs index 26b296f..d3c48ab 100644 --- a/LarpixServer/Filesystem/Fs.cs +++ b/LarpixServer/Filesystem/Fs.cs @@ -356,7 +356,7 @@ public class Fs return Array.Empty(); } - directoryData = Directory.GetFileSystemEntries(path, "*", SearchOption.TopDirectoryOnly); + directoryData = Directory.GetFileSystemEntries(path, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName).ToArray(); dirCache[path] = directoryData; return directoryData; } diff --git a/LarpixServer/Room/Requests.cs b/LarpixServer/Room/Requests.cs index 5240904..c24f055 100644 --- a/LarpixServer/Room/Requests.cs +++ b/LarpixServer/Room/Requests.cs @@ -37,16 +37,14 @@ public class Requests try { - string inviteFile = ACCOUNTS_DATA_DIR + $"/{id2}/dminvites/recv/{id};{DOMAIN}"; + string inviteFile = ACCOUNTS_DATA_DIR + $"/{id2}/dminvites/recv/{id}"; if (Fs.Exists(inviteFile)) { return "info:user.already.invited"; } await Fs.WriteFile(inviteFile, Encoding.UTF8.GetBytes("0")); - - //im not saving this like ts is litterally local scenario - //await Fs.WriteFile(inviteSentFile, []); //we should also save that this user invited someone, because this will act as dm accept verification while federating + await Fs.WriteFile(ACCOUNTS_DATA_DIR + $"/{id}/dminvites/sent/{id2}", []); //we should also save that this user invited someone, because listing sent invites is cool } finally { @@ -81,14 +79,13 @@ public class Requests if (isUserLocal) { - /* - string inviteSentFile = ACCOUNTS_DATA_DIR + $"/{id2}/dminvites/sent/{id};{DOMAIN}"; + + string inviteSentFile = ACCOUNTS_DATA_DIR + $"/{id2}/dminvites/sent/{id}"; if (!Fs.Exists(inviteSentFile)) { - return "You can't create a DM without an invitation"; + return "error:cant.create.dm.without.invitation"; } Fs.DeleteFile(inviteSentFile); - */ // local scenario, there is no need to check sent } else //check sent on federated server { @@ -98,7 +95,7 @@ public class Requests } } - string inviteFile = ACCOUNTS_DATA_DIR + $"/{id}/dminvites/recv/{id2};{domain}"; + string inviteFile = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/recv/{id2}" + (isUserLocal ? "" : $";{domain}"); if (Fs.Exists(inviteFile)) {