X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_sslinfo.cpp;h=b24814fe3e7e621d643eeae2abdc49b4265cbd41;hb=9d75ba35743eb8f44a2d7beb8e08aa43c13f5d2e;hp=f0f4fc155d7eb9d2452851f46093170d08cdfe66;hpb=e586aaab7c4f7b03514c83451d73b73f55dc6998;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_sslinfo.cpp b/src/modules/m_sslinfo.cpp index f0f4fc155..b24814fe3 100644 --- a/src/modules/m_sslinfo.cpp +++ b/src/modules/m_sslinfo.cpp @@ -20,8 +20,6 @@ #include "inspircd.h" #include "modules/ssl.h" -/* $ModDesc: Provides SSL metadata, including /WHOIS information and /SSLINFO command */ - class SSLCertExt : public ExtensionItem { public: SSLCertExt(Module* parent) : ExtensionItem("ssl_cert", parent) {} @@ -121,31 +119,39 @@ class CommandSSLInfo : public Command } }; -class ModuleSSLInfo : public Module +class UserCertificateAPIImpl : public UserCertificateAPIBase { - CommandSSLInfo cmd; + SSLCertExt& ext; public: - ModuleSSLInfo() : cmd(this) + UserCertificateAPIImpl(Module* mod, SSLCertExt& certext) + : UserCertificateAPIBase(mod), ext(certext) { } - void init() - { - ServerInstance->Modules->AddService(cmd); + ssl_cert* GetCertificate(User* user) CXX11_OVERRIDE + { + return ext.get(user); + } +}; - ServerInstance->Modules->AddService(cmd.CertExt); +class ModuleSSLInfo : public Module +{ + CommandSSLInfo cmd; + UserCertificateAPIImpl APIImpl; - Implementation eventlist[] = { I_OnWhois, I_OnPreCommand, I_OnSetConnectClass, I_OnUserConnect, I_OnPostConnect }; - ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); + public: + ModuleSSLInfo() + : cmd(this), APIImpl(this, cmd.CertExt) + { } - Version GetVersion() + Version GetVersion() CXX11_OVERRIDE { return Version("SSL Certificate Utilities", VF_VENDOR); } - void OnWhois(User* source, User* dest) + void OnWhois(User* source, User* dest) CXX11_OVERRIDE { ssl_cert* cert = cmd.CertExt.get(dest); if (cert) @@ -158,7 +164,7 @@ class ModuleSSLInfo : public Module } } - ModResult OnPreCommand(std::string &command, std::vector ¶meters, LocalUser *user, bool validated, const std::string &original_line) + ModResult OnPreCommand(std::string &command, std::vector ¶meters, LocalUser *user, bool validated, const std::string &original_line) CXX11_OVERRIDE { if ((command == "OPER") && (validated)) { @@ -189,15 +195,14 @@ class ModuleSSLInfo : public Module return MOD_RES_PASSTHRU; } - void OnUserConnect(LocalUser* user) + void OnUserConnect(LocalUser* user) CXX11_OVERRIDE { - SocketCertificateRequest req(&user->eh, this); - if (!req.cert) - return; - cmd.CertExt.set(user, req.cert); + ssl_cert* cert = SSLClientCert::GetCertificate(&user->eh); + if (cert) + cmd.CertExt.set(user, cert); } - void OnPostConnect(User* user) + void OnPostConnect(User* user) CXX11_OVERRIDE { ssl_cert *cert = cmd.CertExt.get(user); if (!cert || cert->fingerprint.empty()) @@ -212,32 +217,23 @@ class ModuleSSLInfo : public Module } } - ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) + ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) CXX11_OVERRIDE { - SocketCertificateRequest req(&user->eh, this); + ssl_cert* cert = SSLClientCert::GetCertificate(&user->eh); bool ok = true; if (myclass->config->getString("requiressl") == "trusted") { - ok = (req.cert && req.cert->IsCAVerified()); + ok = (cert && cert->IsCAVerified()); } else if (myclass->config->getBool("requiressl")) { - ok = (req.cert != NULL); + ok = (cert != NULL); } if (!ok) return MOD_RES_DENY; return MOD_RES_PASSTHRU; } - - void OnRequest(Request& request) - { - if (strcmp("GET_USER_CERT", request.id) == 0) - { - UserCertificateRequest& req = static_cast(request); - req.cert = cmd.CertExt.get(req.user); - } - } }; MODULE_INIT(ModuleSSLInfo)