2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
5 * Copyright (C) 2008 Craig Edwards <craigedwards@brainbox.cc>
7 * This file is part of InspIRCd. InspIRCd is free software: you can
8 * redistribute it and/or modify it under the terms of the GNU General Public
9 * License as published by the Free Software Foundation, version 2.
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "modules/httpd.h"
25 /* $ModDesc: Allows for the server configuration to be viewed over HTTP via m_httpd.so */
27 class ModuleHttpConfig : public Module
37 void init() CXX11_OVERRIDE
39 Implementation eventlist[] = { I_OnEvent };
40 ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
43 std::string Sanitize(const std::string &str)
47 for (std::string::const_iterator x = str.begin(); x != str.end(); ++x)
64 if (*x < 32 || *x > 126)
67 ret += ("&#" + ConvToStr(n) + ";");
77 void OnEvent(Event& event) CXX11_OVERRIDE
79 std::stringstream data("");
81 if (event.id == "httpd_url")
83 ServerInstance->Logs->Log("m_http_stats", LOG_DEBUG, "Handling httpd event");
84 HTTPRequest* http = (HTTPRequest*)&event;
86 if ((http->GetURI() == "/config") || (http->GetURI() == "/config/"))
88 data << "<html><head><title>InspIRCd Configuration</title></head><body>";
89 data << "<h1>InspIRCd Configuration</h1><p>";
91 for (ConfigDataHash::iterator x = ServerInstance->Config->config_data.begin(); x != ServerInstance->Config->config_data.end(); ++x)
93 data << "<" << x->first << " ";
94 ConfigTag* tag = x->second;
95 for (std::vector<KeyVal>::const_iterator j = tag->getItems().begin(); j != tag->getItems().end(); j++)
97 data << Sanitize(j->first) << "="" << Sanitize(j->second) << "" ";
102 data << "</body></html>";
103 /* Send the document back to m_httpd */
104 HTTPDocumentResponse response(this, *http, &data, 200);
105 response.headers.SetHeader("X-Powered-By", "m_httpd_config.so");
106 response.headers.SetHeader("Content-Type", "text/html");
107 API->SendResponse(response);
112 Version GetVersion() CXX11_OVERRIDE
114 return Version("Allows for the server configuration to be viewed over HTTP via m_httpd.so", VF_VENDOR);
118 MODULE_INIT(ModuleHttpConfig)