public static bool ChMod(GameClient client, string[] command) { if (client.activeSession == null || client.activeSession.connectedNode == null) { client.Send(NetUtil.PacketType.MESSG, "You are not connected to a node."); return(true); } if (command.Length < 2) { client.Send(NetUtil.PacketType.MESSG, "Usage : chmod [file] [readLevel] [writeLevel]"); return(true); } var cmdArgs = command[1].Split(' '); if (cmdArgs.Length != 3) { client.Send(NetUtil.PacketType.MESSG, "Usage : chmod [file] [readLevel] [writeLevel]"); return(true); } Group writeLevel = PermissionHelper.GetGroupFromString(cmdArgs[2]); Group readLevel = PermissionHelper.GetGroupFromString(cmdArgs[1]); var activePriv = client.activeSession.group; if (writeLevel == Group.INVALID || readLevel == Group.INVALID) { client.Send(NetUtil.PacketType.MESSG, "Input valid writeLevel or readLevel"); return(true); } if (writeLevel < activePriv || readLevel < activePriv) { client.Send(NetUtil.PacketType.MESSG, "You cannot change to a higher permission than your current level."); return(true); } var activeDirectory = client.activeSession.activeDirectory; foreach (var fileC in activeDirectory.children) { if (fileC.Name == cmdArgs[0]) { if (!fileC.HasWritePermission(client.activeSession.group)) { client.Send(NetUtil.PacketType.MESSG, "Permission denied."); return(true); } client.Send(NetUtil.PacketType.MESSG, "File " + cmdArgs[0] + " permissions changed."); fileC.WritePriv = writeLevel; fileC.ReadPriv = readLevel; return(true); } } client.Send(NetUtil.PacketType.MESSG, "File " + cmdArgs[0] + " was not found."); return(true); }
// TODO no prints // TODO Log Errors to log file? public Credentials Login(GameClient client, string username, string password) { var configFolder = fileSystem.rootFile.GetFile("etc"); if (configFolder == null || !configFolder.IsFolder()) { client.Send(NetUtil.PacketType.MESSG, "No config folder was found!"); return(null); } File usersFile = configFolder.GetFile("passwd"); if (usersFile == null) { client.Send(NetUtil.PacketType.MESSG, "No passwd file was found!"); return(null); } File groupFile = configFolder.GetFile("group"); if (usersFile == null) { client.Send(NetUtil.PacketType.MESSG, "No group file was found!"); return(null); } string[] accounts = usersFile.Content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string[] groups = groupFile.Content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (string account in accounts) { string[] accountData = account.Split(':'); string accountUsername = accountData[0]; string accountPassword = accountData[1]; string accountGroupId = accountData[3]; if (accountUsername == username && accountPassword == password) { Group primaryGroup = PermissionHelper.GetGroupFromString(accountGroupId); if (primaryGroup == Group.INVALID) { client.Send(NetUtil.PacketType.MESSG, $"Can't login as {username}, '{accountGroupId}' is not a valid accountGroupId"); break; } List <Group> loginGroups = new List <Group>(); foreach (string group in groups) { string[] groupData = group.Split(':'); string groupName = groupData[0]; string groupId = groupData[2]; string[] groupUsers = groupData[3].Split(','); if (groupUsers.Contains(username) || accountGroupId.Equals(groupId)) { Group loginGroup = PermissionHelper.GetGroupFromString(groupId); if (loginGroup != Group.INVALID) { loginGroups.Add(loginGroup); } else { client.Send(NetUtil.PacketType.MESSG, $"Can't login as {username} {groupName} is not a valid group"); break; } } } return(new Credentials(GetUserId(username), primaryGroup, loginGroups)); } } return(null); }