anope- supernets anope source code & configuration |
git clone git://git.acid.vegas/anope.git |
Log | Files | Refs | Archive | README |
access.cpp (4066B)
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::Access::Access(const Anope::string &cat, const Anope::string &u) : WebPanelProtectedPage(cat, u) 12 { 13 } 14 15 bool WebCPanel::ChanServ::Access::OnRequest(HTTPProvider *server, const Anope::string &page_name, HTTPClient *client, HTTPMessage &message, HTTPReply &reply, NickAlias *na, TemplateFileServer::Replacements &replacements) 16 { 17 TemplateFileServer Page("chanserv/access.html"); 18 const Anope::string &chname = message.get_data["channel"]; 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("ACCESS_LIST") && !has_priv) 41 { 42 replacements["MESSAGES"] = "Access denied."; 43 Page.Serve(server, page_name, client, message, reply, replacements); 44 return true; 45 } 46 47 replacements["ACCESS_LIST"] = "YES"; 48 49 if (u_access.HasPriv("ACCESS_CHANGE") || has_priv) 50 { 51 if (message.get_data["del"].empty() == false && message.get_data["mask"].empty() == false) 52 { 53 std::vector<Anope::string> params; 54 params.push_back(ci->name); 55 params.push_back("DEL"); 56 params.push_back(message.get_data["mask"]); 57 58 WebPanel::RunCommand(client, na->nc->display, na->nc, "ChanServ", "chanserv/access", params, replacements); 59 } 60 else if (message.post_data["mask"].empty() == false && message.post_data["access"].empty() == false && message.post_data["provider"].empty() == false) 61 { 62 const Anope::string &provider = message.post_data["provider"]; 63 64 if (provider == "chanserv/access") 65 { 66 std::vector<Anope::string> params; 67 params.push_back(ci->name); 68 params.push_back("ADD"); 69 params.push_back(message.post_data["mask"]); 70 params.push_back(message.post_data["access"]); 71 72 WebPanel::RunCommand(client, na->nc->display, na->nc, "ChanServ", "chanserv/access", params, replacements); 73 } 74 else if (provider == "chanserv/xop") 75 { 76 std::vector<Anope::string> params; 77 params.push_back(ci->name); 78 params.push_back("ADD"); 79 params.push_back(message.post_data["mask"]); 80 81 WebPanel::RunCommandWithName(client, na->nc, "ChanServ", "chanserv/xop", message.post_data["access"], params, replacements); 82 } 83 else if (provider == "chanserv/flags") 84 { 85 std::vector<Anope::string> params; 86 params.push_back(ci->name); 87 params.push_back("MODIFY"); 88 params.push_back(message.post_data["mask"]); 89 params.push_back(message.post_data["access"]); 90 91 WebPanel::RunCommand(client, na->nc->display, na->nc, "ChanServ", "chanserv/flags", params, replacements); 92 } 93 } 94 } 95 96 /* command might have invalidated u_access */ 97 u_access = ci->AccessFor(na->nc); 98 99 replacements["ESCAPED_CHANNEL"] = HTTPUtils::URLEncode(chname); 100 replacements["ACCESS_CHANGE"] = u_access.HasPriv("ACCESS_CHANGE") ? "YES" : "NO"; 101 102 for (unsigned i = 0; i < ci->GetAccessCount(); ++i) 103 { 104 ChanAccess *access = ci->GetAccess(i); 105 106 replacements["MASKS"] = access->Mask(); 107 replacements["ACCESSES"] = access->AccessSerialize(); 108 replacements["CREATORS"] = access->creator; 109 } 110 111 if (Service::FindService("Command", "chanserv/access")) 112 replacements["PROVIDERS"] = "chanserv/access"; 113 if (Service::FindService("Command", "chanserv/xop")) 114 replacements["PROVIDERS"] = "chanserv/xop"; 115 if (Service::FindService("Command", "chanserv/flags")) 116 replacements["PROVIDERS"] = "chanserv/flags"; 117 118 Page.Serve(server, page_name, client, message, reply, replacements); 119 return true; 120 } 121 122 std::set<Anope::string> WebCPanel::ChanServ::Access::GetData() 123 { 124 std::set<Anope::string> v; 125 v.insert("channel"); 126 return v; 127 }