+class CommandSASL : public Command
+{
+ public:
+ SimpleExtItem<SaslAuthenticator>& authExt;
+ CommandSASL(Module* Creator, SimpleExtItem<SaslAuthenticator>& ext) : Command(Creator, "SASL", 2), authExt(ext)
+ {
+ this->flags_needed = FLAG_SERVERONLY; // should not be called by users
+ }
+
+ CmdResult Handle(const std::vector<std::string>& parameters, User *user)
+ {
+ User* target = ServerInstance->FindNick(parameters[1]);
+ if (!target)
+ {
+ ServerInstance->Logs->Log("m_sasl", DEBUG,"User not found in sasl ENCAP event: %s", parameters[1].c_str());
+ return CMD_FAILURE;
+ }
+
+ SaslAuthenticator *sasl = authExt.get(target);
+ if (!sasl)
+ return CMD_FAILURE;
+
+ SaslState state = sasl->ProcessInboundMessage(parameters);
+ if (state == SASL_DONE)
+ {
+ sasl->AnnounceState();
+ authExt.unset(target);
+ }
+ return CMD_SUCCESS;
+ }
+
+ RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+ {
+ return ROUTE_BROADCAST;
+ }
+};