Add "idtoname" request & change invite format
All checks were successful
Server Build / publish (push) Successful in 28s
Voice Build / publish (push) Successful in 26s

This commit is contained in:
olcxja 2026-05-21 10:58:08 +02:00
commit 017eb2501b
5 changed files with 110 additions and 16 deletions

View file

@ -315,6 +315,24 @@ public class Requests
return; return;
} }
public static async Task IdToName(HttpContext context, Func<Task> next, IQueryCollection query)
{
if (!query.TryGetValue("id", out var id))
{
return;
}
if (!Utils.IsUserLocal(id, out string domain)) //federation :(
{
return;
}
id = id.ToString().Split(":")[0];
await context.Response.WriteAsync(await Utils.NameFromId(id) + $":{DOMAIN}");
return;
}
public static async Task NextNonce(HttpContext context, Func<Task> next, IQueryCollection query) public static async Task NextNonce(HttpContext context, Func<Task> next, IQueryCollection query)
{ {

View file

@ -182,31 +182,103 @@ public class Utils
public static async Task<string> GetUserSentInvites(string id) public static async Task<string> GetUserSentInvites(string id)
{ {
string dmString = "\"dms\": {";
string groupString = "\"groups\": {";
string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/sent"; string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/sent";
if (!Fs.Exists(path)) if (Fs.Exists(path))
{ {
return ""; string[] invites = Fs.ReadDirectory(path);
if (invites.Length != 0)
{
foreach (var invite in invites)
{
string content = Encoding.UTF8.GetString(await Fs.ReadFile($"{path}/{invite}"));
if (dmString == "\"dms\": {")
{
dmString += $"\"{invite}\": {{ \"timestamp\": {content} }}";
}
else
{
dmString += $",\"{invite}\": {{ \"timestamp\": {content} }}";
}
}
}
} }
string[] invites = Fs.ReadDirectory(path); dmString += "}";
if (invites.Length == 0)
path = $"{ACCOUNTS_DATA_DIR}/{id}/groupinvites/sent";
if (Fs.Exists(path))
{ {
return ""; string[] invites = Fs.ReadDirectory(path);
if (invites.Length != 0)
{
foreach (var invite in invites) //filename - group;domain-receiverid;domain
{ string[] inviteArray = invite.Split('-');
string content = Encoding.UTF8.GetString(await Fs.ReadFile($"{path}/{invite}"));
if (groupString == "\"groups\": {")
{
groupString += $"\"{inviteArray[0]}\": {{ \"timestamp\": {content}, \"receiver\": \"{inviteArray[1]}\" }}";
}
else
{
groupString += $",\"{inviteArray[0]}\": {{ \"timestamp\": {content}, \"receiver\": \"{inviteArray[1]}\" }}";
}
}
}
} }
return string.Join(",", invites); groupString += "}";
return $"{{{dmString},{groupString}}}";
} }
public static async Task<string> GetUserReceivedInvites(string id) public static async Task<string> GetUserReceivedInvites(string id)
{ {
string dmString = "\"dms\": {";
string groupString = "\"groups\": {";
string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/recv"; string path = $"{ACCOUNTS_DATA_DIR}/{id}/dminvites/recv";
if (!Fs.Exists(path)) if (Fs.Exists(path))
{ {
return ""; string[] invites = Fs.ReadDirectory(path);
if (invites.Length != 0)
{
foreach (var invite in invites)
{
string content = Encoding.UTF8.GetString(await Fs.ReadFile($"{path}/{invite}"));
if (dmString == "\"dms\": {")
{
dmString += $"\"{invite}\": {{ \"timestamp\": {content} }}";
}
else
{
dmString += $",\"{invite}\": {{ \"timestamp\": {content} }}";
}
}
}
} }
string[] invites = Fs.ReadDirectory(path); dmString += "}";
if (invites.Length == 0)
path = $"{ACCOUNTS_DATA_DIR}/{id}/groupinvites/recv";
if (Fs.Exists(path))
{ {
return ""; string[] invites = Fs.ReadDirectory(path);
if (invites.Length != 0)
{
foreach (var invite in invites)
{
string[] content = Encoding.UTF8.GetString(await Fs.ReadFile($"{path}/{invite}")).Split(':');
if (groupString == "\"groups\": {")
{
groupString += $"\"{invite}\": {{ \"timestamp\": {content[1]}, \"sender\": \"{content[0]}\" }}";
}
else
{
groupString += $",\"{invite}\": {{ \"timestamp\": {content[1]}, \"sender\": \"{content[0]}\" }}";
}
}
}
} }
return string.Join(",", invites); groupString += "}";
return $"{{{dmString},{groupString}}}";
} }
public static async Task UpdateUserKeys(string id, string body) public static async Task UpdateUserKeys(string id, string body)

View file

@ -46,7 +46,7 @@ public class Receiver
await context.Response.WriteAsync("info:user.already.invited"); await context.Response.WriteAsync("info:user.already.invited");
return; return;
} }
await Fs.WriteFile(inviteFile, Encoding.UTF8.GetBytes("0")); await Fs.WriteFile(inviteFile, Encoding.UTF8.GetBytes(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString()));
} }
finally finally
{ {

View file

@ -165,6 +165,9 @@ public class Program
case "/_larpix/correctedname": case "/_larpix/correctedname":
await Account.Requests.CorrectedName(context, next, query); await Account.Requests.CorrectedName(context, next, query);
return; return;
case "/_larpix/idtoname":
await Account.Requests.IdToName(context, next, query);
return;
case "/_larpix/nextnonce": case "/_larpix/nextnonce":
await Account.Requests.NextNonce(context, next, query); await Account.Requests.NextNonce(context, next, query);
return; return;

View file

@ -17,7 +17,7 @@ public class Requests
username2 = username2.Split(":")[0]; username2 = username2.Split(":")[0];
string remoteId2 = await Federation.Sender.GetUserId(username2, domain); string remoteId2 = await Federation.Sender.GetUserId(username2, domain);
await Fs.WriteFile(ACCOUNTS_DATA_DIR + $"/{id}/dminvites/sent/{remoteId2};{domain}", []); //only save sent while federating await Fs.WriteFile(ACCOUNTS_DATA_DIR + $"/{id}/dminvites/sent/{remoteId2};{domain}", Encoding.UTF8.GetBytes(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString()));
return await Federation.Sender.DmInvite(id, domain, remoteId2); return await Federation.Sender.DmInvite(id, domain, remoteId2);
} }
@ -43,8 +43,9 @@ public class Requests
return "info:user.already.invited"; return "info:user.already.invited";
} }
await Fs.WriteFile(inviteFile, Encoding.UTF8.GetBytes("0")); byte[] timestamp = Encoding.UTF8.GetBytes(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString());
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 await Fs.WriteFile(inviteFile, timestamp);
await Fs.WriteFile(ACCOUNTS_DATA_DIR + $"/{id}/dminvites/sent/{id2}", timestamp); //we should also save that this user invited someone, because listing sent invites is cool
} }
finally finally
{ {