Luski.Net/Luski.net/PublicServer.Incoming.cs

94 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text.Json;
using JacobTechEncryption;
using JacobTechEncryption.Enums;
using Luski.net.Enums;
using Luski.net.JsonTypes.BaseTypes;
using Luski.net.JsonTypes.WSS;
using Luski.net.Structures;
using Luski.net.Structures.Public;
using Luski.Shared.PublicServers.V1.ServerToClient.HTTP;
using WebSocketSharp;
using File = System.IO.File;
using DataType = Luski.Shared.PublicServers.V1.Enums.DataType;
namespace Luski.net;
public partial class PublicServer
{
private void DataFromServer(object? sender, MessageEventArgs e)
{
if (e.IsPing) return;
if (PrintServerMessages)
{
Console.WriteLine(e.Data);
}
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;
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;
default:
Console.WriteLine("Unknown");
break;
}
}
catch (Exception exception)
{
Exception(exception);
}
}
}