+ public:
+ SSLModeUser(Module* Creator, UserCertificateAPI& api)
+ : ModeHandler(Creator, "sslqueries", 'z', PARAM_NONE, MODETYPE_USER)
+ , API(api)
+ {
+ if (!ServerInstance->Config->ConfValue("sslmodes")->getBool("enableumode"))
+ DisableAutoRegister();
+ }
+
+ ModeAction OnModeChange(User* user, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE
+ {
+ if (adding == dest->IsModeSet(this))
+ return MODEACTION_DENY;
+
+ if (adding && IS_LOCAL(user) && (!API || !API->GetCertificate(user)))
+ return MODEACTION_DENY;
+
+ dest->SetMode(this, adding);
+ return MODEACTION_ALLOW;
+ }
+};
+
+class ModuleSSLModes
+ : public Module
+ , public CTCTags::EventListener
+{
+ private:
+ UserCertificateAPI api;