anope- supernets anope source code & configuration |
git clone git://git.acid.vegas/anope.git |
Log | Files | Refs | Archive | README |
akick.cpp (2686B)
1 /* 2 * (C) 2003-2022 Anope Team 3 * Contact us at team@anope.org 4 * 5 * Please read COPYING and README for further details. 6 */ 7 8 #include "../../webcpanel.h" 9 #include "utils.h" 10 11 WebCPanel::ChanServ::Akick::Akick(const Anope::string &cat, const Anope::string &u) : WebPanelProtectedPage(cat, u) 12 { 13 } 14 15 bool WebCPanel::ChanServ::Akick::OnRequest(HTTPProvider *server, const Anope::string &page_name, HTTPClient *client, HTTPMessage &message, HTTPReply &reply, NickAlias *na, TemplateFileServer::Replacements &replacements) 16 { 17 const Anope::string &chname = message.get_data["channel"]; 18 TemplateFileServer Page("chanserv/akick.html"); 19 20 BuildChanList(na, replacements); 21 22 if (chname.empty()) 23 { 24 Page.Serve(server, page_name, client, message, reply, replacements); 25 return true; 26 } 27 28 ChannelInfo *ci = ChannelInfo::Find(chname); 29 30 if (!ci) 31 { 32 replacements["MESSAGES"] = "Channel not registered"; 33 Page.Serve(server, page_name, client, message, reply, replacements); 34 return true; 35 } 36 37 AccessGroup u_access = ci->AccessFor(na->nc); 38 bool has_priv = na->nc->IsServicesOper() && na->nc->o->ot->HasPriv("chanserv/access/modify"); 39 40 if (!u_access.HasPriv("AKICK") && !has_priv) 41 { 42 replacements["MESSAGES"] = "Permission denied."; 43 Page.Serve(server, page_name, client, message, reply, replacements); 44 return true; 45 } 46 47 replacements["AKICK"] = "YES"; 48 49 if (message.get_data["del"].empty() == false && message.get_data["mask"].empty() == false) 50 { 51 std::vector<Anope::string> params; 52 params.push_back(ci->name); 53 params.push_back("DEL"); 54 params.push_back(message.get_data["mask"]); 55 56 WebPanel::RunCommand(client, na->nc->display, na->nc, "ChanServ", "chanserv/akick", params, replacements); 57 } 58 else if (message.post_data["mask"].empty() == false) 59 { 60 std::vector<Anope::string> params; 61 params.push_back(ci->name); 62 params.push_back("ADD"); 63 params.push_back(message.post_data["mask"]); 64 if (message.post_data["reason"].empty() == false) 65 params.push_back(message.post_data["reason"]); 66 67 WebPanel::RunCommand(client, na->nc->display, na->nc, "ChanServ", "chanserv/akick", params, replacements); 68 } 69 70 replacements["ESCAPED_CHANNEL"] = HTTPUtils::URLEncode(chname); 71 72 for (unsigned i = 0; i < ci->GetAkickCount(); ++i) 73 { 74 AutoKick *akick = ci->GetAkick(i); 75 76 if (akick->nc) 77 replacements["MASKS"] = akick->nc->display; 78 else 79 replacements["MASKS"] = akick->mask; 80 replacements["CREATORS"] = akick->creator; 81 replacements["REASONS"] = akick->reason; 82 } 83 84 Page.Serve(server, page_name, client, message, reply, replacements); 85 return true; 86 } 87 88 std::set<Anope::string> WebCPanel::ChanServ::Akick::GetData() 89 { 90 std::set<Anope::string> v; 91 v.insert("channel"); 92 return v; 93 }