1
0
mirror of https://github.com/anope/anope.git synced 2026-06-28 03:56:38 +02:00

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
This commit is contained in:
miwob
2022-09-26 15:05:30 +02:00
committed by Sadie Powell
parent 32679a107a
commit 211bd80061
+78 -24
View File
@@ -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> &params) 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> &params) 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> &params) 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();