summaryrefslogtreecommitdiff
path: root/include/modules
diff options
context:
space:
mode:
authorB00mX0r <b00mx0r@aureus.pw>2017-12-19 09:29:50 -0800
committerB00mX0r <b00mx0r@aureus.pw>2017-12-21 09:21:53 -0800
commit197c3445b04f16dd563426fb606c848f20f77c96 (patch)
tree76b3c400dd44945f212a98a0da73bae7d1809f73 /include/modules
parenta98ae6f6716597572a2797b00f4e3a4a5d7e52d7 (diff)
Add SHUN as a /filter action
This resolves #483
Diffstat (limited to 'include/modules')
-rw-r--r--include/modules/shun.h70
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;
+};