453 lines
8.7 KiB
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()
|
|
});
|
|
}
|
|
}
|