diff options
author | miwob <wobst.michael@web.de> | 2022-09-26 15:05:30 +0200 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2022-09-29 13:05:05 +0100 |
commit | 211bd80061fd02004c7c2ef258f6404ff708bee6 (patch) | |
tree | da43486795e6cf4340e5902601f31d89a2ffcdd5 /modules | |
parent | 32679a107a2e893dfd32ad963a44b6ca576a91cb (diff) |
Update ircd-hybrid protocol module
* Add METADATA command handler which currently only allows to modify a client's certificate fingerprint
* Minor reformatting and style inconsistency fixes
Diffstat (limited to 'modules')
-rw-r--r-- | modules/protocol/hybrid.cpp | 102 |
1 files changed, 78 insertions, 24 deletions
diff --git a/modules/protocol/hybrid.cpp b/modules/protocol/hybrid.cpp index 05e589a08..232c9e9e6 100644 --- a/modules/protocol/hybrid.cpp +++ b/modules/protocol/hybrid.cpp @@ -372,6 +372,21 @@ struct IRCDMessageCapab : Message::Capab } }; +struct IRCDMessageCertFP: IRCDMessage +{ + IRCDMessageCertFP(Module *creator) : IRCDMessage(creator, "CERTFP", 1) { SetFlag(IRCDMESSAGE_REQUIRE_USER); } + + /* 0 */ + /* :0MCAAAAAB CERTFP 4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */ + void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) anope_override + { + User *u = source.GetUser(); + + u->fingerprint = params[0]; + FOREACH_MOD(OnFingerprint, (u)); + } +}; + struct IRCDMessageEOB : IRCDMessage { IRCDMessageEOB(Module *creator) : IRCDMessage(creator, "EOB", 0) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); } @@ -398,6 +413,32 @@ struct IRCDMessageJoin : Message::Join } }; +struct IRCDMessageMetadata : IRCDMessage +{ + IRCDMessageMetadata(Module *creator) : IRCDMessage(creator, "METADATA", 3) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); } + + /* 0 1 2 3 */ + /* :0MC METADATA client 0MCAAAAAB certfp :4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */ + void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) anope_override + { + if (params[0].equals_cs("client")) + { + User *u = User::Find(params[1]); + if (!u) + { + Log(LOG_DEBUG) << "METADATA for nonexistent user " << params[1]; + return; + } + + if (params[2].equals_cs("certfp")) + { + u->fingerprint = params[3]; + FOREACH_MOD(OnFingerprint, (u)); + } + } + } +}; + struct IRCDMessageMLock : IRCDMessage { IRCDMessageMLock(Module *creator) : IRCDMessage(creator, "MLOCK", 4) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); } @@ -629,21 +670,6 @@ struct IRCDMessageUID : IRCDMessage } }; -struct IRCDMessageCertFP: IRCDMessage -{ - IRCDMessageCertFP(Module *creator) : IRCDMessage(creator, "CERTFP", 1) { SetFlag(IRCDMESSAGE_REQUIRE_USER); } - - /* 0 */ - /* :0MCAAAAAB CERTFP 4C62287BA6776A89CD4F8FF10A62FFB35E79319F51AF6C62C674984974FCCB1D */ - void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) anope_override - { - User *u = source.GetUser(); - - u->fingerprint = params[0]; - FOREACH_MOD(OnFingerprint, (u)); - } -}; - class ProtoHybrid : public Module { HybridProto ircd_proto; @@ -671,8 +697,10 @@ class ProtoHybrid : public Module /* Our message handlers */ IRCDMessageBMask message_bmask; IRCDMessageCapab message_capab; + IRCDMessageCertFP message_certfp; IRCDMessageEOB message_eob; IRCDMessageJoin message_join; + IRCDMessageMetadata message_metadata; IRCDMessageMLock message_mlock; IRCDMessageNick message_nick; IRCDMessagePass message_pass; @@ -684,7 +712,6 @@ class ProtoHybrid : public Module IRCDMessageTBurst message_tburst; IRCDMessageTMode message_tmode; IRCDMessageUID message_uid; - IRCDMessageCertFP message_certfp; bool use_server_side_mlock; @@ -749,14 +776,41 @@ class ProtoHybrid : public Module public: ProtoHybrid(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL | VENDOR), ircd_proto(this), - message_away(this), message_error(this), message_invite(this), message_kick(this), - message_kill(this), message_mode(this), message_motd(this), message_notice(this), message_part(this), - message_ping(this), message_privmsg(this), message_quit(this), message_squit(this), message_stats(this), - message_time(this), message_topic(this), message_version(this), message_whois(this), - message_bmask(this), message_capab(this), message_eob(this), message_join(this), message_mlock(this), - message_nick(this), message_pass(this), message_pong(this), message_server(this), message_sid(this), - message_sjoin(this), message_svsmode(this), message_tburst(this), message_tmode(this), message_uid(this), - message_certfp(this) + message_away(this), + message_error(this), + message_invite(this), + message_kick(this), + message_kill(this), + message_mode(this), + message_motd(this), + message_notice(this), + message_part(this), + message_ping(this), + message_privmsg(this), + message_quit(this), + message_squit(this), + message_stats(this), + message_time(this), + message_topic(this), + message_version(this), + message_whois(this), + message_bmask(this), + message_capab(this), + message_certfp(this), + message_eob(this), + message_join(this), + message_metadata(this), + message_mlock(this), + message_nick(this), + message_pass(this), + message_pong(this), + message_server(this), + message_sid(this), + message_sjoin(this), + message_svsmode(this), + message_tburst(this), + message_tmode(this), + message_uid(this) { if (Config->GetModule(this)) this->AddModes(); |