ZontreckWebsite/lib/Packets.dart

453 lines
8.7 KiB
Dart

import 'dart:convert';
import 'package:libac_dart/utils/Hashing.dart';
import 'package:libac_dart/utils/uuid/UUID.dart';
import 'package:zontreck/Constants.dart';
import 'package:zontreck/pages/OpenSim.dart';
import 'Settings.dart';
abstract class IPacket {
String encode();
HTTPMethod method();
String getType();
}
class S2CSimpleReplyPacket implements IPacket {
final bool done;
S2CSimpleReplyPacket({required this.done});
static S2CSimpleReplyPacket decode(String params) {
var map = json.decode(params);
return S2CSimpleReplyPacket(done: map['done'] as bool);
}
@override
String encode() {
return json.encode({"done": done});
}
@override
HTTPMethod method() {
return HTTPMethod.Get;
}
@override
String getType() {
return "S2CSimpleReply";
}
}
class C2SPerformSetupPacket implements IPacket {
final String PSK;
final String ClientPSK;
final String host;
final String user;
final String pass;
final String db;
C2SPerformSetupPacket(
{required this.PSK,
required this.ClientPSK,
required this.host,
required this.user,
required this.pass,
required this.db});
@override
String encode() {
return json.encode({
"psk": PSK,
"client": ClientPSK,
"host": host,
"user": user,
"pass": pass,
"db": db,
"type": getType()
});
}
static C2SPerformSetupPacket decode(String params) {
var map = json.decode(params);
return C2SPerformSetupPacket(
PSK: map['psk'] as String,
ClientPSK: map['client'] as String,
host: map['host'] as String,
user: map['user'] as String,
pass: map['pass'] as String,
db: map['db'] as String);
}
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SPerformSetup";
}
}
class S2CPongPacket implements IPacket {
final String PSK;
final bool authorized;
final int totalUsers;
S2CPongPacket(
{required this.PSK, required this.authorized, required this.totalUsers});
@override
String encode() {
return json.encode({
"psk": PSK,
"authorized": authorized,
"type": getType(),
"user_count": totalUsers
});
}
@override
String getType() {
return "S2CPong";
}
@override
HTTPMethod method() {
return HTTPMethod.Get;
}
static S2CPongPacket decode(String params) {
var map = json.decode(params);
return S2CPongPacket(
PSK: map['psk'] as String,
authorized: map['authorized'] as bool,
totalUsers: map['user_count'] as int);
}
}
class NullPacket implements IPacket {
NullPacket();
@override
String encode() {
return json.encode({});
}
static NullPacket decode(String params) {
return NullPacket();
}
@override
String getType() {
return "NullPacket";
}
@override
HTTPMethod method() {
return HTTPMethod.Get;
}
}
class C2SPingPacket implements IPacket {
final String client;
C2SPingPacket({required this.client});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SPing";
}
static C2SPingPacket decode(String params) {
var map = json.decode(params);
return C2SPingPacket(client: map['client'] as String);
}
@override
String encode() {
return json.encode({"client": client});
}
}
class C2SRegisterAccountPacket implements IPacket {
final String firstName;
final String lastName;
final String passwordHash;
final String email;
final int level;
final String title;
final String clientKey;
C2SRegisterAccountPacket({
required this.firstName,
required this.lastName,
required this.passwordHash,
required this.email,
required this.level,
required this.title,
required this.clientKey,
});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SRegisterAccount";
}
@override
String encode() {
return json.encode({
"first": firstName,
"last": lastName,
"password": passwordHash,
"email": email,
"type": getType(),
"level": level,
"title": title,
"clientKey": clientKey,
});
}
static C2SRegisterAccountPacket decode(String params) {
var map = json.decode(params);
return C2SRegisterAccountPacket(
firstName: map['first'] as String,
lastName: map['last'] as String,
passwordHash: map['password'] as String,
email: map['email'] as String,
level: map['level'] as int,
title: map['title'] as String,
clientKey: map['clientKey'] as String);
}
}
class C2SLoginPacket implements IPacket {
final String first;
final String last;
final String password;
C2SLoginPacket(
{required this.first, required this.last, required this.password});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SLogin";
}
@override
String encode() {
return json.encode({
"first": first,
"last": last,
"clientKey": Constants.CLIENTPSK,
"type": getType(),
"password": password
});
}
}
class S2CLoginResponsePacket implements IPacket {
final bool loggedIn;
final String reason;
final User user;
S2CLoginResponsePacket(
{required this.loggedIn, required this.reason, required this.user});
@override
HTTPMethod method() {
return HTTPMethod.Get;
}
@override
String getType() {
return "S2CLoginResponse";
}
@override
String encode() {
return json.encode({
"type": getType(),
"login": loggedIn,
"reason": reason,
"user": user.encode()
});
}
static S2CLoginResponsePacket decode(String params) {
var map = json.decode(params);
// Proceed now to constructing PODO
return S2CLoginResponsePacket(
loggedIn: map['login'] as bool,
reason: map['reason'] as String,
user: User.parseJson(map['user']));
}
}
class C2SSessionCheckPacket extends IPacket {
UUID sessionToken;
C2SSessionCheckPacket({required this.sessionToken});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SSessionCheck";
}
@override
String encode() {
return json.encode({
"token": Hashing.md5Hash(sessionToken.toString()),
"client": Constants.CLIENTPSK
});
}
}
class C2SLogoutPacket extends IPacket {
UUID ID;
C2SLogoutPacket({required this.ID});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SLogout";
}
@override
String encode() {
return json.encode({"type": getType(), "id": ID.toString()});
}
}
class S2CSessionCheckPacket extends IPacket {
String id;
final bool valid;
S2CSessionCheckPacket({required this.id, required this.valid});
@override
HTTPMethod method() {
return HTTPMethod.Get;
}
@override
String getType() {
return "S2CSessionCheck";
}
@override
String encode() {
return json.encode({"id": id, "type": getType()});
}
static S2CSessionCheckPacket decode(String params) {
var map = json.decode(params);
var id = map['id'] as String;
return S2CSessionCheckPacket(
id: id,
valid: id == Hashing.md5Hash(Settings().currentUser!.ID.toString()));
}
}
class C2SCreateFolderPacket extends IPacket {
UUID ParentFolder;
UUID ID;
String Name;
int Type;
UUID Owner;
String client;
C2SCreateFolderPacket(
{required this.ParentFolder,
required this.ID,
required this.Name,
required this.Type,
required this.Owner,
required this.client});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SCreateFolder";
}
@override
String encode() {
return json.encode({
"parent": ParentFolder.toString(),
"id": ID.toString(),
"name": Name,
"type": getType(),
"invType": Type,
"owner": Owner.toString(),
"client": Hashing.md5Hash(client)
});
}
@override
String encodeSafe() {
return json.encode({
"parent": ParentFolder.toString(),
"id": ID.toString(),
"name": Name,
"type": getType(),
"invType": Type,
"owner": Owner.toString(),
});
}
}
class C2SActivateUserPacket implements IPacket {
UUID ID;
C2SActivateUserPacket({required this.ID});
@override
HTTPMethod method() {
return HTTPMethod.Post;
}
@override
String getType() {
return "C2SActivateUser";
}
@override
String encode() {
return json.encode({
"id": ID.toString(),
"client": Hashing.md5Hash(Constants.CLIENTPSK),
"type": getType()
});
}
}