2023-08-21 10:58:17 -04:00
|
|
|
using System;
|
2024-03-20 23:18:34 -04:00
|
|
|
using System.Collections.Generic;
|
2023-08-21 10:58:17 -04:00
|
|
|
using System.Text.Json;
|
2024-03-20 23:18:34 -04:00
|
|
|
using JacobTechEncryption;
|
|
|
|
using JacobTechEncryption.Enums;
|
2023-08-21 10:58:17 -04:00
|
|
|
using Luski.net.Enums;
|
|
|
|
using Luski.net.JsonTypes.BaseTypes;
|
|
|
|
using Luski.net.JsonTypes.WSS;
|
2024-03-20 23:18:34 -04:00
|
|
|
using Luski.net.Structures;
|
|
|
|
using Luski.net.Structures.Public;
|
|
|
|
using Luski.Shared.PublicServers.V1.ServerToClient.HTTP;
|
2023-08-21 10:58:17 -04:00
|
|
|
using WebSocketSharp;
|
2024-03-20 23:18:34 -04:00
|
|
|
using File = System.IO.File;
|
|
|
|
using DataType = Luski.Shared.PublicServers.V1.Enums.DataType;
|
2023-08-21 10:58:17 -04:00
|
|
|
|
|
|
|
namespace Luski.net;
|
|
|
|
|
|
|
|
public partial class PublicServer
|
|
|
|
{
|
|
|
|
private void DataFromServer(object? sender, MessageEventArgs e)
|
|
|
|
{
|
|
|
|
if (e.IsPing) return;
|
2024-03-20 23:18:34 -04:00
|
|
|
if (PrintServerMessages)
|
|
|
|
{
|
|
|
|
Console.WriteLine(e.Data);
|
|
|
|
}
|
2023-08-21 10:58:17 -04:00
|
|
|
try
|
|
|
|
{
|
|
|
|
BetterIncomingWSS? data = JsonSerializer.Deserialize(e.Data, BetterIncomingWSSContext.Default.BetterIncomingWSS);
|
|
|
|
switch (data?.Type)
|
|
|
|
{
|
|
|
|
case DataType.Token:
|
|
|
|
WSSLogin n = JsonSerializer.Deserialize(e.Data, WSSLoginContext.Default.WSSLogin)!;
|
|
|
|
File.WriteAllText(Storage.GetStorageDirectory(StorageDirectory.StorageInfo) + "token",
|
|
|
|
n.SessionToken);
|
|
|
|
Token = n.Token;
|
|
|
|
break;
|
2024-03-20 23:18:34 -04:00
|
|
|
case DataType.MessageCreate:
|
|
|
|
MessageSTC smsg = JsonSerializer.Deserialize(data.Data!.ToString()!, MessageSTCContext.Default.MessageSTC)!;
|
|
|
|
List<long> fl = new();
|
|
|
|
foreach (var VARIABLE in smsg.Files)
|
|
|
|
{
|
|
|
|
fl.Add(VARIABLE.ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (smsg.EncryptionKey == 0)
|
|
|
|
{
|
|
|
|
if (string.IsNullOrEmpty(smsg.Context))
|
|
|
|
{
|
|
|
|
smsg.Context = "";
|
|
|
|
}
|
|
|
|
else smsg.Context = Encryption.Generic.Encoders[(int)smsg.EncoderType]
|
|
|
|
.GetString(Convert.FromBase64String(smsg.Context));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
LocalKeyInfo key = EncryptionHandler.GetKey(smsg.EncryptionKey);
|
|
|
|
switch (key.EncryptionType)
|
|
|
|
{
|
|
|
|
case EncryptionType.RSA:
|
|
|
|
smsg.Context = Encryption.RSA.Decrypt(Convert.FromBase64String(smsg.Context), key.Key,
|
|
|
|
smsg.EncoderType);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
smsg.Context = Encryption.Generic.Encoders[(int)smsg.EncoderType]
|
|
|
|
.GetString(Convert.FromBase64String(smsg.Context));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SocketMessage sm = new()
|
|
|
|
{
|
|
|
|
ID = smsg.ID,
|
|
|
|
AuthorID = smsg.AuthorID,
|
|
|
|
ChannelID = smsg.ChannelID,
|
|
|
|
Context = smsg.Context,
|
|
|
|
EncoderType = smsg.EncoderType,
|
|
|
|
EncryptionKey = smsg.EncryptionKey,
|
|
|
|
FileIDs = fl.ToArray(),
|
|
|
|
Server = this,
|
|
|
|
IsProfile = smsg.IsProfile
|
|
|
|
};
|
|
|
|
if (MessageReceived is not null) MessageReceived.Invoke(sm);
|
|
|
|
break;
|
2023-08-21 10:58:17 -04:00
|
|
|
default:
|
|
|
|
Console.WriteLine("Unknown");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception exception)
|
|
|
|
{
|
|
|
|
Exception(exception);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|