]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add support for the IRCv3 account-tag specification.
authorPeter Powell <petpow@saberuk.com>
Mon, 13 Aug 2018 20:35:28 +0000 (21:35 +0100)
committerPeter Powell <petpow@saberuk.com>
Mon, 13 Aug 2018 20:51:12 +0000 (21:51 +0100)
Co-authored-by: Attila Molnar <attilamolnar@hush.com>
docs/conf/modules.conf.example
src/modules/m_ircv3_accounttag.cpp [new file with mode: 0644]

index 6c3357d2938db14477a9880ff27693a732fa74d7..50a43021a19fb304caf80c9622e1b8c566e287dd 100644 (file)
 # and host cycling.
 #<ircv3 accountnotify="on" awaynotify="on" extendedjoin="on">
 
+#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
+# IRCv3 account-tag module. Adds the 'account' tag which contains the
+# services account name of the message sender.
+#<module name="ircv3_accounttag">
+
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # IRCv3 cap-notify module: Provides the cap-notify IRCv3.2 extension.
 # Required for IRCv3.2 conformance.
diff --git a/src/modules/m_ircv3_accounttag.cpp b/src/modules/m_ircv3_accounttag.cpp
new file mode 100644 (file)
index 0000000..45fcf80
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ *   Copyright (C) 2016 Attila Molnar <attilamolnar@hush.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/>.
+ */
+
+
+#include "inspircd.h"
+#include "modules/ircv3.h"
+#include "modules/account.h"
+
+class AccountTag : public IRCv3::CapTag<AccountTag>
+{
+ public:
+       const std::string* GetValue(const ClientProtocol::Message& msg) const
+       {
+               User* const user = msg.GetSourceUser();
+               if (!user)
+                       return NULL;
+
+               AccountExtItem* const accextitem = GetAccountExtItem();
+               if (!accextitem)
+                       return NULL;
+
+               return accextitem->get(user);
+       }
+
+       AccountTag(Module* mod)
+               : IRCv3::CapTag<AccountTag>(mod, "account-tag", "account")
+       {
+       }
+};
+
+class ModuleIRCv3AccountTag : public Module
+{
+       AccountTag tag;
+
+ public:
+       ModuleIRCv3AccountTag()
+               : tag(this)
+       {
+       }
+
+       Version GetVersion() CXX11_OVERRIDE
+       {
+               return Version("Provides the account-tag IRCv3 extension", VF_VENDOR);
+       }
+};
+
+MODULE_INIT(ModuleIRCv3AccountTag)