diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp
index 80940960..5275c1a7 100644
--- a/modules/webadmin.cpp
+++ b/modules/webadmin.cpp
@@ -35,6 +35,8 @@ public:
void ListUsersPage(CString& sPageRet);
bool SettingsPage(CString& sPageRet);
+ bool ChanPage(CString& sPageRet, CChan* = NULL);
+ bool DelChan(CString& sPageRet);
bool UserPage(CString& sPageRet, CUser* pUser = NULL);
CUser* GetNewUser(CString& sPageRet, CUser* pUser);
@@ -294,6 +296,53 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) {
} else {
GetErrorPage(sPageRet, "No such username");
}
+ } else if (sURI == "/editchan") {
+ if (!m_pUser) {
+ m_pUser = m_pModule->GetZNC()->FindUser(GetParam("user"));
+ }
+
+ if (!m_pUser) {
+ GetErrorPage(sPageRet, "No such username");
+ return true;
+ }
+
+ CChan* pChan = m_pUser->FindChan(GetParam("chan"));
+ if (!pChan) {
+ GetErrorPage(sPageRet, "No such channel");
+ cerr << "==== [" << GetParam("chan") << "] == [" << (int) pChan << "]" << endl;
+ return true;
+ }
+
+ if (!ChanPage(sPageRet, pChan)) {
+ DEBUG_ONLY(cout << "- 302 Redirect" << endl);
+ return false;
+ }
+ } else if (sURI == "/addchan") {
+ if (!m_pUser) {
+ m_pUser = m_pModule->GetZNC()->FindUser(GetParam("user"));
+ }
+
+ if (m_pUser) {
+ if (!ChanPage(sPageRet)) {
+ DEBUG_ONLY(cout << "- 302 Redirect" << endl);
+ return false;
+ }
+ } else {
+ GetErrorPage(sPageRet, "No such username");
+ }
+ } else if (sURI == "/delchan") {
+ if (!m_pUser) {
+ m_pUser = m_pModule->GetZNC()->FindUser(GetParam("user"));
+ }
+
+ if (m_pUser) {
+ if (!DelChan(sPageRet)) {
+ DEBUG_ONLY(cout << "- 302 Redirect" << endl);
+ return false;
+ }
+ } else {
+ GetErrorPage(sPageRet, "No such username");
+ }
} else if (sURI == "/listusers") {
if (!IsAdmin()) {
return false;
@@ -439,6 +488,116 @@ bool CWebAdminSock::SettingsPage(CString& sPageRet) {
return false;
}
+bool CWebAdminSock::ChanPage(CString& sPageRet, CChan* pChan) {
+ if (!m_pUser) {
+ GetErrorPage(sPageRet, "That user doesn't exist");
+ }
+
+ if (!GetParam("submitted").ToUInt()) {
+ sPageRet = Header(CString((pChan) ? "Edit" : "Add") + " Channel" + CString((pChan) ? (" [" + pChan->GetName() + "]") : "") + " for User [" + m_pUser->GetUserName() + "]");
+ sPageRet += "
| [Add] | \r\n"; + const vector<- Add a channel (opens in same page) | \r\n"; + } else { + sPageRet += "Save | \r\n" + "Name | \r\n" + "CurModes | \r\n" + "DefModes | \r\n" + "BufferCount | \r\n" + "Options | \r\n"; + } + + sPageRet += "
| " + "\r\n" + "[Edit] [Del] | \r\n" + "InConfig()) ? " CHECKED" : "") + "> | \r\n" + "" + CString(pChan->GetPermStr() + pChan->GetName()).Escape_n(CString::EHTML) + " | \r\n" + "" + pChan->GetModeString().Escape_n(CString::EHTML) + " | \r\n" + "" + pChan->GetDefaultModes().Escape_n(CString::EHTML) + " | \r\n" + "" + CString::ToString(pChan->GetBufferCount()) + " | \r\n" + "" + pChan->GetOptions().Escape_n(CString::EHTML) + " | \r\n" + "