Begin to add a new ACL system

This commit is contained in:
zontreck 2024-07-02 16:01:06 -07:00
parent 03fef9863f
commit f7c71230f0
9 changed files with 293 additions and 44 deletions

View file

@ -15,6 +15,7 @@ import 'package:libac_dart/utils/uuid/NbtUUID.dart';
import 'package:libac_dart/utils/uuid/UUID.dart';
import 'package:servermanager/statemachine.dart';
import 'package:servermanager/structs/SessionData.dart';
import 'package:servermanager/structs/credentials.dart';
import 'package:servermanager/structs/discordHookHelper.dart';
import 'package:servermanager/structs/settings.dart';
@ -104,17 +105,40 @@ class C2SLoginPacket implements IPacket {
// Attempt to log in.
Settings settings = Settings();
if (settings.serverLoginCreds.username == username &&
Hashing.sha256Hash(settings.serverLoginCreds.password) == password) {
if (settings.superuser!.login(username, password)) {
settings.remoteLoginToken = UUID.generate(4);
loginReply.valid = true;
loginReply.token = settings.remoteLoginToken;
settings.superuser!.sendDiscordActionLog("Login Success");
settings.loggedInUser = settings.superuser;
} else {
//print(
// "Login failure\n${settings.serverLoginCreds.username}:${username}\n${Hashing.sha256Hash(settings.serverLoginCreds.password)}:${password}");
loginReply.valid = false;
}
if (!loginReply.valid && settings.superuser!.name != username) {
// Check for a lower level user
if (settings.inst!.admins.any((T) => T.name == username)) {
User theUser =
settings.inst!.admins.firstWhere((T) => T.name == username);
if (theUser.login(username, password)) {
settings.remoteLoginToken = UUID.generate(4);
loginReply.valid = true;
loginReply.token = settings.remoteLoginToken;
theUser.sendDiscordActionLog("Login Success");
settings.loggedInUser = theUser;
} else {
loginReply.valid = false;
theUser.sendDiscordActionLog("Login Failed");
}
}
}
response.contents = loginReply.encodeTag().asCompoundTag();
return PacketResponse(replyDataTag: response.encodeTag().asCompoundTag());
}
@ -414,6 +438,9 @@ class C2SRequestCreateBackup implements IPacket {
PathHelper pth = PathHelper(pth: settings.getWorldSnapshotFolder())
.resolve(destinationFile);
world.copy(pth.build());
settings.loggedInUser!
.sendDiscordActionLog("Created a new backup named ${fileName}");
}
return PacketResponse.nil;
@ -473,7 +500,8 @@ class C2SRequestSnapshotList implements IPacket {
// add file name without db extension to the list
String trimmedFileName = str.trim().substring(0, str.trim().length - 3);
strippedFiles.add(trimmedFileName);
strippedFiles
.add(trimmedFileName.substring(trimmedFileName.lastIndexOf("/")));
} else {
strippedFiles.add(str);
}
@ -606,6 +634,9 @@ class C2SRequestSnapshotDeletion implements IPacket {
.resolve(correctedName);
ph.deleteFile();
settings.loggedInUser!.sendDiscordActionLog(
"Requested snapshot deletion of backup named: ${snapshotName}");
return PacketResponse.nil;
}
@ -658,12 +689,17 @@ class C2SRequestWorldRestore implements IPacket {
@override
Future<PacketResponse> handleServerPacket() async {
Settings settings = Settings();
SessionData.isWorldRestore = true;
SessionData.snapshotToRestore = snapshot;
SessionData.shutdownMessage = "A backup restore has been requested";
SessionData.timer.apply(30);
SessionData.CURRENT_INTERVAL = WarnIntervals.NONE;
settings.loggedInUser!.sendDiscordActionLog(
"Requested world restore, and initiated a immediate restart. World restored: ${snapshot}");
return PacketResponse.nil;
}