bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) override { if (sPageName != "index") { // only accept requests to index return false; } if (WebSock.IsPost()) { VCString vsPerf; WebSock.GetRawParam("perform", true).Split("\n", vsPerf, false); m_vPerform.clear(); for (const CString& sPerf : vsPerf) m_vPerform.push_back(ParsePerform(sPerf)); Save(); } for (const CString& sPerf : m_vPerform) { CTemplate& Row = Tmpl.AddRow("PerformLoop"); Row["Perform"] = sPerf; } return true; }
bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) override { if (sPageName != "index") { // only accept requests to index return false; } if (WebSock.IsPost()) { SetNV("username", WebSock.GetParam("username")); CString sPassword = WebSock.GetParam("password"); if (!sPassword.empty()) { SetNV("password", sPassword); } SetNV(NV_REQUIRE_AUTH, WebSock.GetParam("require_auth")); SetNV(NV_MECHANISMS, WebSock.GetParam("mechanisms")); } Tmpl["Username"] = GetNV("username"); Tmpl["Password"] = GetNV("password"); Tmpl["RequireAuth"] = GetNV(NV_REQUIRE_AUTH); Tmpl["Mechanisms"] = GetMechanismsString(); for (const auto& it : SupportedMechanisms) { CTemplate& Row = Tmpl.AddRow("MechanismLoop"); CString sName(it.szName); Row["Name"] = sName; Row["Description"] = CString(it.szDescription); } return true; }
virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) { if (sPageName == "index") { if (WebSock.IsPost()) { CUser *pUser = CZNC::Get().FindUser(WebSock.GetParam("user")); bool bOutgoing = WebSock.GetParam("direction") == "out"; const CString sLine = WebSock.GetParam("line"); if (!pUser) { Tmpl["user"] = WebSock.GetParam("user"); Tmpl[bOutgoing ? "direction_out" : "direction_in"] = "true"; Tmpl["line"] = sLine; WebSock.GetSession()->AddError("User not found"); return true; } if (bOutgoing) { pUser->PutIRC(sLine); } else { pUser->PutUser(sLine); } WebSock.GetSession()->AddSuccess("Line sent"); } const map<CString,CUser*>& msUsers = CZNC::Get().GetUserMap(); for (map<CString,CUser*>::const_iterator it = msUsers.begin(); it != msUsers.end(); ++it) { CTemplate& l = Tmpl.AddRow("UserLoop"); l["Username"] = (*it->second).GetUserName(); } return true; } return false; }
CString SafeGetUserNameParam(CWebSock& WebSock) { CString sUserName = WebSock.GetParam("user"); // check for POST param if(sUserName.empty() && !WebSock.IsPost()) { // if no POST param named user has been given and we are not // saving this form, fall back to using the GET parameter. sUserName = WebSock.GetParam("user", false); } return sUserName; }
CString SafeGetNetworkParam(CWebSock& WebSock) { CString sNetwork = WebSock.GetParam("network"); // check for POST param if(sNetwork.empty() && !WebSock.IsPost()) { // if no POST param named user has been given and we are not // saving this form, fall back to using the GET parameter. sNetwork = WebSock.GetParam("network", false); } return sNetwork; }
virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) { if (sPageName == "index") { if (WebSock.IsPost()) { CUser *pUser = CZNC::Get().FindUser(WebSock.GetParam("user").Token(0, false, "/")); if (!pUser) { WebSock.GetSession()->AddError("User not found"); return true; } CIRCNetwork *pNetwork = pUser->FindNetwork(WebSock.GetParam("user").Token(1, false, "/")); if (!pNetwork) { WebSock.GetSession()->AddError("Network not found"); return true; } bool bToServer = WebSock.GetParam("send_to") == "server"; const CString sLine = WebSock.GetParam("line"); Tmpl["user"] = pUser->GetUserName(); Tmpl[bToServer ? "to_server" : "to_client"] = "true"; Tmpl["line"] = sLine; if (bToServer) { pNetwork->PutIRC(sLine); } else { pNetwork->PutUser(sLine); } WebSock.GetSession()->AddSuccess("Line sent"); } const map<CString,CUser*>& msUsers = CZNC::Get().GetUserMap(); for (map<CString,CUser*>::const_iterator it = msUsers.begin(); it != msUsers.end(); ++it) { CTemplate& l = Tmpl.AddRow("UserLoop"); l["Username"] = (*it->second).GetUserName(); vector<CIRCNetwork*> vNetworks = (*it->second).GetNetworks(); for (vector<CIRCNetwork*>::const_iterator it2 = vNetworks.begin(); it2 != vNetworks.end(); ++it2) { CTemplate& NetworkLoop = l.AddRow("NetworkLoop"); NetworkLoop["Username"] = (*it->second).GetUserName(); NetworkLoop["Network"] = (*it2)->GetName(); } } return true; } return false; }
bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) override { if (sPageName != "index") { // only accept requests to index return false; } if (WebSock.IsPost()) { // print the text we just recieved CString text = WebSock.GetRawParam("text", true); WebSock.PrintHeader(text.length(), "text/plain; charset=UTF-8"); WebSock.Write(text); WebSock.Close(Csock::CLT_AFTERWRITE); return false; } return true; }
virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) { if (sPageName != "index") { // only accept requests to /mods/perform/ return false; } if (WebSock.IsPost()) { VCString vsPerf; WebSock.GetRawParam("perform", true).Split("\n", vsPerf, false); m_vPerform.clear(); for (VCString::const_iterator it = vsPerf.begin(); it != vsPerf.end(); ++it) m_vPerform.push_back(ParsePerform(*it)); Save(); } for (VCString::const_iterator it = m_vPerform.begin(); it != m_vPerform.end(); ++it) { CTemplate& Row = Tmpl.AddRow("PerformLoop"); Row["Perform"] = *it; } return true; }
virtual bool OnWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl) { CSmartPtr<CWebSession> spSession = WebSock.GetSession(); if (sPageName == "settings") { // Admin Check if (!spSession->IsAdmin()) { return false; } return SettingsPage(WebSock, Tmpl); } else if (sPageName == "adduser") { // Admin Check if (!spSession->IsAdmin()) { return false; } return UserPage(WebSock, Tmpl); } else if (sPageName == "editchan") { CUser* pUser = SafeGetUserFromParam(WebSock); // Admin||Self Check if (!spSession->IsAdmin() && (!spSession->GetUser() || spSession->GetUser() != pUser)) { return false; } if (!pUser) { WebSock.PrintErrorPage("No such username"); return true; } CString sChan = WebSock.GetParam("name"); if(sChan.empty() && !WebSock.IsPost()) { sChan = WebSock.GetParam("name", false); } CChan* pChan = pUser->FindChan(sChan); if (!pChan) { WebSock.PrintErrorPage("No such channel"); return true; } return ChanPage(WebSock, Tmpl, pUser, pChan); } else if (sPageName == "addchan") { CUser* pUser = SafeGetUserFromParam(WebSock); // Admin||Self Check if (!spSession->IsAdmin() && (!spSession->GetUser() || spSession->GetUser() != pUser)) { return false; } if (pUser) { return ChanPage(WebSock, Tmpl, pUser); } WebSock.PrintErrorPage("No such username"); return true; } else if (sPageName == "delchan") { CUser* pUser = CZNC::Get().FindUser(WebSock.GetParam("user", false)); // Admin||Self Check if (!spSession->IsAdmin() && (!spSession->GetUser() || spSession->GetUser() != pUser)) { return false; } if (pUser) { return DelChan(WebSock, pUser); } WebSock.PrintErrorPage("No such username"); return true; } else if (sPageName == "deluser") { if (!spSession->IsAdmin()) { return false; } if (!WebSock.IsPost()) { // Show the "Are you sure?" page: CString sUser = WebSock.GetParam("user", false); CUser* pUser = CZNC::Get().FindUser(sUser); if (!pUser) { WebSock.PrintErrorPage("No such username"); return true; } Tmpl.SetFile("del_user.tmpl"); Tmpl["Username"] = sUser; return true; } // The "Are you sure?" page has been submitted with "Yes", // so we actually delete the user now: CString sUser = WebSock.GetParam("user"); CUser* pUser = CZNC::Get().FindUser(sUser); if (pUser && pUser == spSession->GetUser()) { WebSock.PrintErrorPage("Please don't delete yourself, suicide is not the answer!"); return true; } else if (CZNC::Get().DeleteUser(sUser)) { WebSock.Redirect("listusers"); return true; } WebSock.PrintErrorPage("No such username"); return true; } else if (sPageName == "edituser") { CString sUserName = SafeGetUserNameParam(WebSock); CUser* pUser = CZNC::Get().FindUser(sUserName); if(!pUser) { if(sUserName.empty()) { pUser = spSession->GetUser(); } // else: the "no such user" message will be printed. } // Admin||Self Check if (!spSession->IsAdmin() && (!spSession->GetUser() || spSession->GetUser() != pUser)) { return false; } if (pUser) { return UserPage(WebSock, Tmpl, pUser); } WebSock.PrintErrorPage("No such username"); return true; } else if (sPageName == "listusers" && spSession->IsAdmin()) { return ListUsersPage(WebSock, Tmpl); } else if (sPageName == "traffic" && spSession->IsAdmin()) { return TrafficPage(WebSock, Tmpl); } else if (sPageName.empty() || sPageName == "index") { return true; } return false; }