diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp
index 3869e171..bfb07db2 100644
--- a/modules/webadmin.cpp
+++ b/modules/webadmin.cpp
@@ -64,6 +64,24 @@ public:
sPageRet += Footer();
}
+ CString GetModArgs(const CString& sModName, bool bGlobal = false) {
+ if (!bGlobal && !m_pUser) {
+ return "";
+ }
+
+ CModules& Modules = (bGlobal) ? CZNC::New()->GetModules() : m_pUser->GetModules();
+
+ for (unsigned int a = 0; a < Modules.size(); a++) {
+ CModule* pModule = Modules[a];
+
+ if (pModule->GetModName() == sModName) {
+ return pModule->GetArgs();
+ }
+ }
+
+ return "";
+ }
+
virtual Csock* GetSockObj(const CString& sHost, unsigned short uPort);
bool IsAdmin() const { return m_bAdmin; }
@@ -147,7 +165,7 @@ CString CWebAdminSock::Header(const CString& sTitle) {
"
\r\n";
- if (!m_pUser) {
+ if (IsAdmin()) {
sRet += "[Home] \r\n"
"[Settings] \r\n"
"[Add User] \r\n"
@@ -239,14 +257,14 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) {
}
if (sURI == "/") {
- if (m_pUser) {
+ if (!IsAdmin()) {
Redirect("/edituser");
return false;
}
PrintMainPage(sPageRet);
} else if (sURI == "/settings") {
- if (m_pUser) {
+ if (!IsAdmin()) {
return false;
}
@@ -255,7 +273,7 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) {
return false;
}
} else if (sURI == "/adduser") {
- if (m_pUser) {
+ if (!IsAdmin()) {
return false;
}
@@ -264,10 +282,12 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) {
return false;
}
} else if (sURI == "/edituser") {
- CUser* pUser = (m_pUser) ? m_pUser : m_pModule->GetZNC()->FindUser(GetParam("user"));
+ if (!m_pUser) {
+ m_pUser = m_pModule->GetZNC()->FindUser(GetParam("user"));
+ }
- if (pUser) {
- if (!UserPage(sPageRet, pUser)) {
+ if (m_pUser) {
+ if (!UserPage(sPageRet, m_pUser)) {
DEBUG_ONLY(cout << "- 302 Redirect" << endl);
return false;
}
@@ -275,13 +295,13 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) {
GetErrorPage(sPageRet, "No such username");
}
} else if (sURI == "/listusers") {
- if (m_pUser) {
+ if (!IsAdmin()) {
return false;
}
ListUsersPage(sPageRet);
} else if (sURI == "/deluser") {
- if (m_pUser) {
+ if (!IsAdmin()) {
return false;
}
@@ -332,21 +352,24 @@ bool CWebAdminSock::SettingsPage(CString& sPageRet) {
"
\r\n"
- "Global Modules \r\n";
+ " Global Modules \r\n"
+ "
\r\n"
"\r\n"
"\r\n";
@@ -373,14 +396,22 @@ bool CWebAdminSock::SettingsPage(CString& sPageRet) {
for (set::iterator it = ssArgs.begin(); it != ssArgs.end(); it++) {
CString sModRet;
- sArg = (*it).TrimRight_n("\r");
+ CString sModName = (*it).TrimRight_n("\r");
+
+ if (!sModName.empty()) {
+ CString sArgs = GetParam("modargs_" + sModName);
- if (!sArg.empty()) {
try {
- if (!m_pModule->GetZNC()->GetModules().FindModule(sArg)) {
- m_pModule->GetZNC()->GetModules().LoadModule(sArg, "", NULL, sModRet);
+ if (!m_pModule->GetZNC()->GetModules().FindModule(sModName)) {
+ if (!m_pModule->GetZNC()->GetModules().LoadModule(sModName, sArgs, NULL, sModRet)) {
+ DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] [" << sModRet << "]" << endl);
+ }
+ } else {
+ DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] because it is already loaded" << endl);
}
- } catch(...) {}
+ } catch(...) {
+ DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] [" << sArgs << "]" << endl);
+ }
}
}
@@ -490,19 +521,23 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) {
"\r\n"
"
\r\n"
- "Modules \r\n";
+ " Modules \r\n"
" Channels \r\n"
"Default Modes: \r\n"
"
\r\n"
@@ -577,7 +612,7 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) {
}
}
- if (m_pUser) {
+ if (!IsAdmin()) {
Redirect("/edituser");
} else {
Redirect("/listusers");
@@ -632,16 +667,20 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) {
if (IsAdmin() || (pUser && !pUser->DenyLoadMod())) {
GetParamValues("loadmod", vsArgs);
+
for (a = 0; a < vsArgs.size(); a++) {
CString sModRet;
- CString sArg = vsArgs[a].TrimRight_n("\r");
- if (!sArg.empty()) {
+ CString sModName = vsArgs[a].TrimRight_n("\r");
+
+ if (!sModName.empty()) {
+ CString sArgs = GetParam("modargs_" + sModName);
+
try {
- if (!pNewUser->GetModules().LoadModule(sArg, "", pNewUser, sModRet)) {
- DEBUG_ONLY(cerr << "Unable to load module [" << sArg << "] [" << sModRet << "]" << endl);
+ if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet)) {
+ DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] [" << sModRet << "]" << endl);
}
} catch (...) {
- DEBUG_ONLY(cerr << "Unable to load module [" << sArg << "]" << endl);
+ DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] [" << sArgs << "]" << endl);
}
}
}
@@ -650,10 +689,11 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) {
for (a = 0; a < Modules.size(); a++) {
CString sModName = Modules[a]->GetModName();
+ CString sArgs = Modules[a]->GetArgs();
CString sModRet;
try {
- if (!pNewUser->GetModules().LoadModule(sModName, "", pNewUser, sModRet)) {
+ if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet)) {
DEBUG_ONLY(cerr << "Unable to load module [" << sModName << "] [" << sModRet << "]" << endl);
}
} catch (...) {
|