diff options
author | Adam <Adam@anope.org> | 2014-12-05 20:24:27 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-12-05 20:24:27 -0500 |
commit | e1f5e030bc8edac10da922e0402744b1e2f023c8 (patch) | |
tree | 4da3774510e5a3f1582e529cecb7f4abfba6b795 /modules/webcpanel/pages/chanserv/access.cpp | |
parent | afffeb0a1d49c1ac8f06ac9850929a41a52cbc7e (diff) |
Change webpanel access add to just add via the commands, split Command::Run into two so I can do this as I need to run named commands for it
Diffstat (limited to 'modules/webcpanel/pages/chanserv/access.cpp')
-rw-r--r-- | modules/webcpanel/pages/chanserv/access.cpp | 104 |
1 files changed, 34 insertions, 70 deletions
diff --git a/modules/webcpanel/pages/chanserv/access.cpp b/modules/webcpanel/pages/chanserv/access.cpp index 39750a283..daa8e7406 100644 --- a/modules/webcpanel/pages/chanserv/access.cpp +++ b/modules/webcpanel/pages/chanserv/access.cpp @@ -46,8 +46,6 @@ bool WebCPanel::ChanServ::Access::OnRequest(HTTPProvider *server, const Anope::s replacements["ACCESS_LIST"] = "YES"; - const ChanAccess *highest = u_access.Highest(); - if (u_access.HasPriv("ACCESS_CHANGE") || has_priv) { if (message.get_data["del"].empty() == false && message.get_data["mask"].empty() == false) @@ -61,71 +59,36 @@ bool WebCPanel::ChanServ::Access::OnRequest(HTTPProvider *server, const Anope::s } else if (message.post_data["mask"].empty() == false && message.post_data["access"].empty() == false && message.post_data["provider"].empty() == false) { - // Generic access add code here, works with any provider (so we can't call a command exactly) - AccessProvider *a = NULL; - for (std::list<AccessProvider *>::const_iterator it = AccessProvider::GetProviders().begin(); it != AccessProvider::GetProviders().end(); ++it) - if ((*it)->name == message.post_data["provider"]) - a = *it; + const Anope::string &provider = message.post_data["provider"]; - if (a) + if (provider == "chanserv/access") { - bool denied = false; - - for (unsigned i = 0, end = ci->GetAccessCount(); i < end; ++i) - { - ChanAccess *acc = ci->GetAccess(i); - - if (acc->Mask() == message.post_data["mask"]) - { - if ((!highest || *acc >= *highest) && !u_access.founder && !has_priv) - { - replacements["MESSAGES"] = "Access denied"; - denied = true; - } - else - delete acc; - break; - } - } - - - unsigned access_max = Config->GetModule("chanserv")->Get<unsigned>("accessmax", "1024"); - if (access_max && ci->GetAccessCount() >= access_max) - replacements["MESSAGES"] = "Sorry, you can only have " + stringify(access_max) + " access entries on a channel."; - else if (!denied) - { - ChanAccess *new_acc = a->Create(); - new_acc->SetMask(message.post_data["mask"], ci); - new_acc->creator = na->nc->display; - try - { - new_acc->AccessUnserialize(message.post_data["access"]); - } - catch (...) - { - replacements["MESSAGES"] = "Invalid access expression for the given type"; - delete new_acc; - new_acc = NULL; - } - if (new_acc) - { - new_acc->last_seen = 0; - new_acc->created = Anope::CurTime; - - if ((!highest || *highest <= *new_acc) && !u_access.founder && !has_priv) - delete new_acc; - else if (new_acc->AccessSerialize().empty()) - { - replacements["MESSAGES"] = "Invalid access expression for the given type"; - delete new_acc; - } - else - { - ci->AddAccess(new_acc); - replacements["MESSAGES"] = "Access for " + new_acc->Mask() + " set to " + new_acc->AccessSerialize(); - } - } - } + std::vector<Anope::string> params; + params.push_back(ci->name); + params.push_back("ADD"); + params.push_back(message.post_data["mask"]); + params.push_back(message.post_data["access"]); + + WebPanel::RunCommand(na->nc->display, na->nc, "ChanServ", "chanserv/access", params, replacements); + } + else if (provider == "chanserv/xop") + { + std::vector<Anope::string> params; + params.push_back(ci->name); + params.push_back("ADD"); + params.push_back(message.post_data["mask"]); + + WebPanel::RunCommandWithName(na->nc, "ChanServ", "chanserv/xop", message.post_data["access"], params, replacements); + } + else if (provider == "chanserv/flags") + { + std::vector<Anope::string> params; + params.push_back(ci->name); + params.push_back("MODIFY"); + params.push_back(message.post_data["mask"]); + params.push_back(message.post_data["access"]); + + WebPanel::RunCommand(na->nc->display, na->nc, "ChanServ", "chanserv/flags", params, replacements); } } } @@ -142,11 +105,12 @@ bool WebCPanel::ChanServ::Access::OnRequest(HTTPProvider *server, const Anope::s replacements["CREATORS"] = HTTPUtils::Escape(access->creator); } - for (std::list<AccessProvider *>::const_iterator it = AccessProvider::GetProviders().begin(); it != AccessProvider::GetProviders().end(); ++it) - { - const AccessProvider *a = *it; - replacements["PROVIDERS"] = a->name; - } + if (Service::FindService("Command", "chanserv/access")) + replacements["PROVIDERS"] = "chanserv/access"; + if (Service::FindService("Command", "chanserv/xop")) + replacements["PROVIDERS"] = "chanserv/xop"; + if (Service::FindService("Command", "chanserv/flags")) + replacements["PROVIDERS"] = "chanserv/flags"; Page.Serve(server, page_name, client, message, reply, replacements); return true; |