コード例 #1
0
        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);
        }
コード例 #2
0
        // 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);
        }