From 197c3445b04f16dd563426fb606c848f20f77c96 Mon Sep 17 00:00:00 2001 From: B00mX0r Date: Tue, 19 Dec 2017 09:29:50 -0800 Subject: Add SHUN as a /filter action This resolves #483 --- include/modules/shun.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 include/modules/shun.h (limited to 'include/modules/shun.h') 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 + * + * 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 . + */ + + +#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; +}; -- cgit v1.2.3