diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/configreader.h | 6 | ||||
-rw-r--r-- | include/token_list.h | 65 |
2 files changed, 68 insertions, 3 deletions
diff --git a/include/configreader.h b/include/configreader.h index 9fcb9c6a3..fc8c99d62 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -31,6 +31,7 @@ #include "modules.h" #include "socketengine.h" #include "socket.h" +#include "token_list.h" /** Structure representing a single \<tag> in config */ class CoreExport ConfigTag : public refcountbase @@ -165,9 +166,8 @@ struct CommandLineConf class CoreExport OperInfo : public refcountbase { public: - typedef insp::flat_set<std::string> PrivSet; - PrivSet AllowedOperCommands; - PrivSet AllowedPrivs; + TokenList AllowedOperCommands; + TokenList AllowedPrivs; /** Allowed user modes from oper classes. */ std::bitset<64> AllowedUserModes; diff --git a/include/token_list.h b/include/token_list.h new file mode 100644 index 000000000..ffa3b89e6 --- /dev/null +++ b/include/token_list.h @@ -0,0 +1,65 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2017 Peter Powell <petpow@saberuk.com> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#pragma once + +#include "compat.h" + +class CoreExport TokenList +{ + private: + /** Whether this list includes all tokens by default. */ + bool permissive; + + /** Either the tokens to exclude if in permissive mode or the tokens to include if in strict mode. */ + insp::flat_set<std::string, irc::insensitive_swo> tokens; + + public: + /** Adds a space-delimited list of tokens to the token list. + * @param tokenlist The list of space-delimited tokens to add. + */ + void AddList(const std::string& tokenlist); + + /** Adds a single token to the token list. + * @param token The token to add. + */ + void Add(const std::string& token); + + /** Removes all tokens from the token list. */ + void Clear(); + + /** Determines whether the specified token exists in the token list. + * @param token The token to search for. + */ + bool Contains(const std::string& token) const; + + /** Removes the specified token from the token list. + * @param token The token to remove. + */ + void Remove(const std::string& token); + + /** Retrieves a string which represents the contents of this token list. */ + std::string ToString() const; + + /** Determines whether the specified token list contains the same tokens as this instance. + * @param other The tokenlist to compare against. + * @return True if the token lists are equal; otherwise, false. + */ + bool operator==(const TokenList& other) const; +}; |