From 437eef7fdd976962b89391cbd6e03f5b22a3a85c Mon Sep 17 00:00:00 2001 From: cflakes Date: Tue, 23 Mar 2010 17:59:42 +0000 Subject: [PATCH] Add OnWebPreRequest web module hook to allow modules to do PAGE_DEFERRED style async processing. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1841 726aef4b-f618-498e-8847-2d620e286838 --- Modules.cpp | 1 + Modules.h | 1 + WebModules.cpp | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Modules.cpp b/Modules.cpp index 7994e42b..06e7d405 100644 --- a/Modules.cpp +++ b/Modules.cpp @@ -388,6 +388,7 @@ void CModule::ListSockets() { CString CModule::GetModNick() const { return ((m_pUser) ? m_pUser->GetStatusPrefix() : "*") + m_sModName; } // Webmods +bool CModule::OnWebPreRequest(CWebSock& WebSock, const CString& sPageName) { return false; } bool CModule::OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) { return false; } // !Webmods diff --git a/Modules.h b/Modules.h index 9f63bced..4c1127f5 100644 --- a/Modules.h +++ b/Modules.h @@ -274,6 +274,7 @@ public: virtual bool WebRequiresLogin() { return true; } virtual bool WebRequiresAdmin() { return false; } virtual CString GetWebMenuTitle() { return ""; } + virtual bool OnWebPreRequest(CWebSock& WebSock, const CString& sPageName); virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl); virtual void AddSubPage(TWebSubPage spSubPage) { m_vSubPages.push_back(spSubPage); } virtual void ClearSubPages() { m_vSubPages.clear(); } diff --git a/WebModules.cpp b/WebModules.cpp index 1ff6ff53..c2eddba7 100644 --- a/WebModules.cpp +++ b/WebModules.cpp @@ -582,9 +582,11 @@ CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CS } else if (pModule->WebRequiresAdmin() && !m_spSession->IsAdmin()) { sPageRet = GetErrorPage(403, "Forbidden", "You need to be an admin to access this module"); return PAGE_PRINT; - } else if (pModule && !pModule->IsGlobal() && pModule->GetUser() != m_spSession->GetUser()) { + } else if (!pModule->IsGlobal() && pModule->GetUser() != m_spSession->GetUser()) { sPageRet = GetErrorPage(403, "Forbidden", "You must login as " + pModule->GetUser()->GetUserName() + " in order to view this page"); return PAGE_PRINT; + } else if (pModule->OnWebPreRequest(*this, m_sPage)) { + return PAGE_DEFERRED; } VWebSubPages& vSubPages = pModule->GetSubPages();