DM keys!!!
This commit is contained in:
parent
79af6fcddf
commit
1e40db62a4
2 changed files with 82 additions and 5 deletions
|
|
@ -10,6 +10,59 @@ namespace LarpixServer.Room;
|
|||
public class Requests
|
||||
{
|
||||
public static SemaphoreSlim createLock = new SemaphoreSlim(1, 1);
|
||||
private const int MAX_DM_KEY_SIZE = 8192;
|
||||
|
||||
private static bool IsSafeDmId(string dmId)
|
||||
{
|
||||
if (string.IsNullOrEmpty(dmId)) return false;
|
||||
//yk
|
||||
if (dmId.Contains("..") || dmId.Contains("/") || dmId.Contains("\\"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static async Task<bool> IsMemberOfDm(string id, string dmId)
|
||||
{
|
||||
if (!IsSafeDmId(dmId)) return false;
|
||||
string memberPath = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members/{id};{DOMAIN}";
|
||||
return Fs.Exists(memberPath);
|
||||
}
|
||||
|
||||
public static async Task<string> GetDmKey(string id, string dmId)
|
||||
{
|
||||
if (!await IsMemberOfDm(id, dmId))
|
||||
{
|
||||
return "error:forbidden";
|
||||
}
|
||||
string path = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/keys/0/{id};{DOMAIN}";
|
||||
if (!Fs.Exists(path))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return Encoding.UTF8.GetString(await Fs.ReadFile(path));
|
||||
}
|
||||
|
||||
public static async Task<string> UpdateDmKey(string id, string dmId, string key)
|
||||
{
|
||||
if (!await IsMemberOfDm(id, dmId))
|
||||
{
|
||||
return "error:forbidden";
|
||||
}
|
||||
if (key == null || key.Length > MAX_DM_KEY_SIZE)
|
||||
{
|
||||
return "error:dm.key.too.large";
|
||||
}
|
||||
string path = $"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/keys/0/{id};{DOMAIN}";
|
||||
if (!Fs.Exists(path))
|
||||
{
|
||||
return "error:dm.key.not.found";
|
||||
}
|
||||
await Fs.WriteFile(path, Encoding.UTF8.GetBytes(key));
|
||||
return "success:dm.key.updated";
|
||||
}
|
||||
|
||||
public static async Task<string> DmInvite(string id, string targetId)
|
||||
{
|
||||
if (!Account.Utils.IsUserLocal(targetId, out string domain)) //federation
|
||||
|
|
@ -166,8 +219,9 @@ public class Requests
|
|||
string dmId = $"{users[0]}_{users[1]}";
|
||||
|
||||
|
||||
await Fs.WriteFile($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members",
|
||||
Encoding.UTF8.GetBytes($"{id}:{DOMAIN};{id2}:{domain}"));
|
||||
Fs.CreateDirectory($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members");
|
||||
await Fs.WriteFile($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members/{id};{DOMAIN}", Array.Empty<byte>());
|
||||
await Fs.WriteFile($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/members/{id2};{domain}", Array.Empty<byte>());
|
||||
await Fs.WriteFile($"{ROOMS_DIR}/dms/{DOMAIN}/{dmId}/messages/last", Encoding.UTF8.GetBytes($"0"));
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue