+ 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;
+ SSLMode sslm;
+ SSLModeUser sslquery;
+
+ public:
+ ModuleSSLModes()
+ : CTCTags::EventListener(this)
+ , api(this)
+ , sslm(this, api)
+ , sslquery(this, api)