diff options
-rw-r--r-- | modules/extra/webcpanel/pages/operserv/akill.cpp | 63 | ||||
-rw-r--r-- | modules/extra/webcpanel/pages/operserv/akill.h | 25 | ||||
-rw-r--r-- | modules/extra/webcpanel/templates/default/operserv/akill.html | 49 | ||||
-rw-r--r-- | modules/extra/webcpanel/webcpanel.cpp | 18 | ||||
-rw-r--r-- | modules/extra/webcpanel/webcpanel.h | 2 |
5 files changed, 156 insertions, 1 deletions
diff --git a/modules/extra/webcpanel/pages/operserv/akill.cpp b/modules/extra/webcpanel/pages/operserv/akill.cpp new file mode 100644 index 000000000..8a66b8d9b --- /dev/null +++ b/modules/extra/webcpanel/pages/operserv/akill.cpp @@ -0,0 +1,63 @@ +/* + * (C) 2003-2012 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for further details. + */ + +#include "../../webcpanel.h" + +WebCPanel::OperServ::Akill::Akill(const Anope::string &cat, const Anope::string &u) : WebPanelProtectedPage(cat, u) +{ +} + +void WebCPanel::OperServ::Akill::OnRequest(HTTPProvider *server, const Anope::string &page_name, HTTPClient *client, HTTPMessage &message, HTTPReply &reply, NickAlias *na, TemplateFileServer::Replacements &replacements) +{ + + static service_reference<XLineManager> akills("XLineManager","xlinemanager/sgline"); + + if (!na->nc->IsServicesOper() && !(na->nc->o && na->nc->o->ot && na->nc->o->ot->HasPriv("operserv/akill"))) + { + replacements["NOACCESS"]; + } + else + { + if (akills->GetCount() == 0) + replacements["MESSAGES"] = "No Akills to display."; + + if (message.post_data.count("mask") > 0 && message.post_data.count("expiry") > 0 && message.post_data.count("reason") > 0) + { + std::vector<Anope::string> params; + stringstream cmdstr; + params.push_back("ADD"); + cmdstr << "+" << HTTPUtils::URLDecode(message.post_data["expiry"]); + cmdstr << " " << HTTPUtils::URLDecode(message.post_data["mask"]); + cmdstr << " " << HTTPUtils::URLDecode(message.post_data["reason"]); + params.push_back(cmdstr.str()); + WebPanel::RunCommand(na->nc->display, na->nc, Config->OperServ, "operserv/akill", params, replacements); + } + + if (message.get_data["del"] == "1" && message.get_data.count("number") > 0) + { + std::vector<Anope::string> params; + params.push_back("DEL"); + params.push_back(HTTPUtils::URLDecode(message.get_data["number"])); + WebPanel::RunCommand(na->nc->display, na->nc, Config->OperServ, "operserv/akill", params, replacements); + } + + for (unsigned i = 0, end = akills->GetCount(); i < end; ++i) + { + const XLine *x = akills->GetEntry(i); + replacements["NUMBER"] = stringify(i + 1); + replacements["HOST"] = x->Mask; + replacements["SETTER"] = x->By; + replacements["TIME"] = do_strftime(x->Created, NULL, true); + replacements["EXPIRE"] = expire_left(na->nc, x->Expires); + replacements["REASON"] = x->Reason; + } + } + + TemplateFileServer page("operserv/akill.html"); + page.Serve(server, page_name, client, message, reply, replacements); +} + diff --git a/modules/extra/webcpanel/pages/operserv/akill.h b/modules/extra/webcpanel/pages/operserv/akill.h new file mode 100644 index 000000000..4b5f8f1dd --- /dev/null +++ b/modules/extra/webcpanel/pages/operserv/akill.h @@ -0,0 +1,25 @@ +/* + * (C) 2003-2012 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for further details. + */ + +namespace WebCPanel +{ + +namespace OperServ +{ + +class Akill : public WebPanelProtectedPage +{ + public: + Akill(const Anope::string &cat, const Anope::string &u); + + void OnRequest(HTTPProvider *, const Anope::string &, HTTPClient *, HTTPMessage &, HTTPReply &, NickAlias *, TemplateFileServer::Replacements &) anope_override; +}; + +} + +} + diff --git a/modules/extra/webcpanel/templates/default/operserv/akill.html b/modules/extra/webcpanel/templates/default/operserv/akill.html new file mode 100644 index 000000000..317e31c71 --- /dev/null +++ b/modules/extra/webcpanel/templates/default/operserv/akill.html @@ -0,0 +1,49 @@ +{INCLUDE header.html} + {IF EXISTS NOACCESS} + <b>Access denied.</b> + {ELSE} + {FOR M IN MESSAGES} + {M}</br> + {END FOR} + </br><b>AKILL List:</b> + <table width="100%" height="100%"> + <tr> + <th align="left">Number</th> + <th align="left">Hostmask/Reason</th> + <th align="left">Expires</th> + <th align="left">Setter</th> + </tr> + {FOR N,H,S,T,E,R IN NUMBER,HOST,SETTER,TIME,EXPIRE,REASON} + <tr> + <td>{N}</td> + <td>{H}</td> + <td>{E}</td> + <td>{S}</td> + <td></td> + <td><a href="/operserv/akill?&number={N}&del=1">Delete</a></td> + </tr> + <tr> + <td></td> + <td colspan="2">{R}</td> + </tr> + {END FOR} + </table></br> + <b>Add a new AKILL</b> + <form method="post" action="/operserv/akill"> + <table width="100%" height="100%" align="left"> + <tr> + <th align="left">HostMask</th> + <th align="left">Expiry</th> + <th align="left">Reason</th> + </tr> + <tr> + <td><input type="text" name="mask"></td> + <td><input type="text" name="expiry"></td> + <td><input type="text" name="reason"></td> + </tr> + </table> + <input type="submit" value="send"> + </form> + {END IF} + +{INCLUDE footer.html} diff --git a/modules/extra/webcpanel/webcpanel.cpp b/modules/extra/webcpanel/webcpanel.cpp index bb65387f2..d3914cfeb 100644 --- a/modules/extra/webcpanel/webcpanel.cpp +++ b/modules/extra/webcpanel/webcpanel.cpp @@ -32,6 +32,8 @@ class ModuleWebCPanel : public Module WebCPanel::MemoServ::Memos memoserv_memos; + WebCPanel::OperServ::Akill operserv_akill; + public: ModuleWebCPanel(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED), panel(this, "webcpanel"), @@ -39,7 +41,7 @@ class ModuleWebCPanel : public Module index("/"), logout("/logout"), _register("/register"), confirm("/confirm"), nickserv_info(Config->NickServ, "/nickserv/info"), nickserv_cert(Config->NickServ, "/nickserv/cert"), nickserv_access(Config->NickServ, "/nickserv/access"), nickserv_alist(Config->NickServ, "/nickserv/alist"), chanserv_info(Config->ChanServ, "/chanserv/info"), chanserv_set(Config->ChanServ, "/chanserv/set"), chanserv_access(Config->ChanServ, "/chanserv/access"), chanserv_akick(Config->ChanServ, "/chanserv/akick"), - memoserv_memos(Config->MemoServ, "/memoserv/memos") + memoserv_memos(Config->MemoServ, "/memoserv/memos"), operserv_akill(Config->OperServ, "/operserv/akill") { this->SetAuthor("Anope"); @@ -135,6 +137,20 @@ class ModuleWebCPanel : public Module panel.sections.push_back(s); } + + if (Config->OperServ.empty() == false) + { + Section s; + s.name = Config->OperServ; + + SubSection ss; + ss.name = "Akill"; + ss.url = "/operserv/akill"; + s.subsections.push_back(ss); + provider->RegisterPage(&this->operserv_akill); + + panel.sections.push_back(s); + } } ~ModuleWebCPanel() diff --git a/modules/extra/webcpanel/webcpanel.h b/modules/extra/webcpanel/webcpanel.h index 948d5b1c2..9573bbb6c 100644 --- a/modules/extra/webcpanel/webcpanel.h +++ b/modules/extra/webcpanel/webcpanel.h @@ -161,3 +161,5 @@ namespace WebPanel #include "pages/chanserv/akick.h" #include "pages/memoserv/memos.h" + +#include "pages/operserv/akill.h" |