+class UserCertificateAPIImpl : public UserCertificateAPIBase
+{
+ public:
+ LocalIntExt nosslext;
+ SSLCertExt sslext;
+
+ UserCertificateAPIImpl(Module* mod)
+ : UserCertificateAPIBase(mod)
+ , nosslext("no_ssl_cert", ExtensionItem::EXT_USER, mod)
+ , sslext(mod)
+ {
+ }
+
+ ssl_cert* GetCertificate(User* user) CXX11_OVERRIDE
+ {
+ ssl_cert* cert = sslext.get(user);
+ if (cert)
+ return cert;
+
+ LocalUser* luser = IS_LOCAL(user);
+ if (!luser || nosslext.get(luser))
+ return NULL;
+
+ cert = SSLClientCert::GetCertificate(&luser->eh);
+ if (!cert)
+ return NULL;
+
+ SetCertificate(user, cert);
+ return cert;
+ }
+
+ void SetCertificate(User* user, ssl_cert* cert) CXX11_OVERRIDE
+ {
+ ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Setting SSL certificate for %s: %s",
+ user->GetFullHost().c_str(), cert->GetMetaLine().c_str());
+ sslext.set(user, cert);
+ }
+};
+