summaryrefslogtreecommitdiffstats
path: root/src/WebAdmin.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/WebAdmin.h')
-rw-r--r--src/WebAdmin.h158
1 files changed, 41 insertions, 117 deletions
diff --git a/src/WebAdmin.h b/src/WebAdmin.h
index b76ca6df8..5e48f597c 100644
--- a/src/WebAdmin.h
+++ b/src/WebAdmin.h
@@ -89,14 +89,14 @@ struct HTTPTemplateRequest
+// tolua_begin
struct sWebAdminPage
{
AString Content;
AString PluginName;
- AString TabTitle;
- AString TabUrlPath;
- AString ContentType;
+ AString TabName;
};
+// tolua_end
@@ -111,49 +111,7 @@ class cWebAdmin :
public:
// tolua_end
- /** Interface for getting the content of a single WebTab. */
- class cWebTabCallback abstract
- {
- public:
- // Force a virtual destructor in descendants
- virtual ~cWebTabCallback() {}
-
- /** Returns the contents for the specified request.
- Returns true if the call was successful, false on an error.
- a_Request is the full HTTP request object, as received from the client.
- a_UrlPath is the UrlPath of the WebTab registered for this request, as parsed from a_Request.
- Descendants should fill a_Content with the page contents
- and optionally set a_ContentType [defaults to "text/html"] */
- virtual bool Call(
- const HTTPRequest & a_Request,
- const AString & a_UrlPath,
- AString & a_Content,
- AString & a_ContentType
- ) = 0;
- };
-
-
- /** Container for a single web tab.
- Each web tab has a title, URL path and an associated plugin's name.
- Each web tab is registered with a callback to provide the content. */
- class cWebTab
- {
- public:
- AString m_Title;
- AString m_UrlPath;
- AString m_PluginName;
- SharedPtr<cWebTabCallback> m_Callback;
-
- cWebTab(const AString & a_Title, const AString & a_UrlPath, const AString & a_PluginName, SharedPtr<cWebTabCallback> a_Callback):
- m_Title(a_Title),
- m_UrlPath(a_UrlPath),
- m_PluginName(a_PluginName),
- m_Callback(a_Callback)
- {
- }
- };
- typedef SharedPtr<cWebTab> cWebTabPtr;
- typedef std::vector<cWebTabPtr> cWebTabPtrs;
+ typedef std::list< cWebPlugin* > PluginList;
cWebAdmin(void);
@@ -162,114 +120,80 @@ public:
/** Initializes the object. Returns true if successfully initialized and ready to start */
bool Init(void);
- /** Starts the HTTP server taking care of the webadmin. Returns true if successful */
+ /** Starts the HTTP server taking care of the admin. Returns true if successful */
bool Start(void);
/** Stops the HTTP server, if it was started. */
void Stop(void);
- /** Loads the login template into m_LoginPage.
- Returns true if the loading succeeds, false if not. */
- bool LoadLoginPage(void);
+ /** Loads the login template. Returns true if the loading succeeds, false if not. */
+ bool LoadLoginTemplate(void);
+
+ void AddPlugin(cWebPlugin * a_Plugin);
+ void RemovePlugin(cWebPlugin * a_Plugin);
- /** Returns a copy of all the registered web tabs.
- Exported to Lua in ManualBindings.cpp. */
- cWebTabPtrs GetAllWebTabs(void) { return m_WebTabs; }
+ // TODO: Convert this to the auto-locking callback mechanism used for looping players in worlds and such
+ PluginList GetPlugins() const { return m_Plugins; } // >> EXPORTED IN MANUALBINDINGS <<
- /** Removes all WebTabs registered by the specified plugin. */
- void RemoveAllPluginWebTabs(const AString & a_PluginName);
+ // tolua_begin
- /** Returns the (inner) page contents for the specified request.
- Calls the appropriate WebTab handler to get the contents.
- Exported to Lua in ManualBindings.cpp. */
sWebAdminPage GetPage(const HTTPRequest & a_Request);
- // tolua_begin
+ /** Returns the contents of the default page - the list of plugins and players */
+ AString GetDefaultPage(void);
- /** Reloads m_IniFile, m_LoginPage and m_TemplateScript.
- Note that reloading will not change the "enabled" state of the server, and it will not update listening ports. */
- void Reload(void);
+ /** Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style) */
+ AString GetBaseURL(const AString & a_URL);
- /** Returns the list of ports on which the webadmin is configured to listen. */
+ /** Returns the list of ports used for the webadmin. */
AString GetPorts(void) const { return StringsConcat(m_Ports, ','); }
+
+ /** OBSOLETE: Returns the list of IPv4 ports used for the webadmin.
+ Currently there is no distinction between IPv4 and IPv6; use GetPorts() instead. */
+ AString GetIPv4Ports(void) const { return GetPorts(); }
+
+ /** OBSOLETE: Returns the list of IPv6 ports used for the webadmin.
+ Currently there is no distinction between IPv4 and IPv6; use GetPorts() instead. */
+ AString GetIPv6Ports(void) const { return GetPorts(); }
+
// tolua_end
- /** Adds a new WebTab handler.
- a_Title is the display title of the tab
- a_UrlPath is the part of the URL that uniquely identifies this tab.
- a_PluginName is the display name of the plugin creating this tab.
- a_Callback is used to provide the actual WebTab contents, when requested.
- Exported in ManualBindings.cpp. */
- void AddWebTab(
- const AString & a_Title,
- const AString & a_UrlPath,
- const AString & a_PluginName,
- SharedPtr<cWebTabCallback> a_Callback
- );
-
- /** Removes the WebTab with the specified URL path.
- Returns true if WebTab was found and removed, false if not found.
- Exported in ManualBindings.cpp */
- bool DelWebTab(const AString & a_UrlPath);
-
- /** Escapes text passed into it, so it can be embedded into html.
- Exported to Lua in ManualBindings.cpp. */
+ /** Escapes text passed into it, so it can be embedded into html. */
static AString GetHTMLEscapedString(const AString & a_Input);
- /** Escapes the string for use in an URL
- Exported to Lua in ManualBindings.cpp. */
+ /** Escapes the string for use in an URL */
static AString GetURLEncodedString(const AString & a_Input);
- /** Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style).
- Exported to Lua in ManualBindings.cpp. */
- static AString GetBaseURL(const AString & a_URL);
-
/** Returns the prefix needed for making a link point to the webadmin root from the given URL ("../../../webadmin"-style) */
static AString GetBaseURL(const AStringVector & a_URLSplit);
- /** Returns the content type from the file extension.
- If the extension isn't in the list, the function returns an empty string.
- Exported to Lua in ManualBindings.cpp. */
+ /** Returns the content type from the file extension. If the extension isn't in the list, the function returns "text/html" */
static AString GetContentTypeFromFileExt(const AString & a_FileExtension);
protected:
- /** Protects m_WebTabs, m_TemplateScript, m_LoginTemplate and m_IniFile against multithreaded access. */
- cCriticalSection m_CS;
-
- /** All registered WebTab handlers.
- Protected against multithreaded access by m_CS. */
- cWebTabPtrs m_WebTabs;
-
- /** The Lua template script to provide templates.
- Protected against multithreaded access by m_CS. */
- cLuaState m_TemplateScript;
-
- /** The HTML page that provides the login.
- Protected against multithreaded access by m_CS. */
- AString m_LoginPage;
-
- /** The webadmin.ini file, used for the settings and allowed logins.
- Protected against multithreaded access by m_CS. */
- cIniFile m_IniFile;
-
/** Set to true if Init() succeeds and the webadmin isn't to be disabled */
bool m_IsInitialized;
/** Set to true if Start() succeeds in starting the server, reset back to false in Stop(). */
bool m_IsRunning;
+ /** The webadmin.ini file, used for the settings and allowed logins */
+ cIniFile m_IniFile;
+
+ PluginList m_Plugins;
+
/** The ports on which the webadmin is running. */
AStringVector m_Ports;
- /** The HTTP server which provides the underlying HTTP parsing, serialization and events */
- cHTTPServer m_HTTPServer;
+ /** The Lua template script to provide templates: */
+ cLuaState m_TemplateScript;
+ /** The template that provides the login site: */
+ AString m_LoginTemplate;
- /** Loads webadmin.ini into m_IniFile.
- Creates a default file if it doesn't exist.
- Returns true if webadmin is enabled, false if disabled. */
- bool LoadIniFile(void);
+ /** The HTTP server which provides the underlying HTTP parsing, serialization and events */
+ cHTTPServer m_HTTPServer;
/** Handles requests coming to the "/webadmin" or "/~webadmin" URLs */
void HandleWebadminRequest(cHTTPServerConnection & a_Connection, cHTTPIncomingRequest & a_Request);