Example #1
0
 public void RemovePermission(ClientPermissions permission)
 {
     if (this.Permissions.HasFlag(permission))
     {
         this.Permissions &= ~permission;
     }
 }
            public SavedClientPermission(string name, string ip, ClientPermissions permissions)
            {
                this.Name = name;
                this.IP   = ip;

                this.Permissions = permissions;
            }
 public SavedClientPermission(string name, IPAddress ip, ClientPermissions permissions, List <DebugConsole.Command> permittedCommands)
 {
     this.Name              = name;
     this.IP                = ip.IsIPv4MappedToIPv6 ? ip.MapToIPv4().ToString() : ip.ToString();
     this.Permissions       = permissions;
     this.PermittedCommands = permittedCommands;
 }
Example #4
0
 public SavedClientPermission(string name, string endpoint, ClientPermissions permissions, List <DebugConsole.Command> permittedCommands)
 {
     this.Name              = name;
     this.EndPoint          = endpoint;
     this.Permissions       = permissions;
     this.PermittedCommands = permittedCommands;
 }
Example #5
0
        public static void ReadPermissions(IReadMessage inc, out ClientPermissions permissions, out List <DebugConsole.Command> permittedCommands)
        {
            UInt16 permissionsInt = inc.ReadUInt16();

            permissions       = ClientPermissions.None;
            permittedCommands = new List <DebugConsole.Command>();
            try
            {
                permissions = (ClientPermissions)permissionsInt;
            }
            catch (InvalidCastException)
            {
                return;
            }
            if (permissions.HasFlag(ClientPermissions.ConsoleCommands))
            {
                UInt16 commandCount = inc.ReadUInt16();
                for (int i = 0; i < commandCount; i++)
                {
                    string commandName    = inc.ReadString();
                    var    consoleCommand = DebugConsole.Commands.Find(c => c.names.Contains(commandName));
                    if (consoleCommand != null)
                    {
                        permittedCommands.Add(consoleCommand);
                    }
                }
            }
        }
Example #6
0
 public void GivePermission(ClientPermissions permission)
 {
     if (!this.Permissions.HasFlag(permission))
     {
         this.Permissions |= permission;
     }
 }
            public SavedClientPermission(string name, string ip, ClientPermissions permissions, List <DebugConsole.Command> permittedCommands)
            {
                this.Name = name;
                this.IP   = ip;

                this.Permissions       = permissions;
                this.PermittedCommands = permittedCommands;
            }
Example #8
0
            public SavedClientPermission(string name, ulong steamID, ClientPermissions permissions, List <DebugConsole.Command> permittedCommands)
            {
                this.Name    = name;
                this.SteamID = steamID;

                this.Permissions       = permissions;
                this.PermittedCommands = permittedCommands;
            }
Example #9
0
        public void ReadPermissions(IReadMessage inc)
        {
            ClientPermissions           permissions       = ClientPermissions.None;
            List <DebugConsole.Command> permittedCommands = new List <DebugConsole.Command>();

            ReadPermissions(inc, out permissions, out permittedCommands);
            SetPermissions(permissions, permittedCommands);
        }
Example #10
0
 public void SetPermissions(ClientPermissions permissions, List <DebugConsole.Command> permittedConsoleCommands)
 {
     if (GameMain.Client == null)
     {
         return;
     }
     Permissions = permissions;
     PermittedConsoleCommands = new List <DebugConsole.Command>(permittedConsoleCommands);
 }
Example #11
0
        public bool HasPermission(ClientPermissions permission)
        {
            if (GameMain.Client == null)
            {
                return(false);
            }

            return(Permissions.HasFlag(permission));
        }
Example #12
0
 public void RemovePermission(ClientPermissions permission)
 {
     if (GameMain.Client == null || !GameMain.Client.HasPermission(ClientPermissions.ManagePermissions))
     {
         return;
     }
     if (Permissions.HasFlag(permission))
     {
         Permissions &= ~permission;
     }
 }
Example #13
0
        public void SetPermissions(ClientPermissions permissions, List <string> permittedConsoleCommands)
        {
            List <DebugConsole.Command> permittedCommands = new List <DebugConsole.Command>();

            foreach (string commandName in permittedConsoleCommands)
            {
                var consoleCommand = DebugConsole.Commands.Find(c => c.names.Contains(commandName));
                if (consoleCommand != null)
                {
                    permittedCommands.Add(consoleCommand);
                }
            }
            SetPermissions(permissions, permittedCommands);
        }
Example #14
0
        /// <summary>
        /// Method for loading old .txt client permission files to provide backwards compatibility
        /// </summary>
        private void LoadClientPermissionsOld(string file)
        {
            if (!File.Exists(file))
            {
                return;
            }

            string[] lines;
            try
            {
                lines = File.ReadAllLines(file);
            }
            catch (Exception e)
            {
                DebugConsole.ThrowError("Failed to open client permission file " + ClientPermissionsFile, e);
                return;
            }

            ClientPermissions.Clear();

            foreach (string line in lines)
            {
                string[] separatedLine = line.Split('|');
                if (separatedLine.Length < 3)
                {
                    continue;
                }

                string name = string.Join("|", separatedLine.Take(separatedLine.Length - 2));
                string ip   = separatedLine[separatedLine.Length - 2];

                ClientPermissions permissions = Networking.ClientPermissions.None;
                if (Enum.TryParse(separatedLine.Last(), out permissions))
                {
                    ClientPermissions.Add(new SavedClientPermission(name, ip, permissions, new List <DebugConsole.Command>()));
                }
            }
        }
Example #15
0
 public void SetPermissions(ClientPermissions permissions, List <DebugConsole.Command> permittedConsoleCommands)
 {
     this.Permissions = permissions;
     this.PermittedConsoleCommands = new List <DebugConsole.Command>(permittedConsoleCommands);
 }
Example #16
0
        public void LoadClientPermissions()
        {
            ClientPermissions.Clear();

            if (!File.Exists(ClientPermissionsFile))
            {
                if (File.Exists("Data/clientpermissions.txt"))
                {
                    LoadClientPermissionsOld("Data/clientpermissions.txt");
                }
                return;
            }

            XDocument doc = XMLExtensions.TryLoadXml(ClientPermissionsFile);

            foreach (XElement clientElement in doc.Root.Elements())
            {
                string clientName = clientElement.GetAttributeString("name", "");
                string clientIP   = clientElement.GetAttributeString("ip", "");
                string steamIdStr = clientElement.GetAttributeString("steamid", "");

                if (string.IsNullOrWhiteSpace(clientName))
                {
                    DebugConsole.ThrowError("Error in " + ClientPermissionsFile + " - all clients must have a name and an IP address.");
                    continue;
                }
                if (string.IsNullOrWhiteSpace(clientIP) && string.IsNullOrWhiteSpace(steamIdStr))
                {
                    DebugConsole.ThrowError("Error in " + ClientPermissionsFile + " - all clients must have an IP address or a Steam ID.");
                    continue;
                }

                ClientPermissions           permissions       = Networking.ClientPermissions.None;
                List <DebugConsole.Command> permittedCommands = new List <DebugConsole.Command>();

                if (clientElement.Attribute("preset") == null)
                {
                    string permissionsStr = clientElement.GetAttributeString("permissions", "");
                    if (permissionsStr.ToLowerInvariant() == "all")
                    {
                        foreach (ClientPermissions permission in Enum.GetValues(typeof(ClientPermissions)))
                        {
                            permissions |= permission;
                        }
                    }
                    else if (!Enum.TryParse(permissionsStr, out permissions))
                    {
                        DebugConsole.ThrowError("Error in " + ClientPermissionsFile + " - \"" + permissionsStr + "\" is not a valid client permission.");
                        continue;
                    }

                    if (permissions.HasFlag(Networking.ClientPermissions.ConsoleCommands))
                    {
                        foreach (XElement commandElement in clientElement.Elements())
                        {
                            if (commandElement.Name.ToString().ToLowerInvariant() != "command")
                            {
                                continue;
                            }

                            string commandName           = commandElement.GetAttributeString("name", "");
                            DebugConsole.Command command = DebugConsole.FindCommand(commandName);
                            if (command == null)
                            {
                                DebugConsole.ThrowError("Error in " + ClientPermissionsFile + " - \"" + commandName + "\" is not a valid console command.");
                                continue;
                            }

                            permittedCommands.Add(command);
                        }
                    }
                }
                else
                {
                    string           presetName = clientElement.GetAttributeString("preset", "");
                    PermissionPreset preset     = PermissionPreset.List.Find(p => p.Name == presetName);
                    if (preset == null)
                    {
                        DebugConsole.ThrowError("Failed to restore saved permissions to the client \"" + clientName + "\". Permission preset \"" + presetName + "\" not found.");
                        return;
                    }
                    else
                    {
                        permissions       = preset.Permissions;
                        permittedCommands = preset.PermittedCommands.ToList();
                    }
                }

                if (!string.IsNullOrEmpty(steamIdStr))
                {
                    if (ulong.TryParse(steamIdStr, out ulong steamID))
                    {
                        ClientPermissions.Add(new SavedClientPermission(clientName, steamID, permissions, permittedCommands));
                    }
                    else
                    {
                        DebugConsole.ThrowError("Error in " + ClientPermissionsFile + " - \"" + steamIdStr + "\" is not a valid Steam ID.");
                        continue;
                    }
                }
                else
                {
                    ClientPermissions.Add(new SavedClientPermission(clientName, clientIP, permissions, permittedCommands));
                }
            }
        }
Example #17
0
 public bool HasPermission(CommandPermissions permissions)
 {
     return(ClientPermissions.HasFlag(permissions));
 }
Example #18
0
 public bool MatchesPermissions(ClientPermissions permissions, List <DebugConsole.Command> permittedConsoleCommands)
 {
     return(permissions == this.Permissions && PermittedCommands.SequenceEqual(permittedConsoleCommands));
 }
Example #19
0
 public void SetPermissions(ClientPermissions permissions)
 {
     this.Permissions = permissions;
 }
Example #20
0
 public bool HasPermission(ClientPermissions permission)
 {
     return(this.Permissions.HasFlag(permission));
 }
Example #21
0
 public void RemovePermission(ClientPermissions permission)
 {
     this.Permissions &= ~permission;
 }