summaryrefslogtreecommitdiff
path: root/modules/extra/webcpanel/pages/index.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/extra/webcpanel/pages/index.cpp')
-rw-r--r--modules/extra/webcpanel/pages/index.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/extra/webcpanel/pages/index.cpp b/modules/extra/webcpanel/pages/index.cpp
new file mode 100644
index 000000000..525e564f6
--- /dev/null
+++ b/modules/extra/webcpanel/pages/index.cpp
@@ -0,0 +1,73 @@
+/*
+ * (C) 2003-2012 Anope Team
+ * Contact us at team@anope.org
+ *
+ * Please read COPYING and README for further details.
+ */
+
+#include "../webcpanel.h"
+
+void WebCPanel::Index::OnRequest(HTTPProvider *server, const Anope::string &page_name, HTTPClient *client, HTTPMessage &message, HTTPReply &reply)
+{
+ TemplateFileServer::Replacements replacements;
+ const Anope::string &user = message.post_data["username"], &pass = message.post_data["password"];
+
+ replacements["TITLE"] = page_title;
+
+ if (!user.empty() && !pass.empty())
+ {
+ // Rate limit check.
+
+ NickAlias *na = findnick(user);
+
+ EventReturn MOD_RESULT = EVENT_CONTINUE;
+
+ if (na)
+ {
+ FOREACH_RESULT(I_OnCheckAuthentication, OnCheckAuthentication(NULL, NULL, std::vector<Anope::string>(), na->nc->display, pass));
+ }
+
+ if (MOD_RESULT == EVENT_ALLOW)
+ {
+ Anope::string id;
+ for (int i = 0; i < 64; ++i)
+ {
+ char c;
+ do
+ c = 48 + (rand() % 123);
+ while (!isalnum(c));
+ id += c;
+ }
+
+ na->Extend("webcpanel_id", new ExtensibleItemClass<Anope::string>(id));
+ na->Extend("webcpanel_ip", new ExtensibleItemClass<Anope::string>(client->GetIP()));
+
+ {
+ HTTPReply::cookie c;
+ c.push_back(std::make_pair("account", na->nick));
+ c.push_back(std::make_pair("Path", "/"));
+ reply.cookies.push_back(c);
+ }
+
+ {
+ HTTPReply::cookie c;
+ c.push_back(std::make_pair("id", id));
+ c.push_back(std::make_pair("Path", "/"));
+ reply.cookies.push_back(c);
+ }
+
+ reply.error = HTTP_FOUND;
+ reply.headers["Location"] = "http://" + message.headers["Host"] + "/nickserv/info";
+ return;
+ }
+ else
+ {
+ replacements["INVALID_LOGIN"] = "Invalid username or password";
+ }
+ }
+
+ TemplateFileServer page("login.html");
+
+ page.Serve(server, page_name, client, message, reply, replacements);
+}
+