summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/extra/webcpanel/pages/operserv/akill.cpp63
-rw-r--r--modules/extra/webcpanel/pages/operserv/akill.h25
-rw-r--r--modules/extra/webcpanel/templates/default/operserv/akill.html49
-rw-r--r--modules/extra/webcpanel/webcpanel.cpp18
-rw-r--r--modules/extra/webcpanel/webcpanel.h2
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"