diff options
author | B00mX0r <b00mx0r@aureus.pw> | 2017-12-19 09:29:50 -0800 |
---|---|---|
committer | B00mX0r <b00mx0r@aureus.pw> | 2017-12-21 09:21:53 -0800 |
commit | 197c3445b04f16dd563426fb606c848f20f77c96 (patch) | |
tree | 76b3c400dd44945f212a98a0da73bae7d1809f73 /include/modules | |
parent | a98ae6f6716597572a2797b00f4e3a4a5d7e52d7 (diff) |
Add SHUN as a /filter action
This resolves #483
Diffstat (limited to 'include/modules')
-rw-r--r-- | include/modules/shun.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/include/modules/shun.h b/include/modules/shun.h new file mode 100644 index 000000000..f2bc4eea5 --- /dev/null +++ b/include/modules/shun.h @@ -0,0 +1,70 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2017 Dylan Frank <b00mx0r@aureus.pw> + * + * 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 "xline.h" + +/** Shun class + */ +class CoreExport Shun : public XLine +{ + public: + /** Create a Shun. + * @param s_time The set time + * @param d The duration of the xline + * @param src The sender of the xline + * @param re The reason of the xline + * @param shunmask Mask to match + */ + Shun(time_t s_time, long d, const std::string& src, const std::string& re, const std::string& shunmask) + : XLine(s_time, d, src, re, "SHUN") + , matchtext(shunmask) + { + } + + bool Matches(User* u) CXX11_OVERRIDE + { + LocalUser* lu = IS_LOCAL(u); + if (lu && lu->exempt) + return false; + + if (InspIRCd::Match(u->GetFullHost(), matchtext) || InspIRCd::Match(u->GetFullRealHost(), matchtext) || InspIRCd::Match(u->nick+"!"+u->ident+"@"+u->GetIPString(), matchtext)) + return true; + + if (InspIRCd::MatchCIDR(u->GetIPString(), matchtext, ascii_case_insensitive_map)) + return true; + + return false; + } + + bool Matches(const std::string& str) CXX11_OVERRIDE + { + return (matchtext == str); + } + + const std::string& Displayable() CXX11_OVERRIDE + { + return matchtext; + } + + private: + /** Matching mask **/ + std::string matchtext; +}; |